当Windows遇上PHP–路径爆破

本文详细探讨了Windows系统下PHP路径爆破问题,指出FindFirstFile函数的漏洞影响所有Windows+PHP版本。通过实例展示了如何利用此漏洞,包括文件包含、路径遍历等技巧,并讨论了可能的防御措施和类似问题在其他解释性语言中的可能性。

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

在这里插入图片描述
.开场白

此次所披露的是以下网页中提出的问题所取得的测试结果:

http://code.google.com/p/pasc2at/wiki/SimplifiedChinese


<?php
for ($i=0; $i<255; $i++) {
$url = '1.ph' . chr($i);
$tmp = @file_get_contents($url);
if (!empty($tmp)) echo chr($i) . "\r\n";
}
?>

已知1.php存在,以上脚本访问的结果是:

1.php
1.phP
1.ph<
1.ph>
都能得到返回。

前两种能返回结果是总所周知的(因为windows的文件系统支持大小的互转的机制),另外的两种返回引起了我们的注意。

测试php版本:PHP4.9,PHP5.2,PHP5.3,PHP6.0

测试系统:WINXP SP3 X32,WINXP SP2 X64,WIN7,WIN2K3

经测试我们得出的结论是:该漏洞影响所有的windows+php版本


2.深入探查模糊测试的结果

为了继续深入探查关于该bug的信息,我们对demo做了些许修改:

&lt;?php
for ($j=0; $i&lt;256; $j++) {
for ($i=0; $i&lt;256; $i++) {
$url = '1.p' . chr($j) . chr($i);
$tmp = @file_get_contents($url);
if (!empty($tmp)) echo chr($j) . chr($i) . "\r\n";
}
}
?&gt;

在调试php解释器的过程中,我们将此“神奇”的漏洞归结为一个Winapi 函数FindFirstFile()所产生的结果(http://msdn.microsoft.com/en-us/library/aa364418(v=vs.85).aspx).更好玩的是,当跟踪函数调用栈的过程中我们发现字符”>”被替换成”?”,字符”<”被替换成”*”,而符号”(双引号)被替换成一个”.”字符。这在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值