代码审计-TP5 框架及无框架变量覆盖反序列化

漏洞关键字

  • 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,preg_replace+/e,assert,call_user_func,call_user_func_array,create_function 等
  • 命令执行: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 $_SEVER 等

反序列化 –> 自动审计或搜索关键词找到文件及代码段

  • _wakeup()// 使用 unserialize 时触发
  • _sleep() // 使用 serialize 时触发
  • _destruct() // 对象被销毁时触发
  • _call() // 在对象上下文中调用不可访问的方法时触发
  • _callStatic() // 在静态上下文中调用不可访问的方法时触发
  • _get() // 用于从不可访问的属性读取数据
  • _set() // 用于将数据写入不可访问的属性
  • _isset() // 在不可访问的属性上调用 isset() 或 empty() 触发
  • _unset() // 在不可访问的属性上使用 unset() 时触发
  • _toString() // 把类当做字符串使用时触发
  • _invoke() // 当脚本尝试将对象调用为函数时触发

Thinkphp5 简要知识点

  • 入口文件,调试模式,访问路由,访问对应,内置安全等
代码审计-TP5 框架及无框架变量覆盖反序列化
  • 测试访问不同方法名,不同文件不同方法名
  • 其他参考:ThinkPHP5 快速入门
  • 相关知识
    • 现在 TP5 最为常见,以前则是 3.23 使用 PHPstudy 搭建 TP5 时,网站目录指向 public 文件夹

      搭建好 TP5 打开网页会显示“:) ThinkPHP V5”

      入口文件位于“public/index.php”,默认为“APPlication”,可以修改,通过修改“APP_PATH”的值实现

      URL 访问格式“http://domainName/index.php/ 模块 / 控制器 / 操作”,其中“模块”指目录名,“控制器”指 PHP 文件名,“操作”指函数名

      地址中的“index.php”可加可不加

      “APPlication/ index/controller”目录下,有默认自带测试页面“Index.php”,访问地址为“http://domainName/index.php/index/index/index”,“controller”未体现在地址中

      通过 GET 传参 x=1,可以是“地址 /x/1”,也可以是“地址 ?x=1”

      访问数据库除了一般的写法外,还有一种写法“db(‘users’)->where(‘id’,$id)->select();”,其效果等于“$sql=”select * from injection.users where id=$id”;”,但是 Seay 无法监控其 SQL 语句,该写法也可以避免一部分 SQL 注入

      调试模式开启:打开“APPlication/config.php”,将“应用调试模式”和“应用 Trace”都改为“true”,再次打开网站,右下角会有调试模式开关,可以监控 SQL 语句

反序列化漏洞挖掘过程

  • 搜索关键字“unserialize”,发现“set.php”使用了该函数,使用 unserialize() 时会自动触发对象的 __wakeup() 查看代码发现“set.php”创建了一个“$PMA_Config”对象,找到对象的声明,再找到对象的“__wakeup()”方法

    读代码发现“__wakeup()”下的“load()”函数使用了“eval()”“file_get_contents()”函数,存在文件读取操作

    为了触发反序列化漏洞需要访问 set.php,并 POST“configuration”“action”两个参数,其中“action”不等于“clear”,“configuration”则等于序列化的“$PMA_Config”对象,对象的值为“test.txt”

    构建 Payload:“127.0.0.1:8081/phpmyadmin2/scripts/setup.php”Post“action=test&configuration=O:10:”PMA_Config”:1:{s:6:”source”,s:11:”d:/test.txt”;}”

    将 test.txt 替换为需要的文件,可以配合其他漏洞利用该漏洞

变量覆盖

  • 文件导入 Seay 后可以用“自动审计”对程序进行一个简单的分析,其他工具也有该功能自动审计提示“/include/common.inc.php”中有“$$”可能存在变量覆盖漏洞,从目录和文件名推断该文件应该是配置文件

    变量覆盖漏洞一般先看配置型文件,因为配置型文件会被其他文件包含、使用,有利于排查漏洞

    在“/include/common.inc.php”的一处遍历中,将数组“array(‘_COOKIE’,’_POST’,’_GET’)”的键值依次赋给“$_request”,比如“$_request”等于“_COOKIE”,那么“$$_request”也就等于“$_COOKIE”

    上述函数可以接收参数的键值,使变量名等于参数名,导致变量覆盖,换言之,该函数可以接收对任意变量的赋值

    所有包含该代码的页面都存在变量覆盖漏洞,只需再找到可控变量就可以利用漏洞

    这里选择配合文件包含漏洞进行利用,查找关键字“include_once”,发现文件“/about/index.php”存在可控变量“$module”

    查看代码发现“/about/index.php”包含“/include/module.php”,该文件又包含 /include/common.inc.php”,漏洞存在

    搜索可控变量“$module”,了解到控制该变量需要 fmodule=7,构建 Payload“192.168.0.101.9009/about/index.php?fmodule=7&module=1.txt”

    后续只需要上传一个任意格式的后门文件代替“1.txt”即可

案例演示

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

Metinfo- 无框架-变量覆盖-自动审计或搜索

1. 审计代码,查找漏洞

  • 1. 打开网站
代码审计-TP5 框架及无框架变量覆盖反序列化

2. 然后自动分析代码,我们发现 $$ 这个漏洞可能是变量覆盖漏洞

代码审计-TP5 框架及无框架变量覆盖反序列化

3. 我们发现有好几处都有双 $$ 符号漏洞,但是对于这种漏洞,一定需要那种经常被调用的文件分析,如,配置文件(数据库链接)

代码审计-TP5 框架及无框架变量覆盖反序列化

4. 我们发现,这里可能从在漏洞,我们先来试一下这个漏洞是否存在,搜索 common.inc.php

代码审计-TP5 框架及无框架变量覆盖反序列化

5. 找一个包含这个文件的文件,如 index.php

代码审计-TP5 框架及无框架变量覆盖反序列化
代码审计-TP5 框架及无框架变量覆盖反序列化
  • 6. 因为这个文件相当于 首页的后端代码,模板 /index.html 是前端展示页面
  • 7. 所以 ,在 index.html 中 这个变量我们没有声明参数,且输出这个参数
代码审计-TP5 框架及无框架变量覆盖反序列化

8. 然后,我们测试这个漏洞

代码审计-TP5 框架及无框架变量覆盖反序列化
  • 9. 我们发现漏洞存在!

2. 利用漏洞,实现配合覆盖文件达到任意文件上传

  • 两个文件包含漏洞的条件:
    1. 满足包含变量覆盖的配置文件
    2. 满足存在包含函数及可控变量
  • 1. 我们搜索 文件包含 的关键词 (require_once)
代码审计-TP5 框架及无框架变量覆盖反序列化

2. 我们发现这里的可能性极大,打开分析

代码审计-TP5 框架及无框架变量覆盖反序列化

3. 我们在分析 module.php 发现里面包含我们需要的文件,而且还发现了 $fmodule 变量

代码审计-TP5 框架及无框架变量覆盖反序列化

 但是这有这一个对 fmodule 变量的判断 ,如果不等于 7 ,就会返回 404 ,所以必须要 fmodule 参数必须等于 7

  • 参数 about/index.php?module=1.txt&fmodule=7
代码审计-TP5 框架及无框架变量覆盖反序列化

phpmydmin- 无框架-反序列化-自动审计或搜索

Thinkphp5- 有框架-搭建使用入口访问调试 sql 等

  • 首页在 application/index/controlle
  • 1. 文件访问格式
代码审计-TP5 框架及无框架变量覆盖反序列化

访问链接格式:

代码审计-TP5 框架及无框架变量覆盖反序列化

2. 参数格式访问

代码审计-TP5 框架及无框架变量覆盖反序列化

链接:

代码审计-TP5 框架及无框架变量覆盖反序列化

3. 数据库写法

  • (1)thinkphp 框架开发手册自带数据库写法
代码审计-TP5 框架及无框架变量覆盖反序列化

(2)程序员自己开发

代码审计-TP5 框架及无框架变量覆盖反序列化

4.thinkphp 调试开启方法

  • 修改配置
代码审计-TP5 框架及无框架变量覆盖反序列化
  • 5. 漏洞挖掘方向
  • 6.view 和 controller
    • view 是 html 在前端显示
    • controller 是 前端 html 对应的后端(功能)
代码审计-TP5 框架及无框架变量覆盖反序列化

相关链接

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容