1.开场白

此次所披露的是以下网页中提出的问题所取得的测试结果:
http://code.google.com/p/pasc2at/wiki/SimplifiedChinese

<"\r\n";
}
"htmlcode">
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做了些许修改:

<"\r\n";
}
}
"http://msdn.microsoft.com/en-us/library/aa364418(v=vs.85).aspx" rel="external nofollow" >http://msdn.microsoft.com/en-us/library/aa364418(v=vs.85).aspx).更好玩的是,当跟踪函数调用栈的过程中我们发现字符”>”被替换成”"http://msdn.microsoft.com/en-us/library/community/history/aa364418%28v=vs.85%29.aspx" rel="external nofollow" >http://msdn.microsoft.com/en-us/library/community/history/aa364418%28v=vs.85%29.aspx"theimg" onclick="window.open(this.src)" src="/UploadFiles/2021-04-02/2014728101832249.png">
 
此外,我们还发现该利用也可以被运用到c++中,以下采用来自msdn的例子:

#include <windows.h>
#include <tchar.h>
#include <stdio.h>
void _tmain(int argc, TCHAR *argv[])
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
if( argc != 2 )
{
_tprintf(TEXT("Usage: %s [target_file]\n"), argv[0]);
return;
}
_tprintf (TEXT("Target file is %s\n"), argv[1]);
hFind = FindFirstFile(argv[1], &FindFileData);
if (hFind == INVALID_HANDLE_VALUE)
{
printf ("FindFirstFile failed (%d)\n", GetLastError());
return;
}
else
{
_tprintf (TEXT("The first file found is %s\n"),
FindFileData.cFileName);
FindClose(hFind);
}
}

当传入参数”c:\bo<”时,成功访问到boot.ini文件。

3.利用方法总结

当调用FindFirstFile()函数时,”<”被替换成”*”,这意味该规则可以使”<”替换多个任意字符,但是测试中发现并不是所有情况都如我们所愿。所以,为了确保能够使”<”被替换成”*”,应当采用”<<”
EXAMPLE:include(‘shell<');  或者include(‘shell<<');    //当文件夹中超过一个以shell打头的文件时,该执行取按字母表排序后的第一个文件。
当调用FindFirstFile()函数时,”>”被替换成”"htmlcode">

<"/images/".$_GET['a'].".jpg");
//or another function from Table 1, i.e. include().
"htmlcode">
Warning: include(/images/../a<) [function.include]: failed to open stream:Invalid argument in。。。
Warning: include(/images/../a<) [function.include]: failed to open stream:Permission denied。。

如果是第一种情况,说明不存在a打头的文件,第二种则存在。
 
此外,有记录显示,有时网站会抛出如下错误:

Warning: include(/admin_h1d3) [function.include]: failed to open stream: Permission denied..

这说明该文件夹下存在一个以上以a打头的文件(夹),并且第一个就是admin_h1d3。

5.结论
实验告诉我们,php本身没有那么多的漏洞,我们所看到是:过分的依赖于另一种程序语言(注:如文中的漏洞产自与winapi的一个BUG),并且直接强 制使用,将会导致细微的错误(bug),并最终造成危害(vul).这样便拓宽了模糊测试的范畴(译者注:并不仅仅去研究web层面,而深入到系统底层),并最终导致IDS,IPS的规则更新。诚然,代码需要保护,需要补丁,需要升级与扩充。但是,这并不是我们真正要去关注的问题。在当下,我认为我们 更谨慎地去书写更多更严厉的过滤规则,正如我们一直在做的一样。任重道远,精益求精。
因为这是基础应用层的问题,所以我们猜想类似的问题可能出现在其他web应用中。于是我们还测试了mysql5,而实验结果表明,mysql5并不存在类似的漏洞。但是我们仍认为:类似的漏洞将会出现在诸如Perl、Python、Ruby等解释性语言上。

6.Referer

PHP application source code audits advanced technology:
http://code.google.com/p/pasc2at/wiki/SimplifiedChinese
MSDN FindFirstFile Function reference:
http://msdn.microsoft.com/en-us/library/aa364418(v=vs.85).aspx
MSDN comments history:
http://msdn.microsoft.com/en-us/library/community/history/aa364418(v=vs.85).aspx?id=3
MSDN article «Naming Files, Paths, and Namespaces»:
http://msdn.microsoft.com/en-us/library/aa365247(v=vs.85).aspx
Technet article «Managing Files and Directories»:
http://technet.microsoft.com/en-us/library/cc722482.aspx
Paper «Technique of quick exploitation of 2blind SQL Injection»:
http://www.exploit-db.com/papers/13696/

 ==================================================================
全文完。
注:该文是2011年底发表的一篇白皮书,至今该bug依然存在。我在几个月前做CUIT的一个CTF时偶遇了一道该bug的利用,当时便是看的此文,当时只是粗粗读了一下,写了一个php的脚本去跑目录。今回闲来无事,翻译整理了一番。

广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!

稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!

昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。

这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。

而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?