CVE定义

CVE, 即Common Vulnerabilities & Exposures。是对广泛认同的信息安全漏洞或者已经暴露出来的弱点给出的一个公共名称。

CVE认定的一般流程

发现 -> 公开 -> 编号 -> 提案 -> 修改 -> 中间决策 -> 最终决策 -> 正式发布 -> (再评估) -> (撤销)

官方CVE查询

查看具体CVE信息举例:

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-7471

CVE利用

各种个样CVE上手最好的方式就是刷靶场做联系,i春秋和墨者学院的都是不错,当然github上也有很多开源靶场。

CVE-2017-9791【S2-048】Struts2远程命令执行漏洞

【S2-048】Struts2远程命令执行漏洞(CVE-2017-9791) -- Finish

exp: https://github.com/jas502n/st2-048

Usage

> python St2-048.py

set url : http://xx.xx.xx.xx:port/integration/saveGangster.action

cmd >>: whoami
root

cmd >>: cat /etc/passwd

漏洞介绍

使用了Apache Struts 1插件的Apache Struts 2.3.X版本中存在远程代码执行漏洞,该漏洞出现于Struts2的某个类中,该类是为了将Struts1中的Action包装成为Struts2中的Action,以保证Struts2的兼容性。在Struts2中的Struts1插件启用的情况下,远程恶意访问者可通过使用恶意字段值,构造特定的输入,发送到ActionMessage类中,从而导致任意命令执行,进而获取目标主机系统权限

漏洞危害

成功访问后恶意访问者远程命令执行,危害服务器安全,敏感信息泄露等。

修复方案

Apache升级到修复过漏洞的版本,部署Apache Struts2的网站,应及时检查所使用的Struts2版本是否在受影响范围内。如受影响,可采取以下缓解方案:

(1)停止启用struts2-struts1-plugin插件。

(2)停止使用showcase.war

(3)始终使用资源键,而不是将原始消息传递给ActionMessage

如何防御远程代码执行?

假定所有输入都是可疑的,尝试对所有输入提交可能执行命令的构造语句进行严格的检查或者控制外部输入,系统命令执行函数的参数不允许外部传递。 不仅要验证数据的类型,还要验证其格式、长度、范围和内容。 不要仅仅在客户端做数据的验证与过滤,关键的过滤步骤在服务端进行。 对输出的数据也要检查,数据库里的值有可能会在一个大网站的多处都有输出,即使在输入做了编码等操作,在各处的输出点时也要进行安全检查。 在发布应用程序之前测试所有已知的威胁。

REF:

  • 官方:https://cwiki.apache.org/confluence/display/WW/S2-048

  • 详细分析:https://www.anquanke.com/post/id/86398