1.shiro反序列化漏洞原理分析以及漏洞复现(Shiro-550/Shiro-721漏洞复现)
2.mimikatz源码分析-lsadump模块(注册表)
3.matlab如何还原pcode加密过的p文件以及编译后的应用的源代
4.AES算法(十一) NodeJS 环境中实战
shiro反序列化漏洞原理分析以及漏洞复现(Shiro-550/Shiro-721漏洞复现)
shiro-反序列化漏洞(CVE--)漏洞简介
shiro-主要是由shiro的rememberMe内容反序列化导致的命令执行漏洞,造成的原因是默认加密密钥是硬编码在shiro源码中,任何有权访问源代码的人都可以知道默认加密密钥。于是攻击者可以创建一个恶意对象,对其进行序列化、编码,倚天脱机源码然后将其作为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后:进行爆破秘钥,爆破利用链以及回显
命令执行:
工具地址
mimikatz源码分析-lsadump模块(注册表)
mimikatz是一款内网渗透中的强大工具,本文将深入分析其lsadump模块中的sam部分,探索如何从注册表获取用户哈希。
首先,简要了解一下Windows注册表hive文件的结构。hive文件结构类似于PE文件,包括文件头和多个节区,每个节区又有节区头和巢室。其中,巢箱由HBASE_BLOCK表示,巢室由BIN和CELL表示,整体结构被称为“储巢”。通过分析hive文件的结构图,可以更直观地理解其内部组织。
在解析过程中,需要关注的关键部分包括块的签名(regf)和节区的签名(hbin)。这些签名对于定位和解析注册表中的数据至关重要。
接下来,深入解析mimikatz的解析流程。在具备sam文件和system文件的情况下,主要分为以下步骤:获取注册表system的句柄、读取计算机名和解密密钥、获取注册表sam的句柄以及读取用户名和用户哈希。若无sam文件和system文件,mimikatz将直接通过官方API读取本地机器的注册表。
在mimikatz中,会定义几个关键结构体,包括用于标识操作的注册表对象和内容的结构体(PKULL_M_REGISTRY_HANDLE)以及注册表文件句柄结构体(HKULL_M_REGISTRY_HANDLE)。这些结构体包含了文件映射句柄、映射到调用进程地址空间的位置、巢箱的起始位置以及用于查找子键和子键值的键巢室。
在获取注册表“句柄”后,接下来的任务是获取计算机名和解密密钥。密钥位于HKLM\SYSTEM\ControlSet\Current\Control\LSA,通过查找键值,将其转换为四个字节的密钥数据。利用这个密钥数据,mimikatz能够解析出最终的密钥。
对于sam文件和system文件的操作,主要涉及文件映射到内存的过程,通过Windows API(CreateFileMapping和MapViewOfFile)实现。这些API使得mimikatz能够在不占用大量系统资源的情况下,方便地处理大文件。
在获取了注册表系统和sam的句柄后,mimikatz会进一步解析注册表以获取计算机名和密钥。对于密钥的获取,mimikatz通过遍历注册表项,定位到特定的键值,并通过转换宽字符为字节序列,最终组装出密钥数据。
接着,解析过程继续进行,获取用户名和用户哈希。在解析sam键时,mimikatz首先会获取SID,然后遍历HKLM\SAM\Domains\Account\Users,解析获取用户名及其对应的哈希。解析流程涉及多个步骤,包括定位samKey、获取用户名和用户哈希,以及使用samKey解密哈希数据。
对于samKey的获取,mimikatz需要解密加密的数据,使用syskey作为解密密钥。解密过程根据加密算法(rc4或aes)有所不同,但在最终阶段,mimikatz会调用系统函数对数据进行解密,从而获取用户哈希。
在完成用户哈希的解析后,mimikatz还提供了一个额外的功能:获取SupplementalCreds。这个功能可以解析并解密获取对应用户的SupplementalCredentials属性,包括明文密码及哈希值,为用户提供更全面的哈希信息。
综上所述,mimikatz通过解析注册表,实现了从系统中获取用户哈希的高效功能,为内网渗透提供了强大的工具支持。通过深入理解其解析流程和关键结构体的定义,可以更好地掌握如何利用mimikatz进行深入的安全分析和取证工作。
matlab如何还原pcode加密过的p文件以及编译后的应用的源代
p code使用AES加密
当p文件执行时,文件中的代码通常被解密。由于Mathworks需要解密算法和密钥,因此它可能包含用于反向工程的解密逻辑。
P代码文件的执行速度与原始MATLAB源代码相同,且P代码文件中包含混淆以保护代码免于被读取。
若要生成P代码文件,可以使用MATLAB的pcode函数。对于单个.m文件,只需调用pcode(file_name)。对于多个文件或文件夹,可使用pcode(file_list,'-inplace')。
在MATLAB中使用pcode(file_name)将文件转换为P代码版本,以减少执行时间。此外,pcode(file_name,'-inplace')在与原文件相同的目录下创建P代码文件,适合批量操作。
AES加密过程涉及到四个关键操作:字节替代、行移位、列混淆和轮密钥加。解密过程则执行相反操作以恢复明文。AES算法使用个字节的密钥在每轮操作中生成子密钥。字节替换通过S盒实现字节映射,行移位则通过循环左移实现矩阵内部字节置换。列混淆则通过矩阵乘法实现非线性扩散。轮密钥加在每轮中进行异或操作,结合之前的混淆过程,实现加密的最终步骤。
密钥扩展算法用于生成AES所需的多个子密钥。对于位密钥,算法将密钥扩展为个子密钥。该过程包括循环左移、S盒映射、与常量异或以及基于前一列计算新值的步骤。最终生成的扩展密钥用于后续轮次的加密操作。
AES算法(十一) NodeJS 环境中实战
本文将简要探讨如何在 NodeJS 环境下利用 AES 算法实现加密与解密功能。NodeJS 提供的内置加密模块 crypto 是实现这一目标的关键工具,它集成了多种加密算法的 API,依赖于系统底层的 OpenSSL 支持。 在本篇内容中,我们仅聚焦于 AES 算法的核心应用。首先,需引入 crypto 模块,然后通过初始化加密函数来指定算法(如 AES--CBC),并传入 key 和 iv 参数。key 和 iv 分别作为加密和解密的密钥与初始向量。加密与解密操作的核心步骤包括数据的加密和解密,结果输出,以及填充模式的设置。默认情况下,NodeJS 的加密/解密函数会自动填充数据,使用 PKCS7 填充模式确保数据完整性。如需自定义填充模式,可通过设置 cipher.setAutoPadding(false) 来禁用自动填充,并自行调整数组长度。 此外,为了全面理解 NodeJS 中 AES 算法的使用,我们还简要介绍了 crypto 模块及 Cipher 类、Decipher 类中的常用函数。这些函数包括: crypto.createCipheriv() 和 crypto.createDecipheriv():用于初始化加密和解密操作。 Cipher 类的 cipher.update() 和 cipher.final():用于数据的加密与最终处理。 Decipher 类的 decipher.update() 和 decipher.final():用于数据的解密与最终处理。 通过遵循上述步骤与函数应用,开发者能够在 NodeJS 环境下实现 AES 算法的加密与解密功能。如有需要深入了解或查看完整实现案例,请查阅官方文档或源码资源。2024-12-29 02:03
2024-12-29 01:48
2024-12-29 01:13
2024-12-29 01:11
2024-12-29 00:29
2024-12-29 00:16
2024-12-28 23:58
2024-12-28 23:32