一、适用环境
1、企业自建有门户网站;
2、使用Struts框架的WEB网站;
3、网站服务器涉及有数据库之类的项目,如:微信登录、手机登录、充值、收费等。
4、使用安卓版、苹果版、电脑版结合的缴费类网站平台。
5、方便但需提高安全性的WEB网站系统。
二、安装配置Struts漏洞扫描工具的运行环境
(一)什么是Struts
struts2安全漏洞是apache项目下的一个web 框架,普遍应用于阿里巴巴、京东等互联网、政府、企业门户网站。
攻击者可通过发送恶意构造的HTTP数据包利用该漏洞,在受影响服务器上执行系统命令,进一步可完全控制该服务器,造成拒绝服务、数据泄露、网站造篡改等影响。由于该漏洞利用无需任何前置条件(如开启dmi ,debug等功能)以及启用任何插件,因此漏洞危害较为严重。
国家信息安全漏洞库(CNNVD)收到关于Apache Struts2 (S2-045)远程代码执行漏洞(CNNVD-201703-152)的情况报送。由于该漏洞影响范围广,危害级别高,国家信息安全漏洞库(CNNVD)对此进行了跟踪分析。
Apache Struts是美国阿帕奇(Apache)软件基金会负责维护的一个开源项目,是一套用于创建企业级Java Web 应用的开源MVC框架,主要提供两个版本框架产品: Struts 1和Struts 2。
Apache Struts2漏洞是由于上传功能的异常处理函数没有正确处理用户输入的错误信息。导致远程攻击者可通过发送恶意的数据包,利用该漏洞在受影响服务器上执行任意命令。
攻击者可通过发送恶意构造的HTTP数据包利用该漏洞,在受影响服务器上执行系统命令,进一步可完全控制该服务器,造成拒绝服务、数据泄露、网站篡改等影响。由于该漏洞利用无需任何前置条件(如开启dmi ,debug等功能)以及启用任何插件,因此漏洞危害较为严重。
(二)安装java运行环境jdk
参考:CentOS8下的JDK安装
https://blog.csdn.net/weixin_43075093/article/details/134822281
1、查看当前java的版本、检查是否存在jdk
java -version
(1)当前系统中没有安装java
(2)当前已经有的java版本
2、删除当前版本
(1)查看当前有哪几个安装包可删除:rpm –qa |grep java
(2)删除某个安装包:rpm –e –nodeps java-x.x.x-openjdk
(3)再查看java是否存在
3、查看可安装的java版本:yum –y list java*
4、安装JDK:yum install java-1.8.0-openjdk-devel.x86_64
5、查看已经安装好的java版本:java -version
6、yum 命令安装默认安装路径为 /usr/lib/jvm
7、配置环境变量:vi /etc/profile
set java environment
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b08-3.e18.x86 64
export CLASS_PATH=.:
J
A
V
A
H
O
M
E
/
l
i
b
/
d
t
.
j
a
r
:
JAVA_HOME/lib/dt.jar:
JAVAHOME/lib/dt.jar:JAVA_HOME/lib/tools.jar:
J
R
E
H
O
M
E
/
l
i
b
P
A
T
H
=
JRE_HOME/lib PATH=
JREHOME/libPATH=PATH:
J
A
V
A
H
O
M
E
/
b
i
n
:
JAVA_HOME/bin:
JAVAHOME/bin:JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
8、执行source /etc/profile
9、查看环境变量更新后的结果中有jdk的路径
10、若未知是否已配置JAVA_HOME
(1)查找本机中JDK安装的位置
Find / -name java
(2)编辑环境变量 vim /etc/profile
执行环境变量 /etc/profile
(3)执行$JAVA_HOME,能正常显示一个路径
(三)下载Struts漏洞扫描工具
(严禁用于非授权的测试及非法途径)下载地址:
https://github.com/abc123info/Struts2VulsScanTools
(四)启动漏洞扫描工具
(五)执行漏洞扫描
三、远程代码命令执行的防御措施
1、假定所有的输入都是可疑的,对所有输入提交的可能执行命令的语句或构造语句严格检查,或控制外部输入;系统命令执行时,执行的结果与参数不传递到外部。
2、输入验证与过滤:验证输入的数据时,验证其名称、格式、长度、类型等信息。
3、在客户端与服务端都进行数据的验证与过滤。
4、对输出的数据检查,如数据库的输出或程序执行结果的输出进行检查验证。
5、对输入的数据进行编码加密,也在各输出点进行安全检查。
6、参数化查询:在处理数据库查询时,应使用参数化查询方式,而不是简单拼接SQL语句。参数化查询可以有效防止SQL注入攻击,避免攻击者通过恶意输入改变SQL查询的意图。开发者应该使用预定义的参数,并对参数进行正确的类型检查和转换。
7、最小权限原则:在服务器配置和应用程序设置中,遵循最小权限原则。即为每个角色或模块分配最少的权限,避免一些不必要的操作和权限。例如,数据库用户应该只拥有访问特定数据表的权限,而不是整个数据库的访问权限。
8、安全编码实践:在开发过程中,应采取安全编码实践,避免一些常见的安全漏洞。例如,禁止使用非安全的文件操作函数,如eval、exec等;不暴露系统和框架的详细错误信息,以防攻击者利用这些信息进行攻击。
9、安全框架和工具:选择适合的安全框架和工具来加强网站的安全性。安全框架和工具可以提供许多防御机制,如输入过滤、错误处理、访问控制等。开发者可以利用这些工具来规避一些常见的安全风险。
本文至此结束,不足之处敬请批评指正。