1.shiro反序列化漏洞原理分析以及漏洞复现(Shiro-550/Shiro-721漏洞复现)
2.CVE-2022-4510:Binwalk 远程代码执行漏洞
3.binwalk远程命令执行漏洞原理以及演示 CVE-2022-4510
4.fastjson 1.2.24源码分析以及漏洞复现
5.log4j2远程代码执行漏洞本地复现
6.微信暗雷源码漏洞
shiro反序列化漏洞原理分析以及漏洞复现(Shiro-550/Shiro-721漏洞复现)
shiro-反序列化漏洞(CVE--)漏洞简介
shiro-主要是由shiro的rememberMe内容反序列化导致的命令执行漏洞,造成的源码源码原因是默认加密密钥是硬编码在shiro源码中,任何有权访问源代码的漏洞漏洞人都可以知道默认加密密钥。于是源码源码攻击者可以创建一个恶意对象,对其进行序列化、漏洞漏洞编码,源码源码源码bat修改然后将其作为cookie的漏洞漏洞rememberMe字段内容发送,Shiro 将对其解码和反序列化,源码源码导致服务器运行一些恶意代码。漏洞漏洞
特征:cookie中含有rememberMe字段
修复建议:
更新shiro到1.2.4以上的源码源码版本。
不使用默认的漏洞漏洞加密密钥,改为随机生成密钥。源码源码
漏洞原理
一、漏洞漏洞Shiro简介
Apache Shiro 是源码源码一个强大易用的 Java 安全框架,提供了认证、漏洞漏洞授权、加密和会话管理等功能,对于任何一个应用程序,Shiro 都可以提供全面的安全管理服务。
在ApacheShiro<=1.2.4版本中AES加密时采用的key是硬编码在代码中的,于是我们就可以构造Remembe Me的值,然后让其反序列化执行。
二、Shiro服务器识别身份加解密处理的流程
(1)加密
1.用户使用账号密码进行登录,并勾选"Remember Me"。
2、Shiro验证用户登录信息,通过后,查看用户是否勾选了”Remember Me“。
3、若勾选,则将用户身份序列化,并将序列化后的内容进行AES加密,再使用base编码。
4、最后将处理好的内容放于cookie中的rememberMe字段。
(2)解密
1、当服务端收到来自未经身份验证的用户的请求时,会在客户端发送请求中的cookie中获取rememberMe字段内容。
2、将获取到的rememberMe字段进行base解码,再使用AES解密。
3、鼠标宏源码最后将解密的内容进行反序列化,获取到用户身份。
三、Key
AES加密的密钥Key被硬编码在代码里
于是可得到Payload的构造流程:
恶意命令-->序列化-->AES加密-->base编码-->发送Cookie
Shiro-反序列化漏洞(CVE--)Shiro和Shiro的区别是什么
Shiro只需要通过碰撞key,爆破出来密钥,就可以进行利用 Shiro的ase加密的key一般情况下猜不到,是系统随机生成的,并且当存在有效的用户信息时才会进入下一阶段的流程所以我们需要使用登录后的rememberMe Cookie,才可以进行下一步攻击。
漏洞指纹
URL中含有Shiro字段
cookie中含有rememberMe字段
返回包中含有rememberMe
漏洞介绍
在Shiro中,Shiro通过AES--CBC对cookie中的rememberMe字段进行加密,所以用户可以通过PaddingOracle加密生成的攻击代码来构造恶意的rememberMe字段,进行反序列化攻击,需要执行的命令越复杂,生成payload需要的时间就越长。
漏洞原理
由于Apache Shiro cookie中通过 AES--CBC 模式加密的rememberMe字段存在问题,用户可通过Padding Oracle 加密生成的攻击代码来构造恶意的rememberMe字段,用有效的RememberMe cookie作为Padding Oracle Attack 的前缀,然后制作精心制作的RememberMe来执行Java反序列化攻击
攻击流程
登录网站,并从cookie中获取RememberMe。使用RememberMe cookie作为Padding Oracle Attack的前缀。加密syserial的序列化有效负载,以通过Padding Oracle Attack制作精心制作的RememberMe。请求带有新的RememberMe cookie的网站,以执行反序列化攻击。攻击者无需知道RememberMe加密的密码密钥。
加密方式:AES--CBC 属于AES加密算法的CBC模式,使用位数据块为一组进行加密解密,即字节明文,对应字节密文,,明文加密时,如果数据不够字节,则会将数据补全剩余字节
若最后剩余的明文不够字节,需要进行填充,通常采用PKCS7进行填充。比如最后缺3个字节,则填充3个字节的0x;若最后缺个字节,则填充个字节的0;
若明文正好是个字节的整数倍,最后要再加入一个字节0x的组再进行加密
Padding Oracle Attack原理 Padding Oracle攻击可以在没有密钥的情况下加密或解密密文
Shiro Padding Oracle Attack(Shiro填充Oracle攻击)是一种针对Apache Shiro身份验证框架的安全漏洞攻击。Apache Shiro是Java应用程序中广泛使用的身份验证和授权框架,用于管理用户会话、无爱源码权限验证等功能。
Padding Oracle Attack(填充Oracle攻击)是一种针对加密算法使用填充的安全漏洞攻击。在加密通信中,填充用于将明文数据扩展到加密算法块大小的倍数。在此攻击中,攻击者利用填充的响应信息来推断出加密算法中的秘密信息。
Shiro Padding Oracle Attack利用了Shiro框架中的身份验证过程中的一个漏洞,该漏洞允许攻击者通过填充信息的不同响应时间来确定身份验证过程中的错误。通过不断尝试不同的填充方式,攻击者可以逐步推断出加密秘钥,并最终获取访问权限。
这种攻击利用了填充错误的身份验证响应来获取关于秘密信息的信息泄漏,然后根据这些信息进行进一步的攻击。为了防止Shiro Padding Oracle Attack,建议及时更新Apache Shiro版本,确保已修复该漏洞,并采取其他安全措施,如使用安全的加密算法和密钥管理策略。
漏洞复现:CVE--
环境:kali linux
靶场使用:vulhub/shiro/CVE--
访问地址:
抓包分析一下:
在返回包当中发现存在rememberMe=deleteMe 字样,可以大概确定有配置shiro,可以进行下一步。因为shiro本身功能就是一个身份验证管理,所以一般都在登录口可以看到。
UI一键利用工具
使用工具再进行检测确认:
输入目标的url地址,根据关键字进行爆破秘钥
接下来爆破利用链以及回显方式:
接下来可进行命令执行:
反弹shell:
可使用工具进行检测:
检测完成后可进行命令执行,反弹shell等操作:
使用工具进行简单的反弹:
设置监听端口
window:
linux:
还有使用ysoserial监听模块JRMP来进行反弹shell,具体可看参考文档,操作都差不多。
正是因为利用简单,所以危害比较大。
工具地址
漏洞复现:CVE--
环境:kali linux
docker进行搭建启动
访问:
利用过程和shiro差不多,shiro需要登录网站,并从cookie中获取RememberMe。
进行登录,使用正确的账号和密码:
先使用正确的账号密码登录后,在抓包获取合法 Cookie(勾选Remember Me)
如果认证失败则只能得到 rememberMe=deleteMe
将登录后获取的set-cookie值当中的rememberMe值,将值复制下来,放到工具当中
选择shiro,输入目标url,设置rememberMe值,点击下一步,等待即可
选择检测方式:
等待即可:
使用shiro综合工具:
输入url后:进行爆破秘钥,opengl球体源码爆破利用链以及回显
命令执行:
工具地址
CVE--:Binwalk 远程代码执行漏洞
Binwalk是一款用于搜索二进制镜像文件以提取嵌入文件和代码的工具。
Binwalk是一款固件分析工具,旨在帮助研究人员进行固件非分析、提取和逆向工程。它简单易用,支持完全自动化脚本,通过自定义签名、提取规则和插件模块进行扩展。
Part1 漏洞状态
Part2 漏洞描述
分析环境:
Kalix
Binwalk v2.3.3
Part3 漏洞复现
1. 创建一个.pfs文件头,如下,然后打包成exp.zip。
2. 正常binwalk执行后输出。
3. 在kali中使用binwalk解析exp.zip,binwalk -M -e exp.zip,并查看结果。
4. 看到在kali桌面生成了一个_exp.zip.extracted文件夹。文件夹下pfs-root目录下看到.py是我们pfs文件头写的文件名。
5. 构造验证pfs并打包成exp.zip。
6. 构造的pfs文件头如下。
7. 再次在kali中使用binwalk解析exp.zip。
8. 可以看到binwalk在正常输出之后又输出了rce...字段。证明复现成功!
Part4 漏洞分析
什么是PFS文件?
PFS文件是由PhotoFiltre Studio(图像修饰程序)创建的选择文件。它包含图像编辑器的多边形选择工具使用的坐标,以便在给定坐标之间绘制线。PFS文件以纯文本格式存储。
漏洞源代码
问题出现在红框内部的代码。
在解析pfs文件头时,会把pfs文件头内部的文件名和out_dir拼接。拼接之后默认走else代码分支,并且对特殊符号没有校验,导致可以使用../符号路径穿越。再利用binwalk的plugins功能,就可以释放py文件到binwalk的plugins目录下,从而实现代码执行。
Part5 修复建议
1. 将Binwalk软件升级到最新的2.3.4版本。
2. 代码要检测特殊符号,防止路径穿越。
binwalk远程命令执行漏洞原理以及演示 CVE--
binwalk软件存在一个从版本2.1.2到2.3.3的漏洞。此路径遍历漏洞允许远程攻击者在安装有受影响的binwalk软件的机器上执行任意代码。漏洞源于PFS文件格式,由PhotoFiltre Studio图像修饰程序创建,ghostpush源码分析其中包含多边形选择工具使用的坐标数据。PFS文件以纯文本格式存储。分析源代码后,发现在年合并到binwalk的PFS提取器插件中存在问题,os.path.join函数修改后没有进行完全路径解析,导致第行条件永远不会为真。制作路径遍历的PFS文件可以迫使binwalk在目录外写入文件。利用这一漏洞,可以通过自定义插件方式,将恶意代码保存为.pfs文件,并添加到压缩包中。当从用户主目录中使用binwalk提取文件时,会在.config/binwalk/plugins目录下加入恶意插件,随后被binwalk加载并执行,从而导致远程代码执行(RCE)。
为了演示这一过程,可以使用binwalk API定义自定义插件。将插件放在$HOME/.config/binwalk/plugins目录下后,运行binwalk时会自动调用此插件。恶意代码应以十六进制数据形式保存,并将其转换为.py文件,再保存为.pfs格式,之后添加到压缩包中。当从用户主目录中提取文件时,binwalk会在.config/binwalk/plugins目录下加载并执行恶意插件,导致远程代码执行。
总结而言,利用binwalk版本2.1.2至2.3.3期间的路径遍历漏洞,可以通过自定义插件的方式执行任意代码,进而实现远程代码执行。此外,除了覆盖./.config/binwalk/plugins/malwalk.py文件,还可以覆盖其他关键文件,如id.rsa或/etc/passwd文件,实现直接提权。
fastjson 1.2.源码分析以及漏洞复现
反序列化,这个过程将字节序列恢复为Java对象。例如在使用Python做自动化测试时,通过字符串名字调用相同名字的方法。Fastjson的功能允许通过字符串引用如`@type":"com.sun.rowset.JdbcRowSetImpl`来执行内部方法。由此,我们能利用Fastjson提供的便利,通过调用对应的函数来验证漏洞。
在渗透测试中,漏洞的验证通常需要满足几个条件:判断指纹和指纹回显,Fastjson的特性使得这一步变得简单。然而,在利用过程中,要考虑到Fastjson本身的限制、JDK的限制以及可能的安全配置限制。因此,POC验证方案需考虑这些限制的版本和配置。
Fastjson通过JSON抽象类实现JSONAware接口,并提供两个常用方法:`toJSONString`用于对象转换为JsonString,`parseObject`用于将JSON字符串转换为对象。这次的漏洞主要与反序列化相关。
反序列化的执行发生在`DefaultJSONParser.java`类中。关键代码中,固定键`@type`对应反序列化类的全路径,其中`typeName`为传入类的全路径。在Fastjson 1.2.版本中,`loadClass`方法未进行任何过滤,允许传入任何JVM加载的类,并执行`setKey`方法,其中Key为可变参数。
要利用这个反序列化漏洞,需要满足以下条件:JVM加载的类、有非静态set方法和传入一个参数。使用RPC远程执行代码的思路实现POC,此处使用了`com.sun.rowset.JdbcRowSetImpl`实现。
JNDI全称为Java Naming and Directory Interface,主要提供应用程序资源命名与目录服务。其底层实现之一是RMI(Remote Method Invocation),用于Java环境的远程方法调用。在`com.sun.rowset.JdbcRowSetImpl`类中,关注点在于`getDataSourceName()`和`setAutoCommit()`方法。`getDataSourceName()`用于传值,`setAutoCommit()`用于确认调用set方法。
实现过程包括引用`com.sun.rowset.JdbcRowSetImpl`类、设置`dataSourceName`传值以及通过`autoCommit`属性触发执行方法。完成方法确认后,使用`marshalsec`项目启动RMI服务并加载远程类。
POC的实现步骤如下:首先确认目标是否使用Fastjson且存在漏洞;利用Fastjson的反序列化功能传输引用类和执行方法;使用`com.sun.rowset.JdbcRowSetImpl`执行验证POC的脚本,并观察回显结果;最后,完成漏洞利用。
具体操作包括搭建环境,如使用CentOS虚拟机作为RMI服务器和远程调用服务,KALI机器作为靶机和抓包测试。进行指纹确认、安装maven、构建RMI服务器和客户端、调用测试文件,并观察DNS日志以验证漏洞成功利用。通过DNS日志确认漏洞利用成功后,可以进一步尝试反弹shell,实现远程控制。
综上所述,Fastjson的反序列化漏洞是一个可以被利用的安全问题,通过合理的利用,可以实现远程代码执行。了解和研究这类漏洞有助于增强对Fastjson以及类似技术的防御能力。
log4j2远程代码执行漏洞本地复现
本文仅供学习参考,请勿在真实环境进行网络攻击行为。
一、背景
Log4j 2 是 Java 中应用非常广泛的一个日志框架,在 年底,一个名为 CVE--(也称为 Log4Shell)的严重漏洞被发现,该漏洞被CVSS评为分最高级别。网络攻击者利用这个漏洞不需要服务器密码就可以访问并操作服务器,攻击方式非常简单,技术门槛低,危害极大。受影响版本:Apache log4j2 2.0 - 2..1 下面先简单看一下攻击原理,然后直接开始操作。
二、攻击原理
假设现在有个网站,当用户登录时,正常请求路径如下:
如果应用服务端的登录接口中使用漏洞版本的log4j2打印请求参数的日志,就有可能被注入。如图所示:
三、复现步骤
以下代码已放在github仓库:log4j漏洞复现代码
1. jdk版本
作者使用jdk1.8.0_和1.8.0_复现成功,1.8.0_复现失败。
JDK 6u、7u、8u之后:增加了com.sun.jndi.ldap.object.trustURLCodebase选项,默认为false,禁止LDAP协议使用远程codebase的选项,把LDAP协议的攻击途径也给禁了。
使用1.8.0_的情况下,将trustURLCodebase属性设置为true也没复现成功,原因暂未深究。
2. 模拟被攻击的应用服务器
写一个springboot项目,模拟被攻击的应用服务端登录接口,接口中打印了userName参数日志,启动此项目。端口为。访问地址为 .0.0.1:/login
3. 编写恶意代码
写一个在应用服务端执行的恶意代码,这里用删除一个服务器文件做演示,实际上可以使用反弹shell等做更多有害操作。编译这个类,生成class文件。
4. 启动http服务
启动一个http服务,使其可以访问上一步生成的.class文件,可以使用python启动一个http服务,cmd进入.class文件的目录,然后执行以下命令,使用 .0.0.1:/Exploit....能够访问说明一切正常。如果没有python环境也可以使用nginx等,只要能访问到Exploit.class即可。以下是使用python启动http服务的命令和截图:
5. 启动LADP服务
具体作用可以参考上面的原理图。这里直接使用github上的代码 GitHub - mbechler/marshalsec来运行ladp服务。如图所示:编译、运行启动。
运行ladp服务的命令:
上面命令中的 .0.0.1:/#...是第四步中的地址,根据自己的情况可自行修改,是ladp服务默认端口,无需修改。
6. 发起攻击请求
在C盘建一个1.txt文件,使用恶意构造的参数访问登录接口。
切换到ldap服务的控制台,可以看到日志,说明登录接口中的log4j已经访问ladp服务了。
切换到http控制台,可以看到请求日志,说明应用服务器已经请求http服务器加载Exploit.class。
在Exploit源码中debug,可以确认恶意代码已经执行,漏洞成功复现。
四、注意事项
微信暗雷源码漏洞
微信暗雷源码漏洞问题引起广泛关注。在某些所谓的“加入不可描述微信群”的骗局中,用户在支付8元时,支付金额会被篡改为元,7元变元,8元变元。这些情况稍不留意就容易中招。
在支付过程中,往往要求用户支付8元,许多人在认为金额不大时,被猎奇心理驱使而点击支付。然而,支付界面却显示要支付9元,甚至元!若用户不仔细审阅,便会遭受“偷鸡不成蚀把米”的后果。微信并无付费入群功能,用户实际点击的加群页面是一个欺诈链接。
这些链接冒充微信入群界面,利用色情内容诱导点击。用户进入的实际上是一个外部链接,显示的9.元支付要求只是骗子篡改网页后的障眼法。骗子利用用户的猎奇心理误导他们支付巨额费用。并且,每次点击的二维码显示的群名称也不同,这在正常情况下不会发生。
这些问题涉及源码漏洞,用户需提高警惕,仔细审阅支付信息,避免遭受欺诈。同时,平台方应加强安全审核,防止此类漏洞利用于欺诈行为。
远程代码执行漏洞远程命令执行漏洞原理
远程代码执行漏洞,亦称为远程命令执行漏洞,是一种安全漏洞,当开发人员在编写源代码时未对可执行的特殊函数入口进行过滤时,便可能导致客户端能够提交恶意构造的语句,并由服务器端执行。 在命令注入攻击中,WEB服务器未能过滤类似system(), eval(),exec()等函数,往往成为该漏洞攻击成功的最关键因素。这些函数允许服务器执行外部命令,如果未正确验证用户输入,攻击者可以利用这些漏洞来执行任意命令,从而获取服务器的控制权。 以system()函数为例,攻击者可以通过构造特定的输入参数,将恶意命令注入到系统调用中,进而执行任意命令。eval()函数则会将传入的字符串直接作为PHP代码执行,如果输入字符串为恶意代码,攻击者即可利用该函数执行任意代码。同样,exec()函数用于执行外部命令,攻击者通过构造恶意命令输入,同样可以利用该漏洞执行任意命令。 综上所述,远程代码执行漏洞主要发生在开发人员未对特殊函数入口进行充分过滤的情况下。攻击者通过构造恶意输入,利用这些未过滤的函数执行任意命令,从而获得服务器的控制权。因此,开发人员在编写代码时,应充分注意对特殊函数入口的过滤,避免此类漏洞的出现,以保障系统的安全。扩展资料
远程命令执行漏洞,用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令,可能会允许攻击者通过改变 $PATH 或程序执行环境的其他方面来执行一个恶意构造的代码。