墨者学院 - PHP代码分析溯源(第2题)

本文探讨了一道PHP代码分析题目,涉及PHP哈希比较的潜在问题。由于PHP中0e开头的MD5值会被隐式转换为0,导致比较异常。通过分析,发现可以构造特定字符串,利用这一漏洞使不同MD5值在比较时被视为相等。解决方案是使用`===`进行严格比较。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

根据题干看了好久的php隐式转换。。。

还是毫无头绪。。。

这样的逻辑几乎是无解的。。。

md5(QNKCDZO,32) = 0e830400451993494058024219903391

 

根据PHP Hash比较存在缺陷

http://www.freebuf.com/news/67007.html

。。。在这道题中,最重要的一句话就是:

根据php的隐式转换可以知道 oe开头的md5都会转换成0
所以只要找到oe开头的字符串即可

必应搜索结果第一条:

http://www.cnblogs.com/Primzahl/p/6018158.html

 

这就是题目啊,,,随便拿一个就OK了,,,

 

16进制的数据中是含有e的,可以构建使得两个数字比较的,这里有一个现成的例子:

md5('240610708') 
//0e462097431906509019562988736854.
md5('QNKCDZO') 
//0e830400451993494058024219903391

可以看到,这两个字符串一个只包含数字,一个只包含字母,虽然两个的哈希不一样,但是都是一个形式:0e 纯数字这种格式的字符串在判断相等的时候会被认为是科学计数法的数字,先做字符串到数字的转换。

转换后都成为了0的好多好多次方,都是0,相等。(大家可以自己尝试一下)因此

md5('240610708')==md5('QNKCDZO'); //True
md5('240610708')===md5('QNKCDZO'); //False

用===可以避免这一漏洞。

 

### 学院 WebShell 文件上传漏洞分析与溯源方法 #### 背景概述 WebShell 是一种嵌入到目标服务器中的脚本程序,攻击者可以通过它远程控制受害者的服务器。文件上传漏洞通常允许攻击者通过伪造请求或其他手段绕过安全机制,在服务器上放置恶意脚本。 在学院的相关目中提到的内容涉及多个方面,包括 MIME 类型篡改、禁用 JavaScript 绕过前端验证以及利用后缀名规避检测等技术[^1]。 --- #### 漏洞成因分析 文件上传漏洞的主要原因在于服务端对上传文件的安全校验不足。具体表现为以下几个方面: 1. **MIME 类型校验不严格** 攻击者可以使用工具(如 Burp Suite)抓取 HTTP 请求并修改其 MIME 类型字段,从而绕过基于内容类型的限制。例如,将 `.txt` 文件伪装为 `image/jpeg` 格式的图片文件。 2. **依赖客户端验证** 如果仅依靠浏览器端的 JavaScript 验证来阻止非法文件类型,则容易被禁用或绕过。一旦禁用了 JavaScript 功能,就可以轻松提交不符合预期规则的文件[^2]。 3. **扩展名校验缺陷** 当某些应用只检查文件名而未深入解析实际内容时,可能会接受带有特殊后缀名(比如 `.php5`, `.pht` 等变种 PHP 扩展)的文件作为合法输入[^3]。这使得即使表面上看似正常的文件也可能隐藏潜在威胁。 --- #### 解决方案建议 为了有效防范此类问的发生,可以从以下几方面着手改进防护措施: - 加强服务端逻辑设计, 不应单纯信任来自用户的任何数据; - 对于上传过程实施多重过滤策略, 如限定白名单内的 mime-type 和尺寸范围之外还需确认最终存储形式确实无害; - 定期审查现有代码库寻找可能存在的安全隐患点,并及时修补已知漏洞; 以下是实现上述部分功能的一个 Python 示例演示如何初步判断一个给定字符串是否可能是危险命令执行语句的一部分: ```python import re def is_potentially_dangerous(input_string): pattern = r'(?:exec|passthru|shell_exec|system|proc_open|popen)' match_result = re.search(pattern, input_string.lower()) return bool(match_result) test_strings = ["<?php echo 'hello'; ?>", "<?php system('ls'); ?>"] for s in test_strings: print(f"'{s}' -> {is_potentially_dangerous(s)}") ``` 此函数会返回 True 或 False 表明传入参数是否存在可疑的关键字组合。 --- #### 总结 通过对学院案例的学习可以看出,针对 web shell 的防御工作需要综合考虑多层面的因素,从前端界面交互直至后台数据库操作均需保持高度警惕以防万一环节疏漏造成严重后果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值