这个是数据库类型,
前面我以MySQL数据库讲了一些东西,讲了mysql数据库和其他数据库是相互可以举一反三的,学完之后mysql这个注入思路和MySQL是差不多的,基本上后面的这些数据库无非就是注入语句不一样,有特点的不一样,其他的基本是一样,
除了access数据库之外,其他数据库大部分思路都是这样的,第一部都是明确注入数据库类型和权限,这个权限就是看它是高权限还是低权限 ,如果是高权限我们可以进行相对应的操纵的,像这个文件读写,命令执行,注册表读取等吗,不过还是要看数据库的,有一个两个或者某一个,最后获取shell就是这个结果,如果是低权限,一般就是明确数据库记录信息的表,数据库基本上都有这个东西,数据库自带这个记录信息的表,这个信息里面就会有数据的表名列名信息,后面就是查询到,获取后台地址登陆,之后那shell权限,这里可能会失败,就在网站里面拿shell的时候可能会失败的情况。所以说一般高权限的话直接进行高权限操纵获取shell,如过不是高权限就那些东西无法执行的再来到上面低权限,进行数据库的读取,在来到后台在到后台里面进行提取shell,最终目的都是为了网站权限。
思维导图就是提供给思路,除了access数据库之外基本上都可以,拿到注入点第一件事就是明确数据库类型和权限,之后要明确一下提交方法,不同的提交方法注入的时候参数类型都要注意,会有注入语上面的不同。
json演示
这个数据包就点开那个赛题与数据后的数据包,很明显是json格式的数据包,如果要注入的话就在括号内,前面是参数名,要注意的话就要更改引号里面的东西,这就是一个很正常的json的数据格式,传输的参数类型和我们看到的不一样,别的有个等=表示,而他的格式是图中那样的参数名:引号括起来
那个json格式的双引号要不要闭合?答案是不用闭合(去掉干扰符合)的,双引号对我们没影响,里面是纯数字大概率没有字符,数字也可以有,纯是源码自己搞,但字符一定要有干扰符合,json跟之前看到的数据包格式不一样,但一样也是可能有注入点的。
简要学习各种数据库的注入特点#
数据库:access,MySQL,mssql,mongoDB,postgresql,sqlite,oracle,sybase等
除了access之外他们的组成架构都是大同小异的,先来说一下access,access一般会和asp的脚本搭建组合数据库,现在asp的网站语句很少了
access数据库
这一对比就发现access数据比其他数据库要低一个等级,在搭建网站的时候access网站,数据会保存到网站源码下面,就在他网站源码下面,换一个网站也是access,他们是互不相干的没有关系,像我们之前提到过跨库注入,mysql下面就可能存在数据a,数据库b,就可以通过数据a获取到数据库b信息,access就没有,因为他的数据库是独立村存在的,每一个网站就是自己的,不和其它网站相关,没有任何关系。mysql这种就不一样,他们在mysql数据库下面还有其他数据库,每一个数据库对应一个网站,同一归mysql数据库管,而access独立存在各管各的,也造成了在注入方面的不同,access的是唯一的,不需要获取名字,只有access在他下面获取表名等等,而在注入mysql的时候先获取数据库名,在当前数据库下注入表等等,除了结构有区别之外,还有个区别就是,access数据库没有像其他数据库里面那些功能,比如MySQL里面有一些函数,有些函数可以文件的读写操作,相应的的碰到了注入可以享受相应的功能,MySQL就可以文件读写,access就不行,本身就没有文件读写的操作。
话又说回来,为什么要区分数据库,因为数据库不一样,功能不一样,注入的时候攻击方式不一样,比如access没有文件读写,在access注入的时候就不会考虑到文件读写这一个操作,同样在其他数据库里面就可以考虑,因为他们有这一个功能,具体有没有直接在网上搜索,进行这个操作的前提是否有这个权限,是否是数据库的管理员,这个注入点是否享有权限。
mysql注入如何判定一个注入点的权限,数据库配置文件里面定义了谁链接数据库操作,谁链接了就享有谁的权限,root用户链接就享有了root权限。
学完mysql之后其他的就好理解,无非就是一些小区别,注入语句区别,再有就是功能有区别,高权限mysql可以文件读取,到其他数据库里面高权限就可能不是文件读取,是其他的一些读取或者功能,思路都是一样的,高权限可以进行这个操作低权限不能进行。
access数据库演示 墨者靶场
先用order by去比对,比对到错误的哪一个前一位就是要输入的数字,因为access没有那种像MySQL中记录所有表名列名信息的表,所以只能盲猜一下数据库名,有就会报出数字,没有会报错,
之后再猜,猜不出来了,就只能用工具去跑出来,列名实在不知道,跑出来是passwd
就有了需要的结果,这就是很简单的access。
sql server数据库演示 墨者靶场
用工具扫一下,这个是sql server界面
这是用工具扫的mysql数据库的下面的,功能是不一样。
这个获取的信息还可以搞别的数据库,就类似获取的数据库名,
获取数据就像是mysql里面获取表名后获取列名,在获取想要的数据,用户功能也都是这样子操作啥的,mysql有的都跟mysql差不多,比如文件写入就差不多,写入失败的原因比较少第一个就是有防护软件,第二个就是权限问题,内置的功能也有问题,把这两个功能禁用,或者删除掉,这个原因是最多的。
mssql数据库注入类型,和MySQL差不多,第一步就是判断数据库类型,判断好之后判断order by
判断myssl数据库的判断语句的原理,是判断是否有这个myssl特有的数据库。
下面的流程就和MySQL数据库大同小异了,获取数据库版本之后数据库名,表名,列名,之后在获取想要的信息这样子就可以。直接去百度搜注入流程的语句复制粘贴一下就好。
PostgreSql数据库演示, 墨者靶场
也是直接在网上搜注入语句,这个直接用sqlmap工具打的
sqlmap
之后再找是那个数据库,
获取完数据库名在获取表名。
之后在获取表里面的列名
获取列名里面的内容
名字和密码都获取到了。
Oracle数据库注入 (墨者)
这个其实也是差不多的,打开测试靶场
没有文件写入是因为数据库没有这个功能,是数据库决定的,有这个功能才行,但是都能进行命令执行,用命令写一个不就行了,还管什么文件读写,直接在网上搜oracle注入语句进行,没有什么太大区别,正常的流程执行。
MongoDB 数据库 (墨者靶场)重点讲一下
他有很大区别,在有在ctf,红蓝对抗里面喜欢搞这种,因为mongodb喜欢python去搭建的web应用去搭建的数据库类型,用其他数据库也可以搭建,比较火的一个数据库。
他的sql语句很不一样,
注入的时候也会有外面那两个括号其干扰,mongodb数据库的话用工具是用不了的,这也是今天要讲的另外一种东西,简要学习各种注入工具使用的指南,熟悉工具支持的数据库,注入模式,优缺点等等 这个就算是一个缺点,sqlmap也不支持,
手动注入mongdb数据库
后面content 1是闭合后面那些东西的
这获取的所有列名
解释一下数据的意思。源代码我们改变不了,这个注入的是他改变了注入格式改成json的格式,和mongdb相似
mongodb数据库就是数据库注入语句组合上面有点问题,要明白数据库他那个条件就是那个值,在提交注入的时候数据库里面查询的时候,他是一个列表形式去提交进去的,注入的时候要闭合前后的干扰符号,而且这个符号还要括号和中括号,很少有工具能支持mongodb。