前言
- 代码审计学习记录
代码审计流程
-
-反向查找流程
- --通过可控变量(输入点)回溯危险函数
- --查找危险函数确定可控变量
- --传递的过程中触发漏洞
-
-案例
-
-反向查找流程特点
- --上下文无关
- --危险函数,调用即漏洞
-
-使用反向查找流程挖掘漏洞
- --危险函数全局查找
- --自动化审计工具(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)解决问题。
-
-
-根源:理解程序执行过程,找寻危险逻辑
-
-特点:
- -- 高效:如挖隧道,双向开工,时间减半
- -- 知识面广:需要同时掌握正向,反向挖掘技巧,并进行结合
- -- 以及所有正向、反向的优点
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 _GET['id']); // ' ==> ' // \ ==> \ // " ==> " // \x00 ==> \0
id';"; echo $sql; ?> `