Access+Mssql+Oracle数据库注入

Access数据库注入

前言:在常见的注入测试中,由于每个数据库内置架构和应用不同,导致数据库类型将决定注入的手法,Access数据库是小型数据库类型,普遍用于小型WEB应用,其中Access注入手法也相对于较为简单。

第一点:比较Mysql结构及功能

Mysql数据库

数据库A zblog = www.zblog.com

  表名

    列名

      数据

数据库B dede = www.dede.com

  表名

    列名

      数据

ACCESS数据库(只有一个数据库,不存在多个,适合小型网站)

  表名

    列名

      数据

 

功能:

mysql支持文件操作功能,注入的时候也可以操作文件

access除了正常的sql查询外,没有这种高级功能

mysql注入时经常用到information_schema查询数据库下的表名及列名信息,access是没有这种类似数据库的,也就是说access获取表名及列名信息属于暴力猜解(也就是说,不能通过注入知道数据库名,只能通过字典遍历文件名,有可能遍历不到数据库名)

access数据库会存在表名或列名猜解不到的情况

access偏移注入:解决列名获取不到的情况,有部分几率会直接得到数据,参考:

https://www.cnblogs.com/xishaonian/p/6054320.html

来到靶机页面:

 

 

随便找一个连接点进去

猜到原本字段22

http://127.0.0.1:8002/Production/PRODUCT_DETAIL.asp?id=1513 order by 22
http://127.0.0.1:8002/Production/PRODUCT_DETAIL.asp?id=1513 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 from admin  //admin是管理表名

 

 

 

爆显示位了,判断admin表内存在的字段数:

接下来测出偏移量,其实这个偏移量就是admin这张表的列的个数,我们利用“*”代替admin表内存在的字段,由于是22个字段数,需要逐步测试,直到返回正常。

 

逐个减少

 

16的时候正常了,

1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,*    代表字段数有6个

 

偏移注入的基本公式为:

order by 出的字段数减去*号的字段数,然而再用order by的字段数减去2倍刚才得出来的答案

  也就是 22-16=6 22-6x2=10 

原本字段(22)-现列出的字段(16)=*号的字段(6)

也就是说admin表内存在6个字段。

http://127.0.0.1:8002/Production/PRODUCT_DETAIL.asp?id=1513 union select 1,2,3,4,5,6,7,8,9,10,a.id,b.id,* from (admin as a inner join admin as b on a.id = b.id)
#admin表变成了(admin as a inner join admin as b on a.id=b.id),这里是将admin重命名为了a和b两张表,然后通过inner join 将a表和b表的id相同字段展示出来,a表和b表本来都是admin表,所以id肯定都是相同的(这里要提醒一下,id这个字段可以换成其它字段,但是一定得存在,一般admin表中都存在id字段的),这样做的目的就是可以打乱顺序来爆出其它字段
#但是由于增加了一张表,所以字段数得再减少一个*号的长度,所以另一个表字段数就是12
#这里union select 1,2,3,4,5,6,7,8,9,10:顾名思义就是刚才得出来的长度。
#后面的是sql,可作公式。

 

如此便爆出了账号密码(隐形显示位)。

然后再用二级偏移

 

http://127.0.0.1:8002/Production/PRODUCT_DETAIL.asp?id=1513 union select 1,2,3,4,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)

 

最后还是一脸懵???

进阶参考文章:《移位溢注:告别靠人品的偏移注入》

表名:

关注url地址,后台地址表单等信息进行猜解

如:xx.com/pe_news.asp或pe_admin表名可能为pe_admin

如:后台地址表单值为admin_user 表名可能为admin_admin

结构案例:

比如服务器上有ABCD四个站点,其中ABC三个网站使用MySQL数据库,数据库将全部存储用mysql中,D使用access数据库,它单独存在,由于结构上面的问题,跨库注入在access中一般不会利用到

格式存储路径案例:

mysql数据库的存储格式myi,myd,frm,数据存储路径在安装目录下data目录

 

Access数据库格式:

mdb或asp asp等 存储路径在网站目录下,mdb格式文件知道文件名可以进行正常的下载,而mysql不行,因为他的数据库在安装目录下,是在网站的上级目录,访问不了

 

 

 

mdb格式文件可以进行正常的下载

第二点:Access联合查询及逐字猜解

第三点:部分Access注入工具分析

 

墨者学院靶场示例

 

点击通知

存在注入点

和mysql差不多,猜到字段是4

 

 

这里access不用猜数据库名,所以直接猜表名,命令有点不同,后面接from+表名

 

表名猜错不会出显示位,所以表名都是靠遍历的

 

在显示位插入查询,如果其中一个字段错误的话,两个都不会显示出来

 

这里猜对了字段名username,出来字段名了,剩下那个就要字典跑

其实在这之前应该先awvs等扫描到注入点然后用sqlmap或者明小子等注入就可以了

 

最后猜到字段名是passwd

 

 

Mssql数据库注入

第一点:比较Mysql结构及功能

mssql sqlsever 和mysql结构一样 功能不一样 mssql进行文件及文件目录的操作 命令执行等

第二点:mssql权限注入方法分析

sa sysadmin权限 :最高权限 文件文件夹及数据操作 命令执行等

db db_owner权限 :可能存在多个数据

public权限: 单个数据操作

第三点:部分mssql注入工具分析

 

墨者靶场示例

明小子

 

 

 

sa权限:最高权限 文件文件夹及数据操作 命令执行等

明小子读不了表,然后用穿山甲,各种傻瓜式操作

 

其实两个工具配合,分析执行的命令

 

 

Oracle数据库注入

DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。 RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。 CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。 对于普通用户:授予connect, resource权限。 对于DBA管理用户:授予connect,resource, dba权限。

比较其他数据库的特性,能做的操作?

 

和mssql差不多,但是加密方式可能不同,还有,执行命令看操作系统

 

穿山甲命令执行无回显,可能权限不够

 

数据有$符号的应该是自带的数据库,所以没有$的是重点关注对象

 

posted @ 2021-02-23 19:22  impulse-  阅读(266)  评论(0编辑  收藏  举报