专栏首页漏洞知识库SQL注入学习之 - Access数据库注入原理

SQL注入学习之 - Access数据库注入原理

Access-简介

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

一般Access数据库用于aspaspx脚本网站比较多一些,这是一个比较小型的数据库,Access是以文件形式存放于目录中

有(列名/字段)、表名、值,数据库后缀是*.mdb:

从上图可以知道:

表名:admin_user

列名/字段:admin

值:21232f297a57a5a743894a0e4a801fc3

Asp连接Access数据库代码

*.mdb格式

<%
	dim conn,connstr,db
	db="Your.mdb"
	Set conn = Server.CreateObject("ADODB.Connection")
	connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(db)
	conn.Open connstr
%>

*.accdb格式

<%
	dim conn,connstr,db
	db="Your.accdb"
	Set conn = Server.CreateObject("ADODB.Connection")
	connstr="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Server.MapPath(db)
	conn.Open connstr
%>

Access数据库注入原理

看一个网站有没有注入就是看看我们插入的字符有没有带入网站数据库中进行执行,执行就说明存在注入

漏洞靶场:http://127.0.0.1:99/

在URL后面*1,也就是id=31乘1,结果还是等于31对吧

所以页面返回正常!那么我在后面加一个-7: 因为数据库中只有id为:31、22、23、24、25、26的值:

可以看到在URL后面-7页面返回了是其他页面,说明它吧我们输入的值带入查询了!说明存在SQL注入

当然有些人判断是否存在注入是这样的:(当然你了解了原理,判断注入的方式都无所谓)

and 1=1 返回正常

and 1=2 返回错误

存在上方条件即可判断存在SQL注入

但是我一般喜欢用:.0 和 .1来判断(过安全狗)

.0 返回正常

.1 返回错误

有的时候你插入一些语句,网站页面前台不会回显任何信息,可以使用BurpSuite来查看回显信息!

判断数据库注入

为什么要判断是那种数据库?答:因为知道了数据库的类型就可以使用响应的SQL语法来进行注入攻击

判断是否为access数据库
and exsits(select * from msysobjects)>0

判断是否为sqlserver数据库and exsits(select * from sysobjects)>0
判断是否为access数据库

and exsits(select * from msysobjects)>0

可以看到页面回显:不能读取记录;在 'msysobjects' 上没有读取数据权限

说明存在msysobjects这个数据库名,Access数据库就存在这个数据库名!

判断数据库表名

联合查询是否有admin这个表名
and exists(select * from amdin)

很显然,admin这个表不存在!

常见的表名有:

admin
admins
admin_user
admin_usr
admin_msg
admin_login
user
username
manager
msg_user
msg_login
useradmin
...等等

提示:一般Access数据库有个表名:news,不过没啥卵用

最后手工猜解出表名是:admin_user

判断数据库列名

刚刚手工猜解出表名是:admin_user,现在来根据表名来判断列名:

查询admin_user表名下是否有admin这个列
 and exists(select admin from admin_user)

说明admin_user表名下还是有admin这个列名的!

admin_user表名下还有一个id列名一个password列名!

常见的列名有:

admin
admin_user
username
password
pass
pwd
users
usr
user_login
user_name
login_name
...等等

判断字段长度

必须小于等于字段的长度返回正常

order by [number]
order by 8
返回错误
order by 7
返回正常

知道了它有7列,那么就可以进行联合查询

union联合查询

通过union联合查询admin_user这个表
union select 1,2,3,4,5,6,7 from admin_user

可以看到,网站页面回显了几个数字:2、3、5!

爆出来的数字是非数字类型的列,因为方便爆出来账号密码!因为账号密码不是数字类型的,是字符型的!

这样我们就可以在这些列上来爆账号密码

使用union联合查询admin_user表下的admin、password列的字段内容
union select 1,admin,password,4,5,6,7 from admin_user

得到用户名:admin

MD5加密后的密码:21232f297a57a5a743894a0e4a801fc3

MD5解密结果为:admin

知道账号密码直接登录到后台管理!

番外篇

通过ASCII码来判断:

判断admin_user表名下的admin列下的内容长度是否等于5个字符,返回正常说明长度就是5

and (select len(admin) from admin_user)=5

说明判断admin列名的长度是5!

判断admin_user表名下的password列下的内容长度是否等于32个字符,返回正常说明长度就是32

and (select len(password) from admin_user)=32

一般MD5加密后的无非就1632位字符!

现在是判断出来管理员账号和密码的字符长度了!

接下来猜解出每一个字符了!

ASCII码的对照图

ASCII码猜解字符

这个语句的意思就是:

查询admin_user表下的admin列名的第个字符的第一列的ascii码是否大于100

and (select top 1 asc (mid(admin,1,1)) from admin_user)>100

因为admin列名的字段内容是admin!即第一个字符是a,而aASCII码是97!

那么就可以构造以下语句查询:

查询admin列名字段内容的第一个字符的第一列的ASCII码是否等于97,也就是a
and (select top 1 asc (mid(admin,1,1)) from admin_user)=97

返回正常!说明第一个字符是a!

因为我们知道字段内容是admin,那么a的下一个字符就是是d,而dASCII码就是100:

那么就可以构造以下语句查询:

and (select top 1 asc (mid(admin,2,1)) from admin_user)=100

返回正常!说明第二个字符的内容是d!

就是这样,一点点的判断然后爆出管理员的账号!也就是admin列名下的字段内容!

下面是爆password字段的内容:

因为之前我们知道了password的字段内容是:21232f297a57a5a743894a0e4a801fc3

那么第一个字段内容就是2,下一个就是1,再下两个分别是23以此类推!

因为2的ASCII码是50,那么就构造语句如下:

and (select top 1 asc (mid(password,1,1)) from admin_user)=50

返回正常!原理就是这样,以此类推下去慢慢猜解出来就好了,sqlmap就是采用这种方式来猜解字段内容的!

本文分享自微信公众号 - 漏洞知识库(HackedBug),作者:PowerLiu

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Kerberos域用户提权漏洞(MS14-068)分析与防范

    大家好,这里是 渗透攻击红队 的第 36 篇文章,本公众号会记录一些我学习红队攻击的复现笔记(由浅到深),不出意外每天一更

    渗透攻击红队
  • Microsoft SQL Server手注之db_owner权限处理

    首先我配置了一下权限:(添加了一个新用户 saul,映射了 test 数据库,只有 db_owner,public权限)

    渗透攻击红队
  • 『流量分析溯源』有人删除了数据库中的登录记录,找到攻击者境内的IP地址。

    题目地址:https://www.mozhe.cn/bug/detail/NDU3RnFGTitFdUlaOXNlNFp6QzUydz09bW96aGUmozh...

    渗透攻击红队
  • 弱口令,yyds

    在渗透企业资产时,弱口令往往可达到出奇制胜,事半功倍的效果!特别是内网,那家伙,一个admin admin或者admin123 拿下一片,懂的都懂。

    Gamma实验室
  • pycharm wsl Permission denied

    一看就知道这个是linux用户权限的问题,一开始安装子系统会强制用户设置一个账户,该账户是个普通账户,无权擦写/usr/local目录下的文件

    马哥Python
  • mongoexport导出数据时遇到的种种问题(好坑)

    双愚
  • 博客系统开发-后台模块创建及相关路由配置

    今天来说一下“博客系统开发-后台模块创建及相关路由配置”,继昨天‘博客开发-框架安装及网站配置’,我们今天来写后台模块、配置强制路由模式、创建后台公共控制器、首...

    小白程序猿
  • 二次注入——sqli-labs第24关

    提示说:please login to continue,请登录以继续。 没有账号怎么登录? 当然是选择注册

    宸寰客
  • [HCTF] admin出题人求挨打

    HCTF2018-web-admin来自出题人的write up

    安恒网络空间安全讲武堂
  • Django安装及简单使用1.5

    Django安装及简单使用1.5 代码都在github: URL:https://github.com/njxshr/codes/tree/master/t...

    98k

扫码关注云+社区

领取腾讯云代金券