搭载了海洋CMS与phpOA CMS环境的虚拟机进行内网转发与代理的渗透测试,按照实验要求对以上这两个环境进行渗透测试工作,得以下分析报告。
环境搭建
海洋CMS是用windows 2008 R2系统搭建,PHPOA用linux系统搭建,由于实验环境是事先搭建好了的,所以在这里就不重复了。
环境配置→网络配置
首先我们做的是内网的渗透,所以我们需要配置海洋CMS两个虚拟网卡,两个不同网段的IP,也就是相当于一个是内网,一个是外网,内网连接网的段是跟PHPOA为同一个网段(192.168.80.0/24),内网之间网络要能ping通,外网跟攻击者一个网段(192.168.1.0/24),也要能ping通,攻击者不能直接访问内网,Windows海洋CMS的IP配置(如图1),攻击者IP配置(如图2),Linux的内网IP配置(如图3)。
图1
图2
图3
防火墙配置
海洋CMS服务器防火墙必须开启,防火墙加上两条规则保证web服务能够访问,通过控制面板打开Windows防火墙,点击高级设置,在入站规则和出站规则加上80端口允许连接的规则;而PHPOA 的Linux服务器需要配置以下几条规则(如图4)。
iptables -P INPUT DROP 禁止所有进站链接
iptables -I INPUT -p tcp --dport 80 -j DROP 禁止所有80端口的链接
iptables -I INPUT -s 192.168.80.10 -p tcp --dport 80 -j ACCEPT只允许指定的内网IP访问80端口
图4
海洋CMS漏洞原理:
通过代码审计,利用area参数处理过的地方经过字符是否非法判断之后,调用echoSearchPage()函数,因为能执行PHP代码一般就是eval()函数,利用area参数把eval函数带入进去执行。
lcx端口转发原理:
lcx工作原理是使不同端口之间形成一个回路,这样就可以进行端口转发,常用于外网连接内网3389端口。
这个程序主要采用Socket来实现,有几个比较重要的函数:bind2bind、bind2conn、conn2conn及transmitdata。transmitdata函数是核心,这个函数作用是使得不同端口之间的数据形成一个回路
内网代理原理:
正向代理:Lhost为了访问到Rhost,向proxy发送了一个请求并且指定目标是Rhost,然后proxy向Rhost转交请求并将获得的内容返回给Lhost,简单来说正向代理就是proxy代替了我们去访问Rhost。
反向代理:Lhost只向proxy发送普通的请求,具体让他转到哪里,proxy自己判断,然后将返回的数据递交回来,这样的好处就是在某些防火墙只允许proxy数据进出的时候可以有效的进行穿透
而我们平常使用的reDuh、tunna,和reGeorg一样,都是正向代理。一般都是用户上传一个代理脚本到服务器端,本地的程序去连接服务器上的脚本,脚本程序做代理转发端口和流量。
利用到的工具中国菜刀,lcx.exe转发软件,Proxifier代理软件。
进行外网web渗透→拿外网webshell
海洋web通过代码审计可以得出area参数里利用eval()函数把一句话木马带入,把变量打印出来。
Payload:http://192.168.1.109/search.php?searchtype=5&tid=&area=eval($_POST[hah])
之后直接用菜刀链接,密码是hah(如图5),直接就能拿到webshell,而且还是system权限的(如图6)。
图5
图6
之后通过菜刀的虚拟终端创建我们的管理员用户尝试开启服务器的3389端口远程连接登录并控制该服务器。(如图7,图8)
图7
图8
由于服务器开启了防火墙屏蔽了3389端口了(如图9),不能远程登录到web服务器,所以我们可以利用端口转发来连接服务器。
图9
通过菜刀直接可以上传我们需要的转发工具lcx.exe(如图10),执行以下命令(如图11,图12),再尝试连接,连接成功(图13)。
图10
图11
图12
图13
内网代理与渗透→内网代理
通过最简单的arp –a地址解析协议就可以查到内网还存在的一台主机IP地址(如图14),当然真正的内网扫描会有很多的主机,所以必须得利用其它的扫描工具,比如nmap,在这里就不演示了。内网的web服务器外网是无法访问的,只能内网访问,所以我们可以利用内网代理来实现外网主机访问内网主机。
图14
还是由菜刀来把我们事先准备好的reGeorg的对应脚本tunnel.nosocket.php文件上传到web服务器的web目录下(如图15),再通过网页运行一下该文件(如图16)没问题,正常运行,接着打开攻击者reGeorg的对应目录下CMD运行reGeorgSocksProxy.py -p 8888 -u
http://192.168.1.109/include/tunnel.nosocket.php命令(如图17),之后直接打开我们的代理软件Proxifier设置代理,成功利用内网代理访问内网的主机(如图18)。
图15
图16
图17
图18
内网渗透
既然我们能通过内网代理直接访问内网主机就可以开始对该内网服务器进行渗透,首先我们可以看到站点直接就是在登录页面的,而且登录不需要验证码,可以尝试密码爆破,这个时间会比较长,所以我们在这期间可以找找有没有别的漏洞,相对于这个PHPOA的CMS漏洞,网上可以找到的是属于文件上传漏洞,那么我们可以尝试下该CMS漏洞还存不存在。
要想把一个php木马挂到网站上首先要在本地构造上传地址。下图就是我构建的上传地址(如图19)。此路径也是由代码审计得出的。
图19
利用我们构造好的本地上传html把PHP木马上传到内网的服务器主机上,第一个上传的是随便一个TXT文件,第二个选择我们的PHP一句话木马文件(如图20)。上传成功后给出了一个文件的上传路径(如图21),然后尝试菜刀连接(如图22),没问题,内网的webshell也已经拿到了。
图20
图21
图22
总结
通过本次渗透测试实验可以看出海洋CMS与PHPOA的安全防护结果不是很理想,外网内置参数与函数过滤不够严格,权限策略设置不当,从而导致一步就能拿到webshell以及最高权限。而内网存在文件上传漏洞,权限中存在漏洞或者权限策略做的不够得当。本次渗透的突破口主要是分为内网和外网,外网设备存在注入和弱口令破解。内网由于arp防火墙策略做的不是很严密。导致内网沦陷。
安全加固建议
对本次渗透给予安全加固建议:
1. 对用户可控的变量进行严格的检查和过滤;
2. 文件上传使用随机数改写文件名和文件路径,上传目录无执行权限;
3. 还有一些加固建议暂时没明白,待续。