代码审计--最常见的漏洞审计篇
字数 1259 2025-08-05 00:15:37

代码审计:常见漏洞审计实战指南

前言

本教程旨在提供代码审计中常见漏洞的检测方法与实战技巧,仅供安全研究与学习使用,严禁用于非法目的。

XSS漏洞审计

审计流程

  1. 定位输出点:寻找直接输出用户可控变量的位置

    • 示例:echo $company_name; 直接输出未过滤的变量
  2. 追踪变量来源

    • 检查变量是否来自用户输入(如$_GET$_POST
    • 示例中变量来自$lang->install实例化类
  3. 验证漏洞

    • 注入测试payload:<script>alert(1)</script>
    • 确认是否存储到数据库(存储型XSS)

关键点

  • 重点关注未经过滤的echoprint等输出函数
  • 注意间接输出场景(如通过模板引擎)

文件上传漏洞审计

类型一:黑名单绕过

  1. 检测上传限制

    • 上传测试文件观察拦截机制
    • 搜索相关错误信息定位代码
  2. 分析过滤逻辑

    • 示例中发现in_array()进行后缀名检查
    • 黑名单包含:php, php5, phtml
  3. 绕过方法

    • 大小写绕过:使用PHP代替php
    • 特殊后缀php.(末尾加点)
    • 双重后缀test.php.jpg
  4. 深入审计

    • 检查getUploadFileInfo()函数
    • 验证checkExt()函数是否转换大小写

类型二:解析漏洞

  1. 前端分析

    • 检查HTML源码中的上传处理函数
    • 示例中发现getupload()函数
  2. 后端逻辑审计

    • getExtension()函数存在逻辑缺陷
    • 空后缀名绕过黑白名单检查
  3. 服务器配置影响

    • .htaccess强制解析无后缀文件为PHP
    • 内容示例:
    <FilesMatch "^[^.]+$">
    SetHandler application/x-httpd-php
    </FilesMatch>
    

SQL注入漏洞审计

审计流程

  1. 定位输入点

    • 寻找SQL语句拼接处
    • 示例中通过frparam()获取用户输入
  2. 分析过滤机制

    • format_param()函数进行多层过滤
    • SafeFilter过滤XSS和SQL关键字
  3. 关键过滤函数

    • addslashes()转义特殊字符
    • stripos()检测危险关键词:update, delete
  4. 绕过技巧

    • 避免使用黑名单关键词
    • 使用注释分割:UNION/**/SELECT
    • 编码绕过:十六进制/URL编码

深度审计技巧

  1. 自定义函数追踪

    • 全局搜索function frparam定义
    • 分析其返回值处理逻辑
  2. 版本差异利用

    • PHP版本<7.4且魔术引号关闭时防护较弱
    • 利用mysql_real_escape_string()的局限性
  3. 二次注入检测

    • 检查从数据库读取后直接使用的数据

附录:审计工具推荐

  1. 静态分析工具

    • RIPS
    • SonarQube
    • PHPStan
  2. 动态测试工具

    • Burp Suite
    • SQLMap
    • XSS Hunter
  3. 辅助工具

    • grep (代码搜索)
    • Seay源代码审计系统

总结

代码审计需要结合静态分析与动态验证,重点关注:

  • 用户输入的所有入口点
  • 数据流经的所有处理环节
  • 最终输出的上下文环境

通过系统化的审计流程,可以有效发现各类安全漏洞,提升应用安全性。

代码审计:常见漏洞审计实战指南 前言 本教程旨在提供代码审计中常见漏洞的检测方法与实战技巧,仅供安全研究与学习使用,严禁用于非法目的。 XSS漏洞审计 审计流程 定位输出点 :寻找直接输出用户可控变量的位置 示例: echo $company_name; 直接输出未过滤的变量 追踪变量来源 检查变量是否来自用户输入(如 $_GET 、 $_POST ) 示例中变量来自 $lang->install 实例化类 验证漏洞 注入测试payload: <script>alert(1)</script> 确认是否存储到数据库(存储型XSS) 关键点 重点关注未经过滤的 echo 、 print 等输出函数 注意间接输出场景(如通过模板引擎) 文件上传漏洞审计 类型一:黑名单绕过 检测上传限制 上传测试文件观察拦截机制 搜索相关错误信息定位代码 分析过滤逻辑 示例中发现 in_array() 进行后缀名检查 黑名单包含: php , php5 , phtml 等 绕过方法 大小写绕过 :使用 PHP 代替 php 特殊后缀 : php. (末尾加点) 双重后缀 : test.php.jpg 深入审计 检查 getUploadFileInfo() 函数 验证 checkExt() 函数是否转换大小写 类型二:解析漏洞 前端分析 检查HTML源码中的上传处理函数 示例中发现 getupload() 函数 后端逻辑审计 getExtension() 函数存在逻辑缺陷 空后缀名绕过黑白名单检查 服务器配置影响 .htaccess 强制解析无后缀文件为PHP 内容示例: SQL注入漏洞审计 审计流程 定位输入点 寻找SQL语句拼接处 示例中通过 frparam() 获取用户输入 分析过滤机制 format_param() 函数进行多层过滤 SafeFilter 过滤XSS和SQL关键字 关键过滤函数 addslashes() 转义特殊字符 stripos() 检测危险关键词: update , delete 等 绕过技巧 避免使用黑名单关键词 使用注释分割: UNION/**/SELECT 编码绕过:十六进制/URL编码 深度审计技巧 自定义函数追踪 全局搜索 function frparam 定义 分析其返回值处理逻辑 版本差异利用 PHP版本 <7.4且魔术引号关闭时防护较弱 利用 mysql_real_escape_string() 的局限性 二次注入检测 检查从数据库读取后直接使用的数据 附录:审计工具推荐 静态分析工具 RIPS SonarQube PHPStan 动态测试工具 Burp Suite SQLMap XSS Hunter 辅助工具 grep (代码搜索) Seay源代码审计系统 总结 代码审计需要结合静态分析与动态验证,重点关注: 用户输入的所有入口点 数据流经的所有处理环节 最终输出的上下文环境 通过系统化的审计流程,可以有效发现各类安全漏洞,提升应用安全性。