0x00 靶机信息
0x01 信息收集
使用nmap扫描靶机端口:
只开了两个端口,直接访问https://10.10.10.110,得到如下界面:
没有进一步的暗示,再查看页面源码,得到如下两个域名:
https://api.craft.htb/api/
https://gogs.craft.htb/
但是直接访问是失败的,因为没有dns的关系。
于是需要现在hosts文件下添加两个域名并保存。
网站是craft cms搭建的。再分别访问以上两个网址:
这个是类似github的代码托管仓库,这里存放了craft-api的开发代码。
跟进查看,发现是flask开发的。
0x02 Port22尝试:
使用hydra进行ssh爆破测试
爆破无果
0x03 Port443尝试:
0x03-1 代码审计
下载Gogos里面的代码做审计。
在craft-api/api/endpoints/brew.py
的第43行有eval函数:
要触发该eval函数需要访问/brew/
后经过身份认证,之后取post中的json数据,而如果在json的abv
变量中输入命令执行的语句,就可以执行命令。
而要通过认证,可以在craft_api/api/auth/endpoints/auth.py
中找到:
即在header中添加X-Craft-Api-Token
的值。值就是login认证的token
0x03-2 getshell
访问https://10.10.10.110/api/
,先进行登陆认证操作:
这里的登陆密码需要从代码仓库的更新记录中找到:
登陆成功后会返回toke值
之后在/brew
的api那块选择POST选项卡,然后在选项卡中的数据区域的abv变量处输入payload:
payload可以参考
https://blog.csdn.net/u011721501/article/details/47298723
发送的数据包如下:
然后用nc监听6909端口:
0x03-3 搜索
尝试搜索user.txt和root.txt但都无果。查看当前目录,跟代码仓库的差不多。
运行dbtest.py,发现返回了一个用户信息:
修改dbtest.py,查看user表中的数据:
0x03-4 再访代码仓库
从项目的开发者名单里面发现有三个人,正好对应从数据库中查询出来的。
挨个账号登陆,发现gilfoyle
这个账户下有个项目,而且还有ssh密钥。
下载项目到本地,使用密钥进行ssh登陆,但是一直失败,仔细看了警告信息:
说明id_rsa的权限过高,使用命令chmod 0600 ~/.ssh/id_rsa
进行修改,然后再次ssh,使用原来的密码就可以了。
登陆后查找user.txt,得到对应的flag信息
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>
然后输入keyd的值即可以root的身份登陆。
搜索root.txt即可获得flag