官方公众号企业安全新浪微博
FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。
FreeBuf+小程序
1、概述
新华三御雷实验室在一次实战演练中遇到开源CMS系统的网站,经过探测发现网站存在未授权文件上传漏洞但存在安全设备检测导致无法直接利用,经过不断尝试最后绕过安全设备检测成功上传webshell获取服务器控制权限。
新华三御雷实验室后期在模拟环境下复盘总结成此文,文中涉及到的CMS漏洞厂商目前已经修复。新华三御雷实验室协同盾山实验室,通过对畸形上传报文的覆盖优化上传文件的检测识别,同时加强对变形的webshell文件内容检测识别,新华三全系安全产品通过升级IPS特征库到最新版本可识别上文中的文件上传绕过利用的攻击流量。
0x01 漏洞发现
根据网站URL路径和后台管理页面确认其使用某开源CMS系统且确认其为5.x版本。
前台探测其文件上传接口可访问,猜测网站可能存在未授权文件上传漏洞:
此CMS在5.x的早期版本中存在文件上传漏洞且漏洞利用条件有:
1、项目通过war包在tomcat等容器中部署
2、允许上传jspx文件(5.2.7之前默认黑名单配置只禁止了上传.jsp和.exe文件)
根据报错了解已满足使用tomcat部署的条件,通过尝试可以正常上传图片且可以成功访问。
0x02 后缀黑名单绕过
尝试上传jspx后缀内容为test的文件被检测拦截,判断有安全设备对上传文件为jspx的后缀做了过滤。尝试后缀大小写、filename参数结构破坏等方法未绕过,最终在头部Content-Type的boundary=值中通过添加tab字符成功绕过后缀检测。
0x03 文件内容检测绕过
利用黑名单绕过的方法直接上传jspx的cmd马被拦截。判断安全设备还对文件内容做了检测。继续尝试通过unicode编码、chunk编码小块传输、垃圾数据填充、修改文件类型如image/jpeg等方式均未果。猜测可能是对<jsp:root>字符串做了检测,通过不断缩小范围测试确认确实是检测<jsp:root>标签。
通过查找jspx文件上传绕过资料了解到,<jsp:root>中jsp就是默认的命名空间,实际上可以随意替换成其他名字比如:
继续尝试上传cmd小马结果又被拦截了。判断安全设备仍然对其他jspx结构语句有拦截,经过测试发现是<jsp:scriptlet>被检测:
<jsp:scriptlet>Runtime.getRuntime().exec(request.getParameter("i"));</jsp:scriptlet>
使用如下等效语句替换:
<abc:expression>Runtime.getRuntime().exec(request.getParameter("i"))</abc:expression>
成功绕过上传cmd马:
成功执行命令:
至此可上传无回显的cmd马,且通过测试发现服务器不出网。为了方便后续进一步利用需要上传冰蝎马,综合利用上述绕过的方法成功上传:
连接获取服务器的控制权限:
0x04 总结
在实战演练中经常会遇到WAF等安全设备,探测到目标系统可能存在某个漏洞后进一步利用时流量被识别自动拦截后,可以通过unicode编码、垃圾数据填充或者后端语言的功能等价替换等手段尝试绕过WAF流量测的检测,其关键点在于不断的尝试定位出安全设备过滤的关键字、标签或者某个函数。
新华三御雷实验室协同盾山实验室,通过对畸形上传报文的覆盖优化上传文件的检测识别,同时加强对变形的webshell文件内容检测识别,新华三全系安全产品通过升级IPS特征库到最新版本可识别上文中的文件上传绕过利用的攻击流量。