漏洞关键字
- 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 简要知识点
- 入口文件,调试模式,访问路由,访问对应,内置安全等
- 测试访问不同方法名,不同文件不同方法名
- thinkphp 开发手册:URL 访问 · ThinkPHP5 快速入门 · 看云 (kancloud.cn)
- 其他参考:ThinkPHP5 快速入门
- thinkphp 开发手册(收费):ThinkPHP5 快速入门 · 看云 (kancloud.cn)
- 相关知识
- 现在 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 语句
- 现在 TP5 最为常见,以前则是 3.23 使用 PHPstudy 搭建 TP5 时,网站目录指向 public 文件夹
反序列化漏洞挖掘过程
- 搜索关键字“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- 无框架-变量覆盖-自动审计或搜索
1. 审计代码,查找漏洞
- 1. 打开网站
2. 然后自动分析代码,我们发现 $$ 这个漏洞可能是变量覆盖漏洞
3. 我们发现有好几处都有双 $$ 符号漏洞,但是对于这种漏洞,一定需要那种经常被调用的文件分析,如,配置文件(数据库链接)
4. 我们发现,这里可能从在漏洞,我们先来试一下这个漏洞是否存在,搜索 common.inc.php
5. 找一个包含这个文件的文件,如 index.php
- 6. 因为这个文件相当于 首页的后端代码,模板 /index.html 是前端展示页面
- 7. 所以 ,在 index.html 中 这个变量我们没有声明参数,且输出这个参数
8. 然后,我们测试这个漏洞
- 9. 我们发现漏洞存在!
2. 利用漏洞,实现配合覆盖文件达到任意文件上传
- 两个文件包含漏洞的条件:
- 满足包含变量覆盖的配置文件
- 满足存在包含函数及可控变量
- 1. 我们搜索 文件包含 的关键词 (require_once)
2. 我们发现这里的可能性极大,打开分析
3. 我们在分析 module.php 发现里面包含我们需要的文件,而且还发现了 $fmodule 变量
但是这有这一个对 fmodule 变量的判断 ,如果不等于 7 ,就会返回 404 ,所以必须要 fmodule 参数必须等于 7
- 参数 about/index.php?module=1.txt&fmodule=7
phpmydmin- 无框架-反序列化-自动审计或搜索
- 参考:phpMyAdmin-WooYun-2016-199433 (rj45mp.github.io)
- [Vulhub](WooYun-2016-199433)phpmyadmin 反序列化漏洞 _yAnd0n9 的博客 -CSDN 博客
Thinkphp5- 有框架-搭建使用入口访问调试 sql 等
- 首页在 application/index/controlle
- 1. 文件访问格式
访问链接格式:
2. 参数格式访问
链接:
3. 数据库写法
- (1)thinkphp 框架开发手册自带数据库写法
(2)程序员自己开发
4.thinkphp 调试开启方法
- 修改配置
- 5. 漏洞挖掘方向
- (1)如果开发人员按照 thinkphp 开发手册开发 (自带过滤防护)
- 那就需要挖掘 thinkphp 框架漏洞
- thinkphp 历史版本框架漏洞参考:GitHub – Mochazz/ThinkPHP-Vuln: 关于 ThinkPHP 框架的历史漏洞分析集合
- (2)如果开发人员按照程序员自己的写法开发
- 那就可以挖掘 开发者的漏洞
- (1)如果开发人员按照 thinkphp 开发手册开发 (自带过滤防护)
- 6.view 和 controller
- view 是 html 在前端显示
- controller 是 前端 html 对应的后端(功能)
相关链接
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容