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测试

注入成功。