依照海洋站点与PHPOA的内网渗透实验任务要求,信息安全三班1组刘一搏自2016年12月26日至2016年12月27日期间,对海洋站点与PHPOA进行内网渗透实验,得此分析报告。
1. 渗透测试范围此次渗透测试的主要对象包括:海洋CMS网站、内网的PHPOA。
2. 渗透测试内容在本次渗透测试过程中,通过对海洋CMS网站与其内网PHPOA的结构分析、目录遍历探测、用户和密码猜解、SQL注入漏洞挖掘分析等几个方面进行测试,得出海洋CMS网站与其内网PHPOA存在的安全风险点,并针对这些风险点提供安全加固建议。
测试流程1. 对海洋CMS站点进行信息收集
2. 对海洋CMS站点尝试扫描与注入
3. 对海洋CMS站点尝试木马包含
4. 获取海洋CMS站点shell
5. 建立跳板,利用内网代理访问PHPOA
6. 对PHPOA进行信息收集
7. 对PHPOA尝试路径扫描
8. 对PHPOA尝试代码审计
9. 获取PHPOA的SHELL
10. 对PHPOA的LINUX系统新建用户提升权限
11. 对PHPOA的LINUX系统安装后门
12. 对PHPOA的LINUX系统伪造/清除痕迹
13. 完成报告内容
实验环境1. 海洋CMS站点环境海洋CMS站点与PHPSTUDY(mysql php)环境。
2. 内网PHPOA环境PHPOA与LINUX apache环境。
3. 内网防火墙配置配置内网防火墙,使内网的PHPOA只允许海洋CMS站点的机器访问,阻止内网渗透攻击方访问,命令如下:
禁止所有80端口连接,
iptables -I INPUT -p tcp --dport 80 -j DROP
只允许指定内网IP通过80端口访问,
iptables -I INPUT -s [ip] -p tcp --dport 80 -j ACCEPT
设置好之后用iptables –nvl查看配置是否正确。
实验原理1. 找功能函数eval的源码文件写入木马· 因命令执行大致是函数,eval(),system(),proc_open()之类的,能执行php代码一般就是eval()函数,检索页面源码有eval函数的地方,发现代码:@eval("if(".$strIf."){\$ifFlag=true;}else{\$ifFlag=false;}");
@eval("if(".$strIf.") { \$ifFlag=true;}
· 构造含木马的url:[ip]/search.php?searchtype=5&tid=&area=eval($_POST[cmd])
2. 内网渗透原理· 利用reGeorg proxifier两个软件进行内网代理。
· reGeorg利用了会话层的socket5协议,提供了代理程序与代理脚本。
· Proxifier是一款功能非常强大的socks5客户端,可以让不支持通过代理服务器工作的网络程序能通过HTTPS或SOCKS代理或代理链。
· 由reGeorg提供的代理脚本与代理程序配合Proxifier使网络程序生成代理链进而渗透到内网访问内网站点。
渗透测试过程1. 收集海洋CMS站点路径信息使用御剑工具扫描海洋CMS站点,收集该站点信息,如图1所示。
- 图1 -
2. 判断获取SHELL方式通过追踪area参数处理过的地方,查找源码中有eval函数的地方,判断可写入木马的位置写入木马,如图2所示。(此处详细说明请见上文实验原理部分)
- 图2 -
3. 得到海洋CMS站点SHELL用菜刀工具连接木马,如图3、图4所示。
- 图3 -
- 图4 -
4. 设置内网代理至此,获取到了海洋CMS站点的SHELL。接下来要进行内网代理,才能渗透至内网访问内网站点。将reGeorg代理软件的代理程序脚本上传至海洋CMS网站目录下,如图5所示。
- 图5 -
验证reGeorg的代理脚本是否可成功执行,如图6所示。
- 图6 –
用CMD→reGeorg连上传的接代理脚本,如图7所示。
- 图7 -
使用Proxifier,socks5客户端生成代理链,如图8所示。
- 图8 -
填写代理信息,如图9所示。
- 图9 -
5. 搜索内网主机设置代理完毕后即完成内网代理过程,现在通过菜刀工具打开海洋CMS站点机器的命令窗口搜索内网站点地址,如图10、图11所示。
- 图10 -
- 图11 -
访问搜索到的192.168.80.128这个内网地址,看到PHPOA登录界面,如图12所示。
- 图12 -
6. 获取内网PHPOA主机的SHELL现在想办法获取PHPOA的SHELL,通过扫描PHPOA的机器IP没有获取到有用信息,通过注入与弱口令均没有效果,通过查看资料发现此OA某PHP文件存在任意文件上传漏洞,故写个最简单的上传页面进行任意文件上传,首先添加一个空的txt文件(sysConf.txt),再添加木马文件(bkhorse.php),然后提交上传,如图13、图14所示。(此处详细说明请见后面的代码解析部分)
- 图13 -
- 图14 -
页面返回木马保存路径,如图15所示。
- 图15 -
接下来用菜刀工具连接木马,获取到PHPOA的SHELL,如图16、图17所示。
- 图16 -
- 图17 -
7. 在PHPOA的主机上提权最后用菜刀打开PHPOA机器的终端命令窗口进行提权即完成全部实验过程。(LINUX提权试了几种办法均未成功,故此处暂无内容,继续奋斗……)
代码&语句解析1. PHPOA代码审计该OA在(ntko\uploadOfficeFile.php)这个文件存在一个任意文件上传的漏洞,对PHPOA源码文件(ntko\uploadOfficeFile.php)进行审计,发现源码中用if判断了是否存在上传文件,并且只对name值为uploadfile文件进行了大小检测,如图所示,
如果上传文件符合大小条件,就会判断是否接收到name值为attachfile的附件,若接收到附件,则保存于磁盘,并没有对附件进行任何检测,如图所示,
则说明存在任意文件上传漏洞。
只需写个简单的上传页面,提交的目标地址指向这个uploadOfficeFile.php文件,然后上传name值为uploadfile与attache的两个文件,上传uploadfile的文件内容大小符合检测条件,attache附件文件即可上传木马文件。上传后用菜刀连木马,拿到shell。
分析结果总结1. 内网渗透实验体会由于此次实验中的海洋站点包含一句话木马位置与内网PHPOA可上传木马文件位置两个突破点均为代码审计的成果,让我体会到代码审计的重要性,对于代码的审计能力必须提高。
2. 遇到问题及解决遇到问题:
在拿到海洋站点shell后,扫描到内网的PHPOA,只有登录页面,不知道该如何下手。
解决过程:
后来通过搜索引擎得知该OA在(ntko\uploadOfficeFile.php)这个文件存在一个任意文件上传的漏洞,故对PHPOA源码文件(ntko\uploadOfficeFile.php)进行审计,发现源码中用if判断了是否存在上传文件,并且只对name值为uploadfile文件进行了大小检测,如图所示,
如果上传文件符合大小条件,就会判断是否接收到name值为attachfile的附件,若接收到附件,则保存于磁盘,并没有对附件进行任何检测,如图所示,
则说明存在任意文件上传漏洞。
只需写个简单的上传页面,提交的目标地址指向这个uploadOfficeFile.php文件,然后上传name值为uploadfile与attache的两个文件,上传uploadfile的文件内容大小符合检测条件,attache附件文件即可上传木马文件。上传后用菜刀连木马,拿到shell,问题解决。
3. 内网渗透实验总结通过本次内网渗透实验,证明了海洋CMS站点不够安全。对于文件上传漏洞与SQL注入漏洞虽做了严谨的安全加固,但对于功能参数赋值的过滤不严,导致木马写入。
通过本次内网渗透实验,证明了PHPOA不够安全。对于遍历目录与相关权限具备安全防范措施,但对于文件上传的检测过于缺乏,导致木马写入。
总结,通过本次渗透测试实验,评定海洋CMS网站与PHPOA软件安全级别为"十分危险"。
4. 优化防御措施检测/过滤对功能参数的赋值
检测海洋CMS网站的各个功能参数的赋值情况,检测赋值内容的长度等方法。
改文件源码阻止任意文件上传
对PHPOA所有涉及文件上传的源码进行改进,检测/过滤上传的文件,更改保存接收文件后保存的路径。
,