一、前述
周二责任人,都下午四点了,本来觉得是风平浪静的一天,友商发了一个Apache Nutch的XXE,讲真,这个这个组件又是一无所知,先安装吧
漏洞版本是小于1.18,我这里安装版本为1.17
http://archive.apache.org/dist/nutch/1.17/apache-nutch-1.17-bin.tar.gz
安装很简单,直接tar -zxvf 进入bin目录,执行脚本,服务即可启动,但是发现好像启动没那么傻瓜,这么多参数
没办法,还是去看官方文档吧,先搞清楚这是个什么组件,然后再看官方文档
二、Apache Nutch 简介
Nutch 是一个开源Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬虫。Nutch是基于Lucene的。Lucene为Nutch提供了文本索引和搜索的API。很熟悉的一个组件,后来在官方文档中还提到了Solr,看到这个我可就不困了,这玩意可是看了好久的。不过Solr是需要单独安装的,因为只是看一个漏洞所以这里暂时先放下。
官方文档:https://cwiki.apache.org/confluence/display/NUTCH/Home
三、漏洞复现
1.Diff 寻找漏洞点
这里选取最为临近的两个版本,1.17和1.18进行比较,漏洞点很快就可以找到
典型的XXE修复代码
2.寻找触发点——一些坑但是不得不踩的坑
github下载源码,整体看下这个类
https://github.com/apache/nutch/archive/release-1.17.zip
蛋疼,没有地方调用,且它最后给出了一个main方法
盲猜只能以命令行方式调用,那我们返回启动脚本,我的关注点放在了这三个参数上
plugin是可以调用一个class的main方法,webapp可以启动一个web服务,第三个稍后说
现在就感觉是plugin+webapp?先启动试下
随便点一下抓包,没有什么直接上传的地方,但是有个报错,No running instances found!
既然没有,我们就新建一个
新建好后访问主页报错
翻阅官方文档,需要启动server
算是大概跑起来了
注意力回到plugin,直接执行plugin。根据提示报错信息 构造参数
Usage: PluginRepository pluginId className [arg1 arg2 ...
翻阅官方文档plugin是需要加载的,修改配置文件nutch-site.xml 重启服务
plugin加载成功
但是......路走到这里就死了,plugin里并没有找到触发点,因为plugin里面没有任何地方调用了DmozParser
3.Finally Success
既然一开始猜测的是本地命令行触发,就去看启动脚本了。而且还记得刚才得启动参数里最后一个CLASSNAME了么
怎么调用一目了然了
./nutch org.apache.nutch.tools.DmozParser
成功调用到这个类,直接传入我们的xml文件即可
4.尝试远程触发
总想着应该还可以远程触发,因为查看web服务的url:http://192.168.33.128:8080/wicket/bookmarkable/org.apache.nutch.webui.pages.crawls.CrawlsPage?11
后面是跟的全类名,感觉可以直接调用到我们想要的类,启动下调试环境,讲应用中的lib导入源码包
修改启动文件如下,添加调试参数
idea配置如下:
成功调试:
后面留个坑吧,因为组件整体跟Solr关系比较密切,后面一起看,溜了溜了
四、参考链接
https://cwiki.apache.org/confluence/display/NUTCH/Home
https://en.wikipedia.org/wiki/Apache_Nutch
五、早安,北京
原文始发于微信公众号(赛博少女):Apache Nutch XXE (CVE-2021-23901)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论