【HTB】Craft Machines Writeup

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
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章