代理和端口转发

前言

渗透测试中不免要碰到这个东西,常用到的命令写个笔记整理一下。

建立通道

SSH

代理

1
ssh -D 1080 user@server

在本地1080端口开个socks5代理,转发流量到目标。

本地端口转发

1
ssh -L 本地监听ip:监听端口:目标ip:目标端口 user@server

访问本地监听ip:监听端口就访问到了目标ip:目标端口,流量通过本机和server的ssh隧道,一般用于本机访问远程主机服务。

远程端口转发

1
ssh -R server监听ip:监听端口:目标ip:目标端口 user@server

访问server监听ip:监听端口就访问到了目标ip:目标端口,流量通过本机和server的ssh隧道,一般用于远程访问本地服务。

注意:远程转发需要修改服务端配置文件并重启服务:

1
GatewayPorts yes

好处是ssh基本Linux服务器都自带,缺点是需要root权限并可能重启服务。

FRP

服务端:

1
2
3
4
5
[common]
bind_port = 1234
token = passhere
use_compression = true
tls_enable = true

也就是客户端:

1
2
3
4
5
6
7
8
9
10
11
12
[common]
server_addr = serverip
server_port = 1234
token = passhere
tls_enable = true
use_compression = true

[tcp1]
type = tcp
local_ip = 127.0.0.1
local_port = 80
remote_port = 50055

反向代理,访问server_addr:remote_port可以访问到local_ip:local_port

MSF模块

适用于获取到了meterpreter shell的情况

先在meterpreter shell里设好路由

1
run post/multi/manage/autoroute

再返回主菜单(bg)使用模块搭建socks5代理

1
2
3
4
5
6
7
use auxiliary/server/socks_proxy
set PASSWORD 123456
set USERNAME user
set SRVHOST 0.0.0.0
set SRVPORT 1080
set VERSION 5
run

LCX

服务端:
监听443,33899,等待客户端连接到443端口

1
2
lcx -listen 443 33899
#lcx -listen 服务端端口 转发监听端口

客户端:

1
2
lcx -slave 192.168.110.1 443 127.0.0.1 3389
#lcx -slave 服务端IP 服务端端口 目标IP 目标端口

上述命令达到访问服务端IP:转发监听端口可以访问到目标IP:目标端口
注:目标ip和端口需要是开放状态,lcx运行就会尝试和目标建立连接。
ps:这个转发3389用RDP客户端连接了几次才连接上

Gohtran

Github找的go语言版htran,可以反弹socks5代理到服务端,缺点是用netstat看会有大量连接

在对应平台安装golang然后编译:

1
go build --ldflags "-s -w " -o gohtran_listener listener.go

服务端监听:
第一个端口是客户端上线监听端口 第二个socks5服务监听端口

1
gohtran_listener port1 port2

客户端连接:

1
gohtran_client listenerip:port1

SSOCKS

ssocks 也可以反弹socks5代理到服务端,按readme编译即可,似乎只支持64位

测试了再补充

使用代理

Proxifier

配置代理服务器

配置规则,一般指定进程走代理,Default走Direct即可

图待补 😉

Netch

配置代理服务器

配置代理进程列表启动即可

图待补 😉

Proxychains

根据代理修改配置文件
/etc/proxychains.conf

1
2
3
4
5
6
7
quiet_mode #不输出连接详情到终端免得混乱一片
# Examples:
# socks5 192.168.67.78 1080 lamer secret
# http 192.168.89.3 8080 justu hidden
# socks4 192.168.1.49 1080
# http 192.168.39.93 8080

执行命令之前加proxychains即可

Shrc

适用于终端情况,某些可能不方便用Proxychains,可以试试这个
方便更改环境变量而定义了两个函数,需要开代理就proxy 不要了就noproxy

把下面的代码加入你用的shell启动脚本,例如~/.bashrc

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
export PROXY_SOCKS5="socks5://127.0.0.1:7890"
export PROXY_HTTP="http://127.0.0.1:7890"

proxy () {
export http_proxy="${PROXY_HTTP}"
export HTTP_PROXY="${PROXY_HTTP}"
export https_proxy="${PROXY_HTTP}"
export HTTPS_PROXY="${PROXY_HTTP}"
export ftp_proxy="${PROXY_HTTP}"
export FTP_PROXY="${PROXY_HTTP}"
export rsync_proxy="${PROXY_HTTP}"
export RSYNC_PROXY="${PROXY_HTTP}"
export ALL_PROXY="${PROXY_SOCKS5}"
export all_proxy="${PROXY_SOCKS5}"
}
noproxy () {
unset http_proxy
unset HTTP_PROXY
unset https_proxy
unset HTTPS_PROXY
unset ftp_proxy
unset FTP_PROXY
unset rsync_proxy
unset RSYNC_PROXY
unset ALL_PROXY
unset all_proxy
}



小结

实际应用需要考虑你和目标之间的网络结构,以及权限和服务限制情况,灵活地进行调整,其他的用到了再补充。