不要使用 ICMP 回显请求(ping)来测试 SOCKS 代理。
SOCKS 是一种 Internet 协议,通过代理服务器在客户端和服务器之间交换网络数据包。实际上,SOCKS 服务器代理到任意 IP 地址的 TCP 连接,并提供了一种转发 UDP 数据包的方式。你应该使用基于 TCP 的协议来测试它(例如尝试 SSH,或向穿越 pivoting 隧道的主机发送 HTTP GET 请求)。
NMAP 必须使用 TCP 连接扫描(-sT)且不使用 ping(-Pn)
这也适用于版本扫描(-sV)和脚本扫描(-sC)。它们应与 -sT 和 -Pn 组合使用。
示例:
proxychains nmap -sT -Pn -p- x.x.x.x
proxychains nmap -sT -Pn -sV -sC -p 21,80,443,445 x.x.x.x
提示:你可以将 naabu 上传到受害机器,然后像大佬一样进行扫描。
将脚本和二进制文件与 proxychains 一起使用
使用 proxychains 的一个技巧是:如果你正在运行解释型程序(如 Python 脚本),即使在脚本开头有 shebang,也最好在该脚本之前显式引用 Python 二进制文件,例如:
proxychains4 [-q -f proxychains.conf] python python_script.py
如果没有显式引用脚本解释器,有时脚本产生的流量将无法按你的预期通过代理路由,网络连接也会失败。提示来源
取消 /etc/proxychains.conf 中“quite mode”一行的注释,以避免有时令人烦躁的 stdout。
这仅仅是一个建议。
允许你在本地(ssh 客户端)机器上创建一个套接字,该套接字充当 SOCKS 代理服务器。当客户端连接到此端口时,连接会被转发到远程(ssh 服务器)机器,然后再转发到目标机器上的一个动态端口。
如何设置:
编辑 /etc/proxychains.conf 并进行以下操作:
设置 SSH 动态端口转发:
ssh -D 127.0.0.1:9050 user@victim-IP
使用示例:
其中 x.x.x.x 是隶属于隧道网络中的某台主机的 IP 地址:
proxychains nmap -sT -Pn -p- x.x.x.x
proxychains smbmap -H x.x.x.x
proxychains ssh [email protected]
要通过隧道使用 firefox:
proxychains firefox
如果你正在寻找如何通过 pivoting 隧道获得 反向 shell,这就是你所需要的。它允许你将远程(受害)机器上的一个端口转发到本地(攻击)机器上的一个端口。
如何设置:
SSH 登录受害机器。
编辑 /etc/ssh/sshd_config 并进行以下操作:
*这一点非常重要,而且网上的许多指南都没有提到。如果不这样做,你将只能将隧道设置在 127.0.0.1 上,而不是 0.0.0.0,这最终会导致来自 localhost 以外任何主机的流量都无法被转发。
sudo service ssh restart设置 SSH 远程端口转发:
基本上,按照上述设置好后,命令就是如此简单:
ssh -R 2222:*:2222 user@victim-IP
为了测试它是否有效,你可以这样做:
在攻击者机器上设置一个监听器(例如 netcat),端口为你配置远程转发时使用的端口(本例中为 2222),然后从受害机器向自身(localhost)发起请求。在本例中,即 nc 127.0.0.1 2222。如果攻击者机器收到连接,则说明 a) 它有效,b) 从 pivoting 主机到 victimip:2222 的每个连接都将被转发到攻击者机器。
你可以像这样设置多个端口:
ssh -R 2222:*:2222 -R 3333:*:3333 user@victim-IP
注意:来自外部主机(pivoting 网络)的请求必须发往受害机器的 IP,才能被转发回攻击者机器。
*你也可以通过从受害机器 SSH 连接到攻击者机器来实现远程端口转发。
本地端口转发允许你将本地(攻击)机器上的一个端口转发到远程(受害)机器上的一个端口。在扫描受害机器本地端口时尤其有用。
用法:
ssh user@victim-IP -L 8888:127.0.0.1:8086
现在你可以使用例如 nmap 来扫描受害机器上的 8086 端口,如下所示:
nmap -Pn -n -p8888 -sV 127.0.0.1
一个关于如何使用 SSH 动态端口转发和 Proxychains 实现双重 pivoting 的示例。
概念:
假设我们有以下 4 台机器。
| IP | 角色 |
|---|---|
| 10.10.10.10 | 攻击者 |
| 10.10.10.11 | 跳板机1 |
| 172.16.1.12 | 跳板机2 |
| 172.16.2.13 | 跳板机3 |
攻击者可以到达跳板机1。
跳板机1可以到达跳板机2。
跳板机2可以到达跳板机3。
...
socks4 127.0.0.1 9050
socks4 127.0.0.1 9999
ssh -D 127.0.0.1:9999 user@Jumphost2
现在你应该能够到达跳板机3了。
sshuttle 允许你通过 ssh 从你的机器到任何远程服务器创建 VPN 连接,只要该服务器具有 python 2.3 或更高版本。要使用它,你必须在本地机器上拥有 root 访问权限,但服务器上可以是一个普通账户。在单台客户端机器上同时运行多个 sshuttle 是有效的,每次连接到不同的服务器,因此你可以同时处于多个 VPN 中。查看 sshuttle github 仓库。
用法:
假设我们要 pivoting 进入 172.16.2.0/16:
sshuttle -vvr root@victim 172.16.2.0/16
如果你想使用 ssh 密钥:
sshuttle -vvr root@victim --ssh-cmd 'ssh -i ~/.ssh/id_rsa' 172.16.2.0/16
Chisel 是一个快速的 TCP/UDP 隧道,通过 HTTP 传输,并经 SSH 加密。它包含客户端和服务器的单一可执行文件。使用 Go(golang)编写。它非常棒且实用。
安装:
你可以轻松地在 kali 上安装 chisel:
apt install chisel
要使用它,你还需要将 chisel 二进制文件上传到受害机器。你可以在此处下载预编译版本。
本地端口转发示例
在你的攻击者机器上:
chisel server -p 8000 --reverse
在受害机器上:
./chisel_1.7.7_linux_amd64 client attacker-ip:8000 R:1234:127.0.0.1:8443
这将把来自攻击者机器 1234 端口的流量转发到受害机器的 8443 端口。
Burpsuite 支持设置代理的功能,这是一个极其有用且强大的特性。
如何设置:
启动 Burpsuite 并执行以下操作:
结合设置 SSH 动态端口转发或 sshuttle,你现在可以使用 Burpsuite 将流量发送到你的 localhost 绑定端口,从而将流量转发到目标主机。一个有用的示例是通过隧道使用 gobuster 目录爆破(假设你将 2222 端口设置为重定向端口):
gobuster dir -u http://127.0.0.1:2222 -t 40 -w /some/dirlist.txt