本工具仅供与学习或合法渗透测试,使用时请遵守中华人民共和国网络安全法:http://www.gov.cn/xinwen/2016-11/07/content_5129723.htm
如果您在使用本工具的过程中存在任何非法行为, 或造成了任何后果, 您需自行承担相应责任, 我们将不承担任何法律及连带责任。
vulcat可用于扫描web端漏洞(框架、中间件、CMS等), 发现漏洞时会提示目标url和payload, 使用者可以根据提示 对漏洞进行验证并进一步利用。
简单来说,vulcat可以用于扫描框架漏洞,例如ThinkPHP等;当扫描出漏洞时,将会返回漏洞所在url以及相应数据,你可以访问该url验证漏洞,或配合Burp进行深度利用。
接下来将会介绍vulcat的使用,以及它的各个参数
本工具基于python3开发,电脑上需要提前安装python3
https://www.python.org/downloads/
git clone https://github.com/CLincat/vulcat.git
(本文章的附件里面也有)
下载完成之后进行解压,进入vulcat文件夹,将会看见以下文件
接下来在当前文件夹打开命令行,输入以下命令安装一下python第三方库
由于各个计算机配置不同,命令也会有所不同,以下5条命令都可以尝试一下,一条不行就换下一条:
pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple
pip3 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple
python -m pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple
python3 -m pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple
py -3 -m pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple
使用pip,安装install,指定文件-r,指定镜像源-i(默认使用的是国外的镜像源,下载速度很慢,我这里指定了国内的阿里云镜像源,快很多)
安装好之后,在命令行运行以下命令,即可看到vulcat的提示信息
由于各个计算机配置不同,命令也会有所不同,以下3条命令都可以尝试一下,一条不行就换下一条:
python vulcat.py
python3 vulcat.py
py -3 vulcat.py
输入以下命令,可以查看vulcat的帮助信息,你将看到vulcat支持的所有参数,接下来我们会一个一个讲解
python vulcat.py -h
python vulcat.py --help
输入以下命令,可以查看vulcat的版本信息,当前vulcat为1.1.0版本
python vulcat.py --version
输入以下命令,可以查看vulcat支持扫描的所有漏洞信息,最底下的数字是统计数量
python vulcat.py --list
如何使用vulcat指定url并进行扫描
输入以下命令,可以对一个url进行扫描
python vulcat.py -u https://www.example.com/
python vulcat.py --url https://www.example.com/
扫描大致分为5个过程:
WAF检测:vulcat目前支持阿里云盾、腾讯云盾等WAF的检测
当vulcat检测到目标疑似存在WAF时,将会给出以下提示,并征求用户的意见,是否继续扫描
如果用户输入了n或者no,vulcat会跳过当前url,不对其进行扫描(n和no不区分大小写)
Web框架指纹识别:vulcat目前支持二十个框架的漏洞扫描,其中80%的框架具备指纹识别功能
安全漏洞扫描:这个没什么好说的了吧
指定一个文件,vulcat可以读取每一行的url,实现多个目标一起扫描
python vulcat.py -f url.txt
python vulcat.py --file url.txt
递归扫描url的每层目录,该参数不用指定参数值,指定目标后,直接写上-r或—recursive即可
python vulcat.py -u https://www.example.com/ -r
python vulcat.py -u https://www.example.com/ --recursive
python vulcat.py -f url.txt --r
python vulcat.py -f url.txt --recursive
我们来看看-r的效果,咋一看,好像没什么效果
但是,如果url有多层目录的时候:
-r/—recursive参数就会将每层目录都扫描一遍,假如有一个漏洞存在/qwe/目录下,但是你图方便,只扫描了/qwe/asd/zxc/目录,那你就错过了这个漏洞,-r参数可以帮你解决这个问题
如果你扫描到一半,想退出、暂停、终止扫描并查看结果时,该怎么操作呢?
你可以在指纹识别,或漏洞扫描的过程中,按下键盘上的Ctrl+C,此时扫描将会暂停,并要求用户输入(不区分大小写)
如果你输入q或quit,将会直接退出扫描
如果你输入c或continue,将会继续扫描
如果你输入n或next,将会跳过当前扫描,进行下一个扫描
如果你输入wq或sava and exit,将会保存现有的扫描结果,终止运行,等待现有的线程结束后,将会输出扫描结果
如果你按了一次Ctrl+C之后,再按一次Ctrl+C,和输入q/quit是一样的效果。当然,也有可能会报错误:
此类参数可以启用或禁用一些功能
禁用waf检测,如果你觉得不需要waf检测功能,你可以将其禁用
禁用安全漏洞扫描,如果你不想进行漏洞扫描,只想进行WAF检测和Web框架指纹识别,那么你可以禁用漏洞扫描
yes/no的选项不需要用户输入,使用默认选项。例如WAF检测的时候,如果检测出WAF,那么会要求用户输入yes或no,否则扫描将会一直停在这里,如果你觉得太繁琐,可以使用—batch参数,vulcat将会帮你选择默认选项
如果你想“禁用Web框架指纹识别”,或者只想扫描“某个框架的多个漏洞”或“某个框架的1个漏洞”,你可以使用以下两个参数
看下面这个页面,是不是很像ThinkPHP(把很像去掉,就是)vulcat默认情况会进行指纹识别,但是人家直接把框架拍你脸上了,你还识别个嘚
可以看到,vulcat并没有进行指纹识别这一步操作,而是直接进行了漏洞扫描
如果你不想指纹识别,也不想自己去看框架,可以指定-a all,vulcat将会直接使用所有POC
如果指定了一个vulcat不支持的框架名称,则会提示错误
如果你想查看vulcat支持的框架名称,可以使用-h/—help参数进行查看
上面的-a参数是指定框架,但是扫描了5个漏洞,如果你只想扫描单个漏洞,该如何做呢?
先使用-a参数指定一个框架名称,然后使用-v参数指定一个漏洞编号即可
如果你输入了错误的框架名称,或错误的编号:
漏洞编号在哪里查看呢?记得上面教过的—list参数吗,Vul_id那一列就是vulcat支持的漏洞编号了
这时可能有人会问了,为什么有些漏洞没有编号呢?显示的是“None”
有一些参数,可以根据自身需要进行更改
线程参数,数字越大,vulcat每秒发送数据包的数量就越多,扫描的也越快
如果你想扫描的慢一点,例如这个网站非常脆弱,扫描稍微快一点,这个网站就会崩掉,你除了调低-t参数,还可以使用—delay参数
超时时间,例如vulcat使用ThinkPHP的漏洞POC去访问了一个网站,如果这个网站特别卡,超过了—timeout设定的时间,那么vulcat就会直接认为 这个网站不存在ThinkPHP的漏洞
可以指定http/https代理,通常配合Burp使用
配合Burp:
自定义User-Agent头,应该都懂吧
自定义Cookie,例如有的漏洞需要登录后台才能发现,那么你可以指定Cookie然后扫描
vulcat日志,如果你想查看vulcat的运行状态,你可以使用这个参数,并指定一个数字(1-6之间,默认为1)
1、 vulcat默认就是—log 1,没啥好看的
2、 —log 2,日志2级: 框架名称+漏洞编号+状态码
3、 —log 3,日志3级: 2级内容+请求方法+请求目标+POST数据
vulcat默认情况下,如果扫描出漏洞,只会在命令行中显示结果,不会保存到文件中,你可以使用以下参数,将结果保存到文件中(注意:保存结果时,会在文件末尾追加,不会覆盖整个文件的内容)
如果扫描出漏洞,则保存结果至.txt文件中
如果扫描出漏洞,则保存结果至.json文件中
同—output-text参数,没有漏洞时不会生成.json文件
打开/vulcat/lib/initial/language.py
我们经常需要使用dnslog来配合无回显漏洞的验证,例如dnslog注入,没有回显的RCE等。vulcat目前支持的dnslog平台有2个:dnslog.cn和ceye.io
—dns会优先使用ceye.io,当ceye.io不可以使用时,将会自动切换为dnslog.cn
你也可以直接指定某个API:
如果你想使用ceye.io,可以指定为—dns ceye
1、 打开网页http://ceye.io/
2、 点击Login进行登录,如果没有账号的话先注册一个
3、 登录之后,会看到如下页面,主要的东西有2个:“ceye域名”和“Api Token”
4、 打开/vulcat/lib/initial/config.py,并将你的域名和Token填入
5、 再次进行扫描,—dns参数会优先使用ceye,所以不用特意指定
6、 查看结果,如果存在漏洞,则你的DNS Query或者HTTP Request里面会有记录,就和dnslog.cn一样
你觉得vulcat自带的POC不太好用?想自己写POC?没问题,vulcat已经为你准备好了模板,你只需要填写相应的选项,就能写出一个漏洞POC(最好有一定Python基础)
1、 打开/vulcat/payloads/
2、 寻找你想写的漏洞
3、 复制demo.py并更改文件名
4、 打开Discuz.py,这里我使用了微软的vsCode编辑器+Better Comments插件
如果你的POC想给更多人使用,填写该信息会方便其他人查看、了解POC的信息(如果你闲麻烦也可以不写)
vulcat已经提前引入了需要用到的python库,如果你需要使用别的库,可以自行引入。如果不需要,此处不用理会,默认即可
填写该漏洞需要用到的Payload
此处有关POC的运行,以及发现漏洞时回显的信息
11:请求方式,根据实际填写
另外,函数的注释里面,如果你想填东西的话,可以把漏洞的描述填进去,方便查看POC信息:
根据你的Payload执行的命令,来判断漏洞是否存在;此处还预定义了回显信息,你可以根据需要进行更改
另外,还要定义回显的信息,格式如下
如果是字符类型,例如 ‘键’: ‘值’
回显方式为 key: value
键: 值
如果是列表类型,例如 ‘键’: [‘值1’, ‘值2’, ‘值3’]
回显方式会以空格分隔每个值 key: value1 value2 value3
键: 值1 值2 值3
如果是字典类型,例如 ‘主键’: {‘键1’: ‘值1’, ‘键2’: ‘值2’}
回显方式会在每行排列一个键值,看下面
主键:
键1: 值1
键2: 值2
键3: 值3
我这里返回了以下信息
此处使用来添加POC扫描线程的
POC编写好之后,需要在vulcat中引入你的POC,就像引入python库一样,引入之后即可使用该POC进行漏洞扫描
根据上方的提示,引入我们的Discuz.py脚本里面的discuz
至此,你的POC就彻底完成了
来测试一下我们编写的POC
你可以更改vulcat的文件,拥有更多自定义的功能
你发现目标url存在WAF,但是vulcat没有收录?你可以自行添加
你发现目标url是某个很常见的框架,但是vulcat识别不出来?你可以自行添加
Web框架指纹(正则表达式)如果不会正则…建议百度学习一下
我们上面不是添加了一个Discuz的POC吗,我们现在把指纹也给加上
扫描试一下效果,成功
我这里使用的是powershell命令行,感觉颜色更好看,如果想使用的话,按住 键盘的Shift+鼠标右键 ,然后选择“在此处打开命令行窗口”或者“在此处打开powershell窗口”之类的,就可以在当前目录打开一个powershell命令行
语言…就是语言
你可以将自己的漏洞加入—list的列表当中
也是复制粘贴的事
更多功能可以自行发掘,这里就不再讲解了
vulcat参考了以下开源项目:
vulcat是我编写的第一款工具,如果存在问题还请大家多多谅解。
如果在使用过程当中遇到什么疑问、Bug、需要改进或增加的功能,都可以在社区私信我,或者在Github上面提交相关内容,我会一个个去看的,能回复的我都会尽量回复…吧。
都看到这里了,不去Github给我的vulcat点一颗星星吗:
https://github.com/CLincat/vulcat
不要下次一定
感谢大家的观看,祝大家心想事成,万事如意。
什么,你说你没看?直接滑到最底部了?我给你来几拳
vulcat保持长期更新,你可以时不时上Github查看有无新版本,说不定就有你需要的POC呢。
用户名 | 金币 | 积分 | 时间 | 理由 |
---|---|---|---|---|
Track-劲夫 | 1000.00 | 0 | 2022-07-08 14:02:10 | 一个受益终生的帖子~~ |
打赏我,让我更有动力~
vulcat-v1.1.0.zip 文件大小:0.336M (下载次数:10)
© 2016 - 2024 掌控者 All Rights Reserved.
1198950962
发表于 2022-7-10
tql
评论列表
加载数据中...
花海
发表于 2022-7-26
大佬,请收下我的膝盖
评论列表
加载数据中...
veritas
发表于 2023-1-14
牛
评论列表
加载数据中...
chase
发表于 12个月前
大佬,请收下我的膝盖
评论列表
加载数据中...