[红日安全]PHP-Audit-Labs题解之Day1-4
字数 1536 2025-08-18 11:37:33

PHP代码审计实战教学:Day1-4题解详解

前言

本教学文档基于红日安全团队的PHP-Audit-Labs项目中的Day1至Day4题目,详细解析了PHP代码审计中的关键漏洞点和利用技巧。这些题目涵盖了in_array函数缺陷、filter_var函数绕过、实例化任意对象漏洞以及strpos使用不当等常见安全问题。

Day1:in_array函数缺陷与updatexml注入

漏洞分析

  1. in_array函数弱类型比较绕过

    • 代码将用户ID存储在$whitelist数组中
    • 使用in_array检查用户输入的id参数是否在白名单中
    • 未使用严格模式(in_array第三个参数未设为true),导致类型混淆绕过
  2. updatexml报错注入

    • 注入点在updatexml函数
    • 特殊字符或字母会导致报错,报错信息会显示特殊字符之后的内容
    • 常规方法使用concat(0x7e,(SELECT user()),0x7e)进行拼接

绕过技巧

  1. in_array绕过

    • 使用id=1'即可绕过检查
  2. updatexml注入绕过

    • 题目过滤了字符串拼接函数
    • 使用make_set函数替代concat
      and (select updatexml(1,make_set(3,'~',(select flag from flag)),1))
      

关键点

  • in_array必须使用严格模式(第三个参数为true
  • 报错注入时确保数据以非数字开头
  • 当常规拼接函数被过滤时,寻找替代函数

Day2:filter_var函数绕过与命令执行

漏洞分析

  1. filter_var函数绕过

    • 使用FILTER_VALIDATE_URL过滤器验证URL
    • 多种方法可绕过此验证
  2. 命令执行

    • 使用exec执行curl命令
    • 需要$site_info['host']sec-redclub.com结尾

绕过方法

  1. filter_var绕过payload

    http://demo.com@sec-redclub.com
    http://demo.com&sec-redclub.com
    http://demo.com?sec-redclub.com
    http://demo.com/sec-redclub.com
    demo://demo.com,sec-redclub.com
    demo://demo.com:80;sec-redclub.com:80/
    http://demo.com#sec-redclub.com (#需编码为%23)
    
  2. 命令执行payload

    demo://";ls;#;sec-redclub.com:80/
    demo://";cat<f1agi3hEre.php;#;sec-redclub.com:80/
    

关键点

  • filter_var的URL验证可被多种方式绕过
  • 命令执行时使用<代替空格绕过过滤
  • 注意URL编码特殊字符

Day3:实例化任意对象与XXE漏洞

漏洞分析

  1. 任意类实例化

    • 使用class_exists检查类是否存在
    • 不存在时调用__autoload或注册的自动加载函数
  2. XXE漏洞

    • 利用PHP内置类SimpleXMLElement
    • 结合PHP流读取文件内容

利用方法

  1. 搜索flag文件

    • 使用GlobIterator类:
      ?name=GlobIterator&param=./*.php&param2=0
      
  2. 读取文件内容

    • 使用SimpleXMLElement配合PHP流:
      ?name=SimpleXMLElement&param=<?xml version="1.0"?><!DOCTYPE ANY [<!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=/var/www/html/CTF/f1agi3hEre.php">]><x>&xxe;</x>&param2=2
      

关键点

  • 利用PHP内置类进行文件操作
  • 使用base64编码绕过XML特殊字符限制
  • param2=2对应LIBXML_NOENT模式,允许实体解析

Day4:弱类型比较漏洞

漏洞分析

  1. 弱类型比较

    • 使用==比较用户输入和随机数
    • 可被数组和布尔值绕过
  2. 利用方法

    • 提交包含7个true元素的数组
    • 只要随机数不含0,比较结果即为真

关键点

  • 永远使用===进行严格比较
  • JSON格式输入可传递数组和布尔值
  • 数字与true比较时,除0外都为真

总结

  1. 函数使用注意事项

    • in_array必须使用严格模式
    • filter_var验证可被绕过,需额外验证
    • 避免使用==,始终使用===
  2. 安全编码实践

    • 对用户输入进行严格过滤和验证
    • 使用参数化查询防止SQL注入
    • 禁用危险函数如execsystem
  3. 审计技巧

    • 关注输入验证和过滤逻辑
    • 寻找替代函数绕过过滤
    • 利用PHP特性和内置类进行漏洞利用

通过这四天的题目,我们学习了PHP代码审计中的多种漏洞类型和利用技巧,这些知识对于提高代码安全意识和审计能力至关重要。

PHP代码审计实战教学:Day1-4题解详解 前言 本教学文档基于红日安全团队的PHP-Audit-Labs项目中的Day1至Day4题目,详细解析了PHP代码审计中的关键漏洞点和利用技巧。这些题目涵盖了in_ array函数缺陷、filter_ var函数绕过、实例化任意对象漏洞以及strpos使用不当等常见安全问题。 Day1:in_ array函数缺陷与updatexml注入 漏洞分析 in_ array函数弱类型比较绕过 : 代码将用户ID存储在 $whitelist 数组中 使用 in_array 检查用户输入的 id 参数是否在白名单中 未使用严格模式( in_array 第三个参数未设为 true ),导致类型混淆绕过 updatexml报错注入 : 注入点在 updatexml 函数 特殊字符或字母会导致报错,报错信息会显示特殊字符之后的内容 常规方法使用 concat(0x7e,(SELECT user()),0x7e) 进行拼接 绕过技巧 in_ array绕过 : 使用 id=1' 即可绕过检查 updatexml注入绕过 : 题目过滤了字符串拼接函数 使用 make_set 函数替代 concat : 关键点 in_array 必须使用严格模式(第三个参数为 true ) 报错注入时确保数据以非数字开头 当常规拼接函数被过滤时,寻找替代函数 Day2:filter_ var函数绕过与命令执行 漏洞分析 filter_ var函数绕过 : 使用 FILTER_VALIDATE_URL 过滤器验证URL 多种方法可绕过此验证 命令执行 : 使用 exec 执行 curl 命令 需要 $site_info['host'] 以 sec-redclub.com 结尾 绕过方法 filter_ var绕过payload : 命令执行payload : 关键点 filter_var 的URL验证可被多种方式绕过 命令执行时使用 < 代替空格绕过过滤 注意URL编码特殊字符 Day3:实例化任意对象与XXE漏洞 漏洞分析 任意类实例化 : 使用 class_exists 检查类是否存在 不存在时调用 __autoload 或注册的自动加载函数 XXE漏洞 : 利用PHP内置类 SimpleXMLElement 结合PHP流读取文件内容 利用方法 搜索flag文件 : 使用 GlobIterator 类: 读取文件内容 : 使用 SimpleXMLElement 配合PHP流: 关键点 利用PHP内置类进行文件操作 使用base64编码绕过XML特殊字符限制 param2=2 对应 LIBXML_NOENT 模式,允许实体解析 Day4:弱类型比较漏洞 漏洞分析 弱类型比较 : 使用 == 比较用户输入和随机数 可被数组和布尔值绕过 利用方法 : 提交包含7个 true 元素的数组 只要随机数不含0,比较结果即为真 关键点 永远使用 === 进行严格比较 JSON格式输入可传递数组和布尔值 数字与 true 比较时,除0外都为真 总结 函数使用注意事项 : in_array 必须使用严格模式 filter_var 验证可被绕过,需额外验证 避免使用 == ,始终使用 === 安全编码实践 : 对用户输入进行严格过滤和验证 使用参数化查询防止SQL注入 禁用危险函数如 exec 、 system 等 审计技巧 : 关注输入验证和过滤逻辑 寻找替代函数绕过过滤 利用PHP特性和内置类进行漏洞利用 通过这四天的题目,我们学习了PHP代码审计中的多种漏洞类型和利用技巧,这些知识对于提高代码安全意识和审计能力至关重要。