代码审计-TP5框架及无框架变量覆盖反序列化
第53天:代码审计-TP5框架及无框架变量覆盖反序列化 - 图1
#漏洞关键字:
SQL注入:
select insert update mysql_query mysqli等
文件上传:
$_FILES,type=”file”,上传,move_uploaded_file()等
XSS跨站:
print print_r echo sprintf die var_dump var_export等
文件包含:
include include_once require require_once等
代码执行:
eval assert preg_replace call_user_func call_user_func_array等
命令执行:
system exec shell_exec `` passthru pcntl_exec popen proc_open
变量覆盖:
extract() parse_str() importrequestvariables() $$ 等
反序列化:
serialize() unserialize() construct destruct等
其他漏洞:
unlink() file_get_contents() show_source() file() fopen()等

通用关键字:
$_GET,$_POST,$_REQUEST,$_FILES,$_SERVER等

功能点或关键字分析可能存在漏洞
抓包或搜索关键字找到代码出处及对应文件
追踪过滤或接受的数据函数,寻找触发此函数或代码的地方进行触发测试
演示案例:

  • Metinfo-无框架-变量覆盖-自动审计或搜索
  • phpmydmin-无框架-反序列化-自动审计或搜索
  • Thinkphp5-有框架-搭建使用入口访问调试SQL等

变量覆盖配合文件包含实现任意文件包含
自动审计或搜索关键字找到文件及代码段,全局配置文件
搜索或访问触发全局配置文件配合手写代码测试变量覆盖
配合文件包含漏洞覆盖指定文件实现文件包含攻击获取权限
追踪$module变量出处文件,然后分析如何覆盖它达到目的
Payload:/about/index.php?fmodule=7&module=1.txt

反序列化
自动审计或搜索关键字找到文件及代码段
wakeup() //使用unserialize时触发
sleep() //使用serialize时触发
destruct() //对象被销毁时触发
call() //在对象上下文中调用不可访问的方法时触发
callStatic() //在静态上下文中调用不可访问的方法时触发
get() //用于从不可访问的属性读取数据
set() //用于将数据写入不可访问的属性
isset() //在不可访问的属性上调用isset()或empty()触发
unset() //在不可访问的属性上使用unset()时触发
toString() //把类当作字符串使用时触发
invoke() //当脚本尝试将对象调用为函数时触发
找到
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”;}

Thinkphp5简要知识点
入口文件,调试模式,访问路由,访问对应,内置安全等
测试访问不同方法名,不同文件不同方法名
测试常规写法SQL注入,TP5规定写法SQL注入
涉及资源:
https://www.kancloud.cn/thinkphp/thinkphp5_quickstart
https://pan.baidu.com/s/1miETaZcez30jmUEA5n2EWw 提:xiao