SQL注入简单学习代码审计和分析

244 阅读2分钟

前言

  • 代码审计学习记录

代码审计流程

  • -反向查找流程

    • --通过可控变量(输入点)回溯危险函数
    • --查找危险函数确定可控变量
    • --传递的过程中触发漏洞
  • -案例

  • -反向查找流程特点

    • --上下文无关
    • --危险函数,调用即漏洞
  • -使用反向查找流程挖掘漏洞

    • --危险函数全局查找
    • --自动化审计工具(RISP,VCG,Fortify SCA,Cobra,grepbugs,Sky wolf, Taint)
  • -根源:危险函数导致漏洞

  • -特点

    • --暴力:全局搜索危险函数
    • --简单:无需过多理解目标网站功能与架构
    • --快速:适用于自动化代码审计工具
    • --命中率低:简单的漏洞越来越少
    • --无法挖掘逻辑漏洞:逻辑漏洞多数不存在危险函数,或危险函数的参数“看似”不可控
    • --适应性交叉:不适合存在全局过滤的站点
  • -正向查找流程(MVC架构 Model View Controller)Controller主要分发处理请求逻辑,Model专门处理数据库相关操作,View显示给用户的一些内容

    • -- 从入口点函数出发
    • -- 找到控制器,理解URL派发规则
    • -- 跟踪控制器调用,以理解代码为目标
    • -- 阅读代码的过程中,可能发现漏洞
  • -案例

    • -- PHPCMS v9.6.0 前台GetShell漏洞
  • -根源:程序员疏忽或逻辑问题导致漏洞

  • -特点:

    • -- 复杂:需要及其了解目标源码的功能与架构
    • -- 跳跃性大: 涉及M/V/C/Service/Dao等多个层面
    • -- 漏洞的组合:通常是多个漏洞的组合,很可能存在逻辑相关的漏洞
    • -- 潜力无限:安全研究人员的宝库
  • -双向查找流程

    • -- 阅读代码,了解架构

    • -- 是否有全局过滤机制?

    • --- 有:是否可以绕过?

      • ---- 可以:寻找漏洞触发点
      • ---- 不可以: 寻找没有过滤的变量
    • --- 没有:那么它是如何处理的?

      • ---- 完全没有处理:可以挖成筛子
      • ---- 有处理:寻找遗漏的处理点
    • -- 找到了漏洞点,漏洞利用是否有坑?

    • --- 否:成功利用!

    • --- 是:利用所知的语言知识(trick)解决问题。

image-20211014095411276

  • -根源:理解程序执行过程,找寻危险逻辑

  • -特点:

    • -- 高效:如挖隧道,双向开工,时间减半
    • -- 知识面广:需要同时掌握正向,反向挖掘技巧,并进行结合
    • -- 以及所有正向、反向的优点

PHP-SQL注入漏洞挖掘技巧

  • -PHP+Mysql连接方法

    • -- Mysql(废弃)
    • -- Mysqli
    • -- PDO
  • -SQL注入漏洞常见过滤方法

`-- intval / addslashes / mysql_real_escape

-- mysqli_escape_string / mysqli_real_escape_string / mysqli::escape_string

-- PDO::quote

-- 参数化查询`

  • -addslashes / mysql_real_escape

    • -- 宽字符注入
    • -- 寻找字符串转换函数
    • --- urldecode
    • --- base64_decode
    • --- iconv
    • --- json_decode
    • --- stripshasles
    • --- simple_xml_loadstring

` <?php id=addslashes(id = addslashes(_GET['id']); // ' ==> ' // \ ==> \ // " ==> " // \x00 ==> \0

sql="SELECTFROMdualWHEREid=sql = "SELECT * FROM dual WHERE id = 'id';"; echo $sql; ?> `