53:代码审计-TP5框架及无框架变量覆盖反序列化
案例1:metinfo-无框架-变量覆盖-自动审计或搜索
变量覆盖配合文件包含实现任意文件包含
<1>自动审计或搜索关键字找到文件及代码块,全局配置文件
变量覆盖漏洞关键字:extract()、parse_str()、importrequestvariables()、$$等
如下代码,表示从get post cookie接收数据,进行变量覆盖
<2>搜索或访问触发全局变量配置文件配合手写代码测试变量覆盖
原理如下图所示
<3>配合文件包含漏洞覆盖指定文件实现文件包含攻击获取权限
追踪$module变量出处文件,然后分析如何覆盖它达到目的
payload:/about/index.php?fmodule-7&module-1.txt
附:代码审计-MetInfo CMS变量覆盖漏洞
https://www.cnblogs.com/-qing-/p/10889100.html
DeDecms变量覆盖之SQL语句分析报告+修复方案
https://www.cnblogs.com/y0umer/archive/2013/06/08/3125647.html
案例2:phpmyadmin-无框架-反序列化-自动审计或搜索
#反序列化-->自动审计或搜索关键字找到文件及代码段 _wakeup() //使用unserialize时触发 _sleep() //使用serialize时触发 _destruct() //对象被销毁时触发 _call() //在对象上下文中调用不可访问的方法时触发 _callStatic() //在静态上下文中调用不可访问的方法时触发 _get() //用于从不可访问的属性读取数据 _set() //用于将数据写入不可访问的属性 _isset() //在不可访问的属性上调用isset()或empty()触发 _unset() //在不可访问的属性上使用unset()时触发 _toString() //把类当做字符串使用时触发 _invoke() //当脚本尝试将对象调用为函数时触发
payload:/about/index.php?fmodule-7&module-1.txt
首先全局搜索unserialize
全局搜索PMA_Config()找到_wakeup()代码段,代码段调用函数中存在eval等函数操作,可调试load
构造getSource()利用payload,实现file_get_contents函数配合eval执行
payload:action=test&configuration=O:10:"PMA_Config":1:{s:6:"source",s:11:"d:/test.txt";}
案例3:Thinkphp5-有框架-搭建使用入口访问调试sql等
Thinkphp5简要知识点
- 入口文件,调试模式,访问路由,访问对应,内置安全等
- 测试访问不同方法名,不同文件不同方法名(https://www.kancloud.cn/thinkphp/thinkphp5_quickstart/478279)
- 其他参考:ThinkPHP5快速入门:https://www.kancloud.cn/thinkphp/thinkphp5_quickstart
<1>测试常规写法SQL注入
源代码-查询数据库常规写法
测试,有sql注入
<2>测试TP5规定写法SQL注入
源代码-使用框架定义写法查询数据库
打开调试模式
测试,尝试sql注入,发现注入语句并未执行,说明thinkphp框架有内置的注入安全过滤。
此时,如果我们想挖sql注入漏洞,那就相当于挖框架漏洞而不是系统漏洞。
thinkphp历史漏洞集合:https://github.com/Mochazz/ThinkPHP-Vuln
从中我们找到了该版本存在SQL注入漏洞,使用payload测试
注入成功。