内网渗透中的端口转发——工具很全
内网渗透中的端口转发
需要知道,在渗透的整个流程中,根据web应用或者开放的端口进行渗透,获取webshell只是渗透这门艺术的一小部分,在真实的错综复杂的企业环境中进行内网渗透,其实水很深,涉及内网穿透,端口转发,域渗透,提权等一系列的难题。所以这篇文章对内网渗透学习进行一些记录。在这过程中参考了很多前辈们的宝贵经验,我把这些链接进行了收集,放在参考文献部分。
转发,映射,代理
这几个概念其实是比较难区分的,特别是和后面的内网穿透混在一起,在宏观上说,他们差别不大。但是究其本质还是存在不小的差别的。现在就先对这几个概念说一下我个人的理解:
- 转发: 转发是渗透中一种手段,是将一个网络端口从一个网络节点转发到另一个节点的行为。结果是使一个外网用户经过一个NAT路由器到达在内网IP地址某个端口。有时候也被称为隧道。
- 映射: 映射也是渗透中的一种手段,端口映射就是将外网主机的IP地址的一个端口映射到内网中一台机器,提供相应的服务。其实很多时候转发和映射
- 代理: 代理是一种结果,以端口转发和映射为技术基础。代理在很多场合是用在连接互联网的web服务上面,起到突破ip封锁,隐匿身份等作用。其原理是动态的端口转发。只需要本机和代理间建立一个隧道,然后代理就可以根据本机发起的请求去动态的获取出链的地址与端口。
- 内网穿透: 内网穿透是目的,它使用的手段有包括端口转发和映射,或者直接使用代理这一结果。很多时候我们指的内网穿透场景是指攻击机与靶机处于处于不同的内网中,一些回弹shell之类的手段直接实现,因为IP地址无法相互建立连接。这个时候就需要使用一些内网穿透常见的工具。这些工具也是使用端口转发和映射或类似的方法来突破限制。
工具名称 | 主要用途 | 平台 | 备注 |
---|---|---|---|
lcx | 端口映射 | Windows | 只支持tcp协议的端口转发,非系统内置。linux下叫做可以实现端口转发和端口映射 |
netsh | 端口映射 | Windows | 只支持tcp协议的端口转发,需要安装ipv6 |
rinetd | 反向代理 | Linux | 非内置,需要自行安装 |
Earthworm | 端口映射、Socks5代理 | Linux、Windows、MacOS、Arm-Linux | 非系统内置,可以十分方便的支持多级转发 |
frp | 高性能的反向代理应用 | go | 基于反向代理,可以十分灵活的进行内网穿透,绕过防火墙 |
reGeorg | Socks5 代理 | 常见脚本语言 | reGeorg利用webshell建立一个socks代理进行内网穿透,服务器必须支持aspx、php、jsp、js等web语言 |
Metasploit portfwd | 端口映射 | MSF -> Metpreter会话 | 需要网络状况较好 |
socat | 端口映射 | Linux | 可能需要安装 |
Metasploit->socks4a | 反向代理 | MSF -> Metpreter会话 | 需要会话主机有外网代理IP |
tunna | HTTP隧道 | 常见脚本语言 | 需脚本环境执行,并且不太稳定 |
localtuuel | 内网公网映射 | nodojs | 和ngork一样可以实现内网到公网端口的映射 |
ngork | 内网公网映射 | go | 可以选择自建服务器或则和使用工具自带的服务器 |
dns2tcp | DNS隧道 | kaii内置 | 防火墙过滤内部tcp出站策略的情况下,走DNS隧道,,通过DNS流量中继TCP连接 |
Iodine | DNS隧道 | linux | 原理上和dns2tcp类似 |
icmpsh | ICMP隧道 | 需要root权限 | 需要禁止系统对icmp的相应,用工具来处理收发icmp包 |
系统内置的转发工具
iptables NAT功能
由于linux主机出于安全考虑,系统参数/proc/sys/net/ipv4/ip_forward
默认为0,所以是禁止NAT功能的,我们可以通过以下两种你方式修改系统运行时的参数。
临时方案
echo 1 >/proc/sys/net/ipv4/ip_forward
长期方案
运行vi /etc/sysctl.conf
1
|
# 找到下面的值并将0改成1
|
运行sysctl –p
,使改动立即生效 。
下面是一个转发的示例
1
|
# 1.1.1.1是公网ip,192.168.2.2内网ip
|
这样就会使得访问1.1.1.1:80 映射到了192.168.2.2:8080端口。注意到这里
nc
1
|
# 公网主机
|
SSH
1
|
#本地端口转发:
|
netsh
netsh是windows下提供网络管理的命令行工具,它是一个交互式的shell,涉及到上下文的概念。我们在交互式下面进入相应的上下文,进行参数的设置。也可以直接下面这样非交互式的进行端口转发。
1
|
netsh interface ipv6 install
|
非内置的端口转发工具
socat
socat这个端口转发我们其实更常用在ssrf构造payload的时候本地抓包,因为socat有记录转发流的功能。将socat作为中介捕获我们构造的payload包,然后进行进一步的操作,如gopher协议的构造。
1
|
#安装
|
lcx.exe
1
|
lcx-<listen|tran|slave> <option> [-log logfile]
|
Metasploit socks4a
一组在实际渗透过程中的三件套:路由表+socks4a+proxychains。这样一来可以使用攻击机上的渗透工具,利用meterpreter session作为跳板,对内网进行渗透。下面的是流程。
1
|
1. 在反弹的shell中添加路由,如
|
Meterpreter portfwd
在MSF渗透框架里面内置了端口转发的命令,在回弹了shell的条件下可以直接使用,下面式相关参数解析。
1
|
meterpreter > portfwd -h
|
Rinetd
1
|
# 安装,注意到centos没有其默认的软件源,需要手动导入;ubuntu的比较方便
|
Tunna 与 reGeorg
这两个工具的使用都是比较简单,就不啰嗦了,在获取webshell后,我们可以通过http进行端口转发。直接给出两个项目地址,推荐使用reGeorg,Tunna不稳定。Tunna工具地址
reGeorg工具地址。
Localtunnel与Gnork
这两个工具都可以将内网的端口映射到公网,然后访问公网的ip就类似于访问内网的端口。这两个工具可以提供自建服务或者使用它提供的服务器进行内网穿透。其实这类工具在实际渗透中不是很常用。更直接的场景是自己攻击机在内网,在进行相关回连操作的时候,需要目标机器可达,毕竟它们只是一级转发,而且操作麻烦。直接给出项目地址:
EW
这是个国产的打洞神器,因为其方便的多级转发,支持反向代理等特性,在内网渗透领域可是响当当的。这里重点对这个工具做下记录,真的太强大了!
该工具共有 6 种命令格式(ssocksd、rcsocks、rssocks、lcx_slave、lcx_listen、lcx_tran)。下面针对官方的例子进行以下解释:
正向代理
1
|
$ ./ew -s ssocksd -l 1080
|
开启机器的1080端口做正向代理,我们可以通过链接该机器的1080端口进行端口代理转发。一般的场景为:kali 通过proxychain 链接开启了正向代理的公网ip。
反响代理
1
|
#公网ip主机A,ip假设为1.1.1.1
|
反向代理是目标机向我们发起链接请求,与正向代理是不一样的。当建立了链接后,它的代理流如下Me<--->A<--->B
。即我只要连接A的1080端口就可以获得一条反向代理的隧道,与B建立连接。这种场景可以用来绕过入口策略严格但是出口策略松散的防火墙。
多级转发
在前面的两个场景中,我们看到了rcsocks
,`ssocksd
,rssocks
这三个命令的使用。在多级转发中我们会见到另外三个命令的作用。他们就类似于中间件,负责隧道导流与串接。
1
|
#命令使用举例:
|
下面我们来看个实际渗透三级级联例子:
1
|
# 我们自己的VPS执行
|
数据流向: SOCKS v5 -> 1080 -> 8888 -> 9999 -> 7777 -> rssocks。
我们来解读以下这个三级级联,首先这是个反向代理的例子,反向代理的目的端口是C的7777,当隧道建立完成,我们只需要连接到VPS的1080端口,就会自动帮我们转发到7777。我们来看下中间过程如何:首先第一个命令VPS在8888接收反向代理,并且在1080等候我们的连接。第二条命令将跳板机A的8888端口导向9999;第三行命令将跳板机B的9999端口导向7777;最后第四条命令在跳板机上进行反向代理发起连接到跳板机B的7777端口。
FRP
frp也提供了完善的内网穿透的功能,功能上其实和gnork这些差不多,但是相比起来,FRP的配置更为灵活。推荐层度:FRP>Localtunnel>gnork
过墙隧道
前面介绍的端口转发,有使用http协议,tcp协议,sockts代理的,但是这些协议转发流量太过于碍眼,容易被严谨的防火墙规则过滤,导致shell从内网出不来,那么在这种情况下,我们就需要强有力的过墙隧道。下面是笔者在网上搜罗的一些走udp的dns隧道和走icmp的隧道,可以说这两种打洞手段很别出心裁,笔者看得是叹为观止。这里先把相关的工具链接和看过的文章记录下来。写不动了……,避免篇幅过长(其实是有点懒),下次补上。
DNS2tcp
https://pkgs.org/download/dns2tcp
http://pwdme.cc/2016/11/11/dns2tcp-dns-tunnel/
https://www.freebuf.com/articles/system/8726.html
https://kali.tuisec.win/kalitools/dns2tcp_zh.html
https://www.aldeid.com/wiki/Dns2tcp
iodine
https://github.com/yarrick/iodine
https://www.freebuf.com/articles/system/178214.html
https://blog.csdn.net/weixin_36440115/article/details/76400359
icmpsh
https://github.com/inquisb/icmpsh
参考文献
Powershell攻击指南黑客后渗透之道系列——基础篇
Powershell攻击指南黑客后渗透之道系列——进阶利用
Powershell攻击指南黑客后渗透之道系列——实战篇
内网渗透常见端口转发方式
玩转SSH端口转发
内网安全检查/渗透总结
推荐一款很好用的内网穿透工具—FRP
Localtunnel内网穿透工具的安装与使用
CentOS下部署Ngrok服务器