SQL注入(二)–Access注入

数据库简介

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

Microsoft Office Access是微软把数据库引擎的图形用户界面和软件开发工具结合在一起的一个数据库管理系统。

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

数据库结构

库(只有一个)->表->字段->值

判断数据库类型

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

其中msysobjects是access独有的表,且外部无法访问。如果报错,则为access数据库,正常就是msSQL(即SQL server)。

但是,access数据库没有注释符,所以只能采用%00截断的方式。如果PHP中开启了魔术引号,则要把查询内容转换为十六进制。

开始注入

注入方法

  • 联合查询
  • 逐字猜解(盲注)

联合查询详细步骤

1.判断是否存在注入点:提交单引号或运用逻辑运算

例如:

提交单引号:?id=1'若报错,则存在注入点

逻辑运算:?id=1' and 1=1#正常,?id=1' and 1=2#报错,则存在注入点

2.确定列名数目

?id=1' order by 列名数

这里以靶场为例,当order by后面是22时正常,23时报错,说明这个数据库有22个列名。

3.猜表名

猜对了继续联合查询:?id=1513' union select 1,2,......,22 from 表名,猜不到算你倒霉(当然,可以结合网站源代码猜)。这样可以爆出显示位3和15,再把要查询的内容替换上面的3和15。

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数据库只能靠暴力猜解,因此经常会猜解不到列名,这样的话可以使用偏移注入,猜解不到表名的话可以使用社工方法。

感谢大家的耐心阅读,如有疑问,敬请在评论区留言!本文为明赫IT大本营的原创文章,经实践,测试,整理后发布。如需转载请联系作者获得授权,并注明转载地址。本文链接:https://www.terry906.top/sql%e6%b3%a8%e5%85%a5%ef%bc%88%e4%ba%8c%ef%bc%89-access%e6%b3%a8%e5%85%a5/

类别:

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

没有回应

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注