【HTB】Craft Machines Writeup

0x00 靶机信息

【HTB】Craft Machines Writeup_第1张图片

0x01 信息收集

使用nmap扫描靶机端口:
【HTB】Craft Machines Writeup_第2张图片只开了两个端口,直接访问https://10.10.10.110,得到如下界面:
【HTB】Craft Machines Writeup_第3张图片
没有进一步的暗示,再查看页面源码,得到如下两个域名:
在这里插入图片描述

https://api.craft.htb/api/
https://gogs.craft.htb/

但是直接访问是失败的,因为没有dns的关系。
于是需要现在hosts文件下添加两个域名并保存。
网站是craft cms搭建的。再分别访问以上两个网址:
【HTB】Craft Machines Writeup_第4张图片【HTB】Craft Machines Writeup_第5张图片这个是类似github的代码托管仓库,这里存放了craft-api的开发代码。
跟进查看,发现是flask开发的。
【HTB】Craft Machines Writeup_第6张图片

0x02 Port22尝试:

使用hydra进行ssh爆破测试
爆破无果

0x03 Port443尝试:

0x03-1 代码审计

下载Gogos里面的代码做审计。
craft-api/api/endpoints/brew.py的第43行有eval函数:

【HTB】Craft Machines Writeup_第7张图片
要触发该eval函数需要访问/brew/后经过身份认证,之后取post中的json数据,而如果在json的abv变量中输入命令执行的语句,就可以执行命令。

而要通过认证,可以在craft_api/api/auth/endpoints/auth.py中找到:
【HTB】Craft Machines Writeup_第8张图片
即在header中添加X-Craft-Api-Token的值。值就是login认证的token

0x03-2 getshell

访问https://10.10.10.110/api/,先进行登陆认证操作:
【HTB】Craft Machines Writeup_第9张图片
这里的登陆密码需要从代码仓库的更新记录中找到:
【HTB】Craft Machines Writeup_第10张图片
登陆成功后会返回toke值
【HTB】Craft Machines Writeup_第11张图片
之后在/brew的api那块选择POST选项卡,然后在选项卡中的数据区域的abv变量处输入payload:
【HTB】Craft Machines Writeup_第12张图片
payload可以参考

https://blog.csdn.net/u011721501/article/details/47298723

发送的数据包如下:
【HTB】Craft Machines Writeup_第13张图片
然后用nc监听6909端口:
【HTB】Craft Machines Writeup_第14张图片

0x03-3 搜索

尝试搜索user.txt和root.txt但都无果。查看当前目录,跟代码仓库的差不多。
【HTB】Craft Machines Writeup_第15张图片
运行dbtest.py,发现返回了一个用户信息:
在这里插入图片描述
修改dbtest.py,查看user表中的数据:
在这里插入图片描述

0x03-4 再访代码仓库

从项目的开发者名单里面发现有三个人,正好对应从数据库中查询出来的。
挨个账号登陆,发现gilfoyle这个账户下有个项目,而且还有ssh密钥。
【HTB】Craft Machines Writeup_第16张图片【HTB】Craft Machines Writeup_第17张图片
下载项目到本地,使用密钥进行ssh登陆,但是一直失败,仔细看了警告信息:
【HTB】Craft Machines Writeup_第18张图片
说明id_rsa的权限过高,使用命令chmod 0600 ~/.ssh/id_rsa进行修改,然后再次ssh,使用原来的密码就可以了。
登陆后查找user.txt,得到对应的flag信息

【HTB】Craft Machines Writeup_第19张图片

Root权限

这里不能用sudo提权,困扰了很久,也看了别人的留言,最后注意到vault这个文件夹。
搜索vault,发现是一种用于在现代应用程序体系结构中安全地管理机密信息的流行工具。而且从泄漏的信息中找到secrets.sh可以看到:

#!/bin/bash

# set up vault secrets backend

vault secrets enable ssh

vault write ssh/roles/root_otp \
    key_type=otp \
    default_user=root \
    cidr_list=0.0.0.0/0

使用命令:
vault write ssh/creds/root_otp ip=<靶机ip>
【HTB】Craft Machines Writeup_第20张图片
然后输入keyd的值即可以root的身份登陆。
搜索root.txt即可获得flag
【HTB】Craft Machines Writeup_第21张图片

你可能感兴趣的:(笔记,WEB安全)