由于本文结合了不少大牛提到过的技术,虽然是自己写的经验总结,但不敢斗胆标上“原创”二字。总体讲access的注入是很鸡肋的,因为我们能做的太少了。但终归是一种技术,所以还是把他做出来了。注入的原理和基础不是本文的重点。
一、union 与 order by
        或许你对这对“黄金搭档”已经熟练,但你未必掌握他的原理和利用条件。union要求前后两个表字段数一致,这就是要用select 1,2,3,4,5...这样的形式去匹配字段数的原因。另外,如果前一个查询介入了两个表或者你注射的变量进入了两个查询式估计union是无能为力了。然后是order by,他是排序的意思,你常会看到什么sql语句里有(比如一个新闻系统)类似 order by id desc,title desc 的语句,他就是安字段id和title降序排列。order by x这样的形式中x的意思是按第x个字段排序,理论上基于关系模型的DBMS都应该支持这种表达。这就是可以理解为什么可以使用order by判断字段数了。当你指定的排序字段不存在,计算机当然会抱错。但值得注意的是,order by 用在sql句末,如果在你的参数后还有一个什么东西捣乱的话,你就只好另寻他法了。
二、垮库查询
    前提你了解其他数据库的物理路径。那么可以利用[mdbfilepath].[tablename]的形式来查询它,当然,在表名后跟上in 'mdbfile path'也一样。别我有什么用,我只能说算是种思路吧。
三、iif(condition,value1,value2)
      这个函数你可能接触不多,但如果注入判断在代入sql之后就相当有用了。直观的讲就是你的参数可能先进入sql再进行的判断。虽然不多见,但确实有。这样你就可以用iif函数的特性:当条件condition为ture时它返回value1,反之为value2。比如iif(1=1,1,2)它返回1,而iif(1>1,1,2)返回2。另外,在不得不用逻辑显错和500错误时也是有用的。
四、union的高级注入
     这个请参看本站的《union的再突破》。我这里讲下表的自链接。其语法如:table1 as a inner join table1 as b on a.id=b.id(自联一次,变成两个表的记录集大小,字段数加倍) table1 as c inner join (table1 as a inner join table1 as b on a.id=b.id) on c.id=a.id(自联二次,变成三个表的记录集大小,字段数为原来的三倍)如果要自联更多只需要按语法嵌套即可。
五、Access注入导出文件
    形如SELECT * into [test.txt] in 'd:\' 'text;' from admin 这样的语句就可以把admin表的内容生成一个叫test.txt的文件。但能导出的文件格式是有限的,它由HKEY_LOCALMACHINE\Software\Microsoft\Jet\4.0\Engines\Text\DisableExtension控制,默认只有txt,csv,tab,asc,tmp,htm,html。
六,关于空格的绕过
    有的程序过滤了空格,把它变成了空。痛苦的是再mssql屡试不爽的/**/代替在access里不灵。其实在sql里面任何结果集都可以以()来包围,而sql认同在关键字和字符与()品节时对空格的省略。如下是我注入老y文章系统时突破它的checkstr()的例子:
checkstr()代码如下:
function CheckStr(str) 
    CheckStr=replace(replace(replace(replace(str,"<","<"),">",">"),chr(13),"<br>")," ","") 
   CheckStr=replace(replace(replace(replace(CheckStr,"'",""),"and",""),"insert",""),"set","") 
    CheckStr=replace(replace(replace(replace(CheckStr,"select",""),"update",""),"delete%20from",""),chr(34),""")
end function

构造注入代码:
class.asp?id=(1)UNION(sselectelect(1),admin_name,3,4,5,6,7,8,9,10,11,(12)from[yao_admin])

七、一些绕过检查的技巧及原理
    如果看见是cint()这样的变态函数就算了。
    若防注入代码中没有lcase这样的转换可以用大小写混淆:sELecT,UniON,ANd;另外,在url编码中,若提交没有编码的无效字符会在系统中被忽略掉,如sele%ct,uni%on,这样的方法是可以绕过一流防注入系统的。具体情况说也说不完,点到为止了。