<h1 align="center" >🍉Sec-Tools</h1>
<p align="center">
<a href="https://github.com/jwt1399/Sec-Tools"><img alt="Sec-Tools" src="https://img.shields.io/github/stars/jwt1399/Sec-Tools.svg"></a>
<a href="https://github.com/jwt1399/Sec-Tools"><img alt="Sec-Tools" src="https://img.shields.io/github/forks/jwt1399/Sec-Tools.svg"></a>
</p>
<p align="center"><span>如果你觉得本项目还不错的话,请给一个❤️Star❤️吧,感谢感谢🤝</span></p>
<h5 align="center"> Gitee:https://gitee.com/jwt1399/Sec-Tools</h5>
<h4 align="center" >
<a href="https://github.com/jwt1399/Sec-Tools#%E9%A1%B9%E7%9B%AE%E4%BB%8B%E7%BB%8D">项目介绍 -</a>
<a href="https://github.com/jwt1399/Sec-Tools#%E9%A1%B9%E7%9B%AE%E9%A6%96%E9%A1%B5">详细介绍 -</a>
<a href="https://github.com/jwt1399/Sec-Tools#%E7%89%88%E6%9C%AC%E5%8F%98%E6%9B%B4%E8%AE%B0%E5%BD%95">版本记录 -</a>
<a href="https://github.com/jwt1399/Sec-Tools#%E9%A1%B9%E7%9B%AE%E9%83%A8%E7%BD%B2">项目部署 -</a>
<a href="https://github.com/jwt1399/Sec-Tools#to-do">TODO - </a>
<a href="https://github.com/jwt1399/Sec-Tools#%E8%B5%9E%E5%8A%A9">赞助</a>
</h4>
## 声明
因近期多人反应有人将此项目作为商品进行售卖,特作如下声明!!!
- 1.本项目版权归本作者所有,未授权不能商用,不能作为盈利使用;
- 2.本项目仅供学习,测试,交流使用,勿用于非法用途;
- 3.未经本作者允许不得转载本项目内容,否则将视为侵权;
- 4.转载或者引用本项目内容请注明来源及作者,否则将视为侵权;
- 5.请使用者遵守《中华人民共和国网络安全法》,勿用于非授权测试,如作他用所承受的法律责任一概与作者无关,下载使用即代表使用者同意上述观点;
- 6.对于不遵守此声明或者其他违法使用本项目内容者,本人依法保留追究权等。
## 🌱项目介绍
### 系统简介
本项目命名为**Sec-Tools**,是一款基于 **Python-Django** 的**多功能 Web 应用渗透测试系统**,包含**漏洞检测、目录识别、端口扫描、指纹识别、域名探测、旁站探测、信息泄露检测**等功能。
### 项目功能
![](https://cdn.jsdelivr.net/gh/jwt1399/cdn//img/20210617154357.png)
本系统通过`旁站探测`和`域名探测`功能对待检测网站进行资产收集,通过`端口扫描`、`指纹识别`、`目录识别`和`信息泄露检测`功能对待检测网站进行信息收集,通过收集的信息分析评估网站存在哪些安全隐患,然后使用`漏洞检测`功能揭示网站存在的漏洞以及危害等级并给出修复建议。通过这一系列的步骤,可以对Web应用进行全面检测,从而发现网站存在的安全隐患,因此用户可以针对相应的网络威胁做出应急响应,进而提升站点的安全性。
### 相关技术
| 名称 | Python | Django | SQLite | ECharts | Tabler | Layer | Docsify | SimpleUI | Boostrap Table |
| -------- | --------- | --------- | ---------- | --------- | --------- | -------------- | ---------- | ------------ | --------- |
| **版本** | **3.7.0** | **3.1.4** | **3.35.2** | **5.0.1** | **1.0.0** | **3.2.0** | **4.11.6** | **2021.1.1** | **1.18.2** |
## 项目首页
首页采用 ECharts 对漏洞扫描的漏洞等级、指纹识别组件、安全导航数据做了可视化图表展示,图表的风格没有统一,凑合看吧😂
![仪表盘页](https://cdn.jsdelivr.net/gh/jwt1399/cdn//img/20210618105902.png)
## 身份验证
> 新用户想要使用系统功能必须要注册登录,游客只能访问部分页面。本系统有普通用户和超级用户。普通用户可以使用本系统的所有功能,但是不能登录后台管理系统。超级用户不仅可以使用所用功能还可以登录后台管理系统中所有的用户权限和数据。
**设计思路:** 登录和注册模块在 Django 自带的认证模块的基础上进行实现,因此在`后台-->用户与授权`就可对注册用户进行权限分配和相应管理。我们使用 Django 自带的数据库 SQLite 来存放账户信息,重构了数据库表`auth_user`表,增加了用户邮箱字段,auth_user 中密码字段是加了 salt 的 sha256 值再经过 base64 编码之后的值,保障了用户的信息安全。
| 登录页 | ![](https://cdn.jsdelivr.net/gh/jwt1399/cdn//img/20210421020945.png) |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| 注册页 | ![](https://cdn.jsdelivr.net/gh/jwt1399/cdn//img/20210421001457.png) |
重设密码功能调用第三方包 `django-password-reset` 进行实现
| 步骤一 | ![](https://cdn.jsdelivr.net/gh/jwt1399/cdn//img/20210421020757.png) |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| 步骤二 | ![](https://cdn.jsdelivr.net/gh/jwt1399/cdn//img/20210421020803.png) |
## 漏洞检测
> 该模块主要是对目标Web系统进行安全漏洞扫描,包括SQL注入、跨站脚本攻击(XSS)、弱密码、中间件漏洞。中间件漏洞扫描包括对Weblogic、Struts2、Tomcat 、Jboss、Drupal、Nexus的已知漏洞进行检测,用户提供目标URL并选择CVE漏洞编号。
### 设计思路
该模块的全扫描、SQL注入漏洞扫描、XSS漏洞扫描、弱口令扫描、仅爬取是调用 AWVS API 进行实现。中间件漏洞扫描是基于脚本模拟网络请求实现。根据漏洞形成的原因,生成一些测试 payload 发送到目标系统,再由返回的状态码和数据来判断payload是否有效。
### 实现效果
![漏洞扫描](https://cdn.jsdelivr.net/gh/jwt1399/cdn//img/20210617161157.png)
点击扫描目标跳转到漏洞结果页:
![漏洞结果](https://cdn.jsdelivr.net/gh/jwt1399/cdn//img/20210619102157.png)
再点击扫描目标的跳转到漏洞详情页:
![漏洞详情](https://cdn.jsdelivr.net/gh/jwt1399/cdn//img/20210619102149.png)
### 详细实现
#### 添加扫描目标
漏洞扫描最开始的工作是添加扫描目标到 AWVS 的扫描队列中。AWVS 提供了一个 API 接口: `/api/v1/targets`,使用 POST 请求, POST 请求参数为:`{"address":"XXXX.XXXX.XXXX","description":"xxxx","criticality":"10"}`。
当目标添加成功后会返回一个 target_id ,这个值在所有扫描中是唯一的。通过 target_id 判断目标是否添加成功。添加完目标后并没有开始扫描,需要使用另一个 API 接口:`/api/v1/scans`,使用 POST 请求,传入刚刚添加目标生成的 target_id 和用户选择的扫描类型,POST 请求参数为:`{"target_id":"xxxxxxx","profile_id":"xxxxxxx"}`。开始扫描将会返回状态码200。
使用 Python 的第三方库 requests 来实现 API 接口访问。核心代码如下:
```python
#Target: POST请求/api/v1/targets
try:
#data包含目标URL和类型,auth_headers包含API_KEY
response = requests.post(targets_api, auth_headers, data, False)
result = response.json()
target_id = result.get('target_id')
return target_id
except Exception:
return None
#Scan: POST请求/api/v1/scans
try:
response = requests.post(scan_api, data, auth_headers, False)
status_code = 200
except Exception:
status_code = 404
return status_code
```
API 接口已经实现,还需要获取用户输入的数据。由于本系统是基于 Django 实现的,所以使用 HTML+JavaScript 提供用户界面和接受和发送数据到后端,后端使用 Python 实现。首先在 **urls.py** 里面加入添加访问路径
`path('vuln_scan', views.vuln_scan, name='vuln_scan')`
在 **views.py** 中定义 `vuln_scan()` 函数接收前端