公司动态

内网渗透之端口转发

2019-12-24


圣诞节快乐


在渗透测试中,当我们获得了外网服务器的一定权限后,发现这台服务器可以直接或者间接的访问内网。但一般情况下,内网中的其他机器是不允许外网机器访问的。这时候,我们可以通过端口转发或将这台外网服务器设置成为代理,使得我们自己的攻击机可以直接访问与操作内网中的其他机器。



正反向代理


正向代理即通常所说的代理,用于代表内部网络用户向Internet上的服务器(或称外部服务器,通常为Web服务器)发出连接请求,并接收响应结果,执行该代理功能的服务器称为代理服务器。使用代理服务器访问外部网络时,客户端必须在局域网设置中指明代理服务器的地址以及要代理的服务的端口号。

正向代理:

  • 代理客户。

  • 隐藏真实的客户,为客户端收发请求,使真实客户端对服务器不可见。

  • 一个局域网内的所有用户可能被一台服务器做了正向代理,由该台服务器负责 HTTP 请求。

  • 意味着同服务器做通信的是正向代理服务器。


反向代理的方向与正向代理相反,指代表外部网络用户向内部服务器发出请求,即接收来自Internet上用户的连接请求,并将这些请求转发给内部网络上的服务器,然后将从内部服务器上得到的响应返回给Internet上请求连接的客户:执行反向代理服务的服务器称为反向代理服务器,反向代理服务器对外部用户表现为一个服务器。


反向代理:

  • 代理服务器。

  • 隐藏了真实的服务器,为服务器收发请求,使真实服务器对客户端不可见。

  • 负载均衡服务器,将用户的请求分发到空闲的服务器上。

  • 意味着用户和负载均衡服务器直接通信,即用户解析服务器域名时得到的是负载均衡服务器的 IP。




端口转发工具的分类

常见端口转发工具的分类:

按照协议进行分类,可以分为:Socks协议 和 Socket协议 。

按照工具工作原理分类分为:端口转发类 和 web代理类。



环境介绍

在开始之前,你需要已经具有目标内网中的一台主机的任意命令执行的权限,比如:某个服务产生的RCE或你已经上传了高权限的WebShell。为方便演示,在实验中我会建立一个存在SSH弱口令漏洞的Web服务器进行内外网端口转发。

为了模拟真实环境,我在本地搭建了两个虚拟NAT网络,其分别是 (192.168.32.0/24)、(10.11.12.0/24)。搭建完毕后的网络拓扑如下:

很明显,在当前环境下由于IP域不同,其内外网主机是无法直接进行通信的。不过在之后我将分别通过LCX、Termite和SSH隧道来解决这一问题。



LCX

LCX是一款端口转发工具,它有三个功能,第一个功能是将本地端口转发到远程主机某个端口上,第二个功能是将本地端口转发到本地另一个端口上,第三个功能是进行监听并进行转发使用。

LCX在不同系统下的工具不一,在Windows环境下为其原名LCX,而在Linux环境下则是使用Portmap来进行端口转发。为了能用上这两种环境下的工具,我将外网主机设置为了Windows 7环境,而Web服务器设置为了Linux环境。

为了使得外网主机连接内网主机。

我们先在外网主机上使用LCX监听端口。


LCX的用法如下:

可以看到LCX有两种模式,分别是slave和listen,在这里我们使用-listen监听两个端口即可,输入命令LCX.exe -listen 7788 10022即可

在外网主机监听端口后,后面需要在Web服务器上使用portmap进行端口转发,由于Web服务器上使用的是Liunx系统,所以需要使用portmap进行端口转发。

对于portmap的用法如下:

可以看到它这里有三种模式,分别是监听一个端口连接到另一个IP的端口、监听两个端口,直接连接到两个IP端口。在这里我们使用3号模式分别连接外网和内网主机端口。

./portmap -m 3 -h1 10.11.12.129 -p1 22 -h2 192.168.32.129 -p2 7788

其中h1、p1为内网IP地址及端口,h2、p2为外网IP地址ip及端口。

Web服务器开启端口转发后,可以在外网主机上看到Web服务器已经对本机的7788端口进行了连接。

在出现这个提示后则证明端口转发成功,这时我们只需要连接本地的10022端口就等于连接上了内网主机的22端口了。我们再使用连接工具尝试一下。

可以看到这时已经可以进行连接了。


SSH隧道

SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。SSH除了一般的远程登录会话以外,还支持搭建SSH隧道来进行端口转发。其SSH隧道有三种,分别是L(正向隧道,监听本地端口)、R(反向隧道,用于内网穿透防火墙限制)、D(直接进行socks代理)。使用SSH隧道的前提是需要已经拥有目标内网SSH的账号和密码。

其命令格式为:


以模拟环境为例,要使外网主机连接上内网主机,使用D参数的动态转发会更为方便。与本地端口转发和远程端口转发相比,动态转发不局限于把流量转发到固定主机的固定端口,它会根据数据包的目的IP和目的端口实现动态转发,其工作机制类似于常见的代理。因此利用SSH隧道代理还需要用到代理工具,例如 Proxifier。


首先在公网主机上使用SSH命令开启SSH隧道代理。

ssh -D 1088 ubuntu@192.168.32.128

之后会让你输入Web服务器的ssh密码。

开启SSH隧道代理后,使用Proxifier来设置代理服务。

之后就可以直接使用连接工具直接连接上内网主机了。


可以看到这里已经成功连接上了。



Termite

Termite 是EW(EarthWorm)的最新版,旧版的EW 是一套便携式的网络穿透工具,具有 SOCKS v5服务架设和端口转发两大核心功能,可在复杂网络环境下完成网络穿透。而Termite支持多平台、跳板机互联、正反向级联、小巧无依赖、内置Shell令主机管理更方便。Termite具有管理端和服务端两方应用。
还是以模拟环境为例,来使得外网主机连接内网主机。

首先在Web服务器上使用agent服务端监听端口。

其主要命令为:


输入命令./agent_linux_x86_64 -l 7788监听7788端口



之后来到外网主机使用admin管理端进行连接。


其主要命令为:


输入命令admin_windows_x86.exe -c 192.168.32.128 -p 7788 连接Web服务器端口



这时admin管理端就成功连接上Web服务器上的服务端了,这时输入help命令可以查看更多指令。



可以看到Termite的功能比LCX丰富的多,它不仅支持端口转发还支持socks代理、在这个版本中还支持文件上传、文件下载,以及shell命令使得主机管理更方便。在这里我们还是用端口转发作为演示。


使用show命令来查看当前节点图。



可以看到当前位于0节点,0节点就是外网主机的管理端了,下面有一个1节点,1节点是位于Web服务器上的服务端。这次我们用nc来进行演示端口转发效果,首先在内网机开放7999端口作为服务端口。



之后在外网主机管理端切换到1节点使用LCXtran来进行端口转发。



通过端口转发后,将直接在本地建立12355端口,该端口可以直接与内网主机7999端口进行通讯。使用nc连接本地12355端口并进行文字传输。



其内网主机收到相同的信息,证明端口转发成功。



参考

http://drops.wooyun.org/tools/15000

https://segmentfault.com/a/1190000017805664

https://www.freebuf.com/articles/network/210653.html

https://blog.csdn.net/qq_36119192/article/details/84534254