代码审计Day7 - parse_str函数缺陷
发布网友
发布时间:2024-09-30 23:43
我来回答
共1个回答
热心网友
时间:2024-10-14 05:40
本文由红日安全成员:l1nk3r 编写,如有不当,还望斧正。
在PHP代码审计的项目 PHP-Audit-Labs 中,我们当前讨论的是第7篇关于“代码审计Day7 - parse_str函数缺陷”的文章。本阶段的内容题目均来自 PHP SECURITY CALENDAR 2017 ,旨在提供分析和实际CMS案例解说。
此篇文章关注的是变量覆盖漏洞,特别指出这一漏洞的产生与不安全的parse_str函数使用密切相关。通过提交特定格式的数据,如"config[dbhost]=127.0.0.1",可以控制全局变量并绕过登陆验证,进而进行攻击。解析parse_str函数定义,揭示其将查询字符串解析为变量并直接覆盖现有作用域中变量的特性。
实例分析聚焦于DedeCmsV5.6版本的漏洞,该版本的buy_action.php处存在SQL注入漏洞,与parse_str函数密切相关。通过对比补丁和源文件,发现补丁主要针对加密函数强度的加强,推测漏洞可能由mchStrCode编码方法引起。进一步分析发现,此函数可以编码或解码用户提交的数据,并且在某些情况下,解码结果可能未经过充分过滤,导致SQL注入产生。
分析中提到,mchStrCode函数的关键问题在于未对定义的key进行检查,允许攻击者通过编码绕过GPC和其他过滤机制,将攻击代码直接注入目标。详细解析了mchStrCode函数的编码过程,指出其中使用$_SERVER["HTTP_USER_AGENT"]与$GLOBALS['cfg_cookie_encode']进行拼接并进行md5计算,以获取加密密钥。
利用思路中提到,虽然漏洞原理简单,但利用难度较高,关键在于解决mchStrCode函数的编码问题。通过搜索全文,找到一处加密调用,发现可以利用其特性绕过过滤。具体操作包括使用[a=1&b=2%26c=3]的提交方式,让页面直接回显并获取pr_encode和pr_verify值,进而实现SQL注入攻击。
漏洞利用示例中,通过特定参数访问buy_action.php文件,配合差异性参数和SQL注入代码,获取pd_encode和pd_verify字段的值。最后构造payload进行攻击。文章最后提供了修复建议,包括在注册变量前先判断变量是否存在,以及使用extract函数配置EXTR_SKIP参数等。
文章结尾留有CTF题目,鼓励读者实践。同时,作者提供了CMS下载链接和邮箱联系方式,欢迎交流和讨论。对于parse_str函数的深入理解,通过实例分析和漏洞利用示例,读者可以更加清晰地理解其潜在风险和应对策略。