2024.9.4
目录
今日作业:
在vps安装docker和docker-compose
2. 上课涉及的vulhub中的漏洞,全部复现,同时说明漏洞成因
3. 总结RCE漏洞的原理和利用条件及解决方案
1.docker
安装
命令:
apt install docker.io -y
apt-get install docker-compose
安装成功查看版本如下
docker部署pikachu
搜索pikachu镜像
下载pikachu镜像
下载完成后,查看镜像
配置端口
即可访问
2.安装vulhub
主机拖到虚拟机
解压
3.RCE漏洞
tomcat
按照以下步骤进行
弱口令
配置端口
打开页面,输入用户名密码,都是tomcat
上传shell
编写shell
打包成压缩包
准备上传
上传shell
复制shell地址,蚁剑连接
漏洞成因
1.弱口令:管理员没改初始密码,过于简单,容易破解。
2.上传shell:在部署war包后tomcat默认会将war包中的项目部署,没有过滤检测。
weblogic
启动容器
打开网址进入
Oracle WebLogic Server Administration Console
http://120.26.231.217:7001/console
弱口令
账号:weblogic 密码:Oracle@123
任意文件读取
前台存在任意文件读取漏洞,在不知道登录密码的情况下可通过此漏洞读取weblogic加密后的密码文件,在通过破解密码获得登录密码。
路径:http://121.199.162.86:7001/hello/file.jsp?path=
成功下载敏感文件
读取密码文件
weblogic密码使用AES(老版本3DES)加密,对称加密可解密,只需要找到用户的密文与加密时的密钥即可。这两个文件均位于base_domain下,名为SerializedSystemIni.dat和config.xml,在本环境中为./security/SerializedSystemIni.dat和./config/config.xml(基于当前目录/root/Oracle/Middleware/user_projects/domains/base_domain)。
抓包SerializedSystemIni.dat
http://121.199.162.86:7001/hello/file.jsp?path=security/SerializedSystemIni.dat
将响应文本保存为SerializedSystemIni.dat
抓包config.xml
http://121.199.162.86:7001/hello/file.jsp?path=config/config.xml
然后使用靶场自带的解密工具解密,根据前面下载的密文和密钥即可解密Oracle@123
漏洞成因
1.弱口令:管理员没改初始密码,过于简单,容易破解。
2.读取文件:对用户输入内容没有进行限制与过滤。
apache
换行解析
漏洞复现
启动漏洞docker环境
cd /vulhub/httpd/CVE-2017-15715
启动服务容器
docker-compose build
docker-compose up –d
查看源码
上传php
因为解析PHP时,.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略,所以在抓包后,在二进制页面的evil.php后缀后面插入一个x0A,即换行符的十六进制ASCII码
上传成功
漏洞成因
(上面已经分析)解析PHP时,.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。
druid RCE
漏洞复现
进入Druid console控制台界面,点击Local disk
抓包
漏洞成因
在druid低版本中,经过身份验证的用户发送恶意请求,利用Apache Druid漏洞可以执行任意代码。攻击者可直接构造恶意请求执行任意代码,控制服务器。
4.RCE
原理
RCE(远程代码执行)漏洞是指攻击者能够在目标系统上执行任意远程代码。这种漏洞通常是由于应用程序对用户输入没有进行充分的验证和过滤,导致攻击者可以通过构造恶意输入,让应用程序在执行过程中执行攻击者指定的代码。具体来说,当应用程序将用户输入的数据作为代码的一部分执行,或者将用户输入的数据用于执行系统命令时,如果没有对这些输入进行严格的验证和过滤,就可能引发RCE漏洞。
利用条件
存在未验证的用户输入:应用程序需要接收并处理用户输入的数据,且这些数据在后续的处理过程中被用于执行代码或命令。
不安全的函数或方法:应用程序中使用了不安全的函数或方法来处理用户输入,如eval()
、system()
、exec()
等,这些函数或方法可以直接执行字符串作为代码或命令。
权限控制不当:如果应用程序在执行远程代码时没有进行适当的权限控制,攻击者可能会获得比预期更高的权限,从而执行更危险的操作。
解决方案
输入验证与过滤:
-对所有用户输入进行严格的验证和过滤,确保输入数据符合预期的格式和范围。
-使用白名单来限制允许输入的内容类型,避免使用黑名单,因为黑名单可能无法覆盖所有潜在的恶意输入。
使用安全的函数和API:
-避免使用能够执行字符串作为代码或命令的函数,如eval()、system()等。
-如果必须使用这些函数,请确保对输入进行了严格的验证和过滤,并限制执行权限。
权限管理:
-实施最小权限原则,确保应用程序仅具有执行其任务所必需的最小权限。
-对于需要执行敏感操作的功能,使用适当的权限控制机制来限制访问。
安全编码实践:
-遵循安全编码标准和最佳实践,如使用安全的编程语言和框架。
-对代码进行定期的安全审查和测试,以发现和修复潜在的安全漏洞。
安全更新和补丁:
-及时关注并应用应用程序及其依赖组件的安全更新和补丁,以修复已知的安全漏洞。
入侵检测和响应:
-部署入侵检测系统(IDS)和入侵防御系统(IPS)来监控和阻止潜在的恶意活动。
-制定应急响应计划,以便在发生安全事件时能够迅速响应并减少损失。