nc端口转发
网络情况
主机 | IP | 类型 |
---|---|---|
macOS | 192.168.10.100 | 攻击机 |
kali | 192.168.19.147 | 跳板机 |
Ubuntu | 192.168.19.153 | 目标机 |
端口转发实验
ps: nc每次请求连接建立后都会关闭,即单次连接。每次连接过后,都需要重新执行一次nc转发命令。解决方法见后文。
且nc命令在第一个远程连接结束后会结束监听。如果需要保持运行,需要添加-k
参数。
场景1:正向转发1
macOS能访问kali,但是不能访问Ubuntu。kali能访问Ubuntu任意端口。
目标:macOS想访问到Ubuntu的22端口。
思路:用kali做跳板机,把访问kali 8888端口的数据转发到Ubuntu的22端口
方法:在kali上执行一条nc转发命令即可
1 | nc -l -p 8888 -c "nc 192.168.19.153 22" |
此时在macOS上用ssh连接kali的8888端口,或者直接在kali上ssh连接本地8888端口,即可登陆Ubuntu的22端口。
1 | ssh -p 8888 username@192.168.19.147 |
场景1:正向转发2
macOS能访问kali,但是不能访问Ubuntu。Ubuntu防火墙有过滤,kali不能访问Ubuntu的22端口,但是可以访问其他端口如9999。
目标:macOS想访问到Ubuntu的22端口。
思路:
- 目标机器Ubuntu上用nc把22端口转发到9999端口
- kali上监听8888端口,并使用nc把访问kali 8888端口的数据转发到Ubuntu的9999端口
- macOS通过访问kali的8888端口,即可正向连接到ubuntu的22端口。
操作:
目标Ubuntu:
1 | nc -l -p 9999 -c "nc 127.0.0.1 22" |
跳板机kali:
1 | nc -l -p 8888 -c "nc 192.168.19.153 9999" |
攻击机:macOS:
1 | ssh -p 8888 username@192.168.19.147 |
解决nc单次连接问题
常见nc版本
nc、ncat、netcat
nc -c netcat-traditional
nc
1 | while :; do (nc -l -p 8888 -c "nc 192.168.19.153 22"); done |
socat
1 | # 本地转发 |
ncat
当客户端与服务器断开连接时,服务器也会停止监听,可以通过选项’k’强制服务器保持连接状态并继续侦听端口:
1 | #Now all the connections for port 80 will be forwarded to port 8080. |
netcat
http://netcat.sourceforge.net/download.php
1 | netcat -l -p 1234 -e /bin/bash |
nc结合ssh
1 | mkfifo pipe |
常见nc端口转发命令:
1 | nc -v -lk -p 8001 -e /usr/bin/nc 127.0.0.1 8000 |
此外还可能遇到不支持某些参数的情况,可以使用多管道传输。
OSX:
1 | mkfifo a |
在OS X bash上使用双向管道。该命令也可能在其他Unix上运行:
1 | nc 127.0.0.1 8000 <&1 | nc -l 8001 >&0 |
Linux:
1 | mkfifo backpipe |
Reference
- https://unix.stackexchange.com/questions/293304/using-netcat-for-port-forwarding
- https://unix.stackexchange.com/questions/10428/simple-way-to-create-a-tunnel-from-one-local-port-to-another
- https://hakin9.org/playing-with-the-ports-redirection/
- https://jtway.co/netcat-with-ssh-port-forwarding-148177b2e850
- Post title:nc端口转发
- Post author:ssooking
- Create time:2020-05-08 10:48:00
- Post link:https://ssooking.github.io/2020/05/nc端口转发/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.