# awscan_api **Repository Path**: composer-liu-ming/awscan_api ## Basic Information - **Project Name**: awscan_api - **Description**: awscan扫描器API接口 - **Primary Language**: Python - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-04-10 - **Last Updated**: 2025-06-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # awscan_api ## 📌 项目介绍 `awscan_api` 是一个基于 Flask 的漏洞扫描器 API 服务,配合多个独立部署的扫描器实例,实现任务的下发、任务状态查看与漏洞数据统一管理。 > 支持两种任务类型:**comp 模式** 和 **batch_api 模式**,适用于不同业务场景下的批量扫描需求。 ## 🛠️ 系统架构 ![系统架构图](./images/overview.jpg "系统总览图") ## 🚀 快速开始 ### 1. 克隆项目 ```bash git clone https://gitee.com/composer-liu-ming/awscan_api.git ``` ### 2. 准备多个扫描器实例 ```bash cd awscan_api git clone https://gitee.com/awsecurity/awscan.git awscan1 git clone https://gitee.com/awsecurity/awscan.git awscan2 git clone https://gitee.com/awsecurity/awscan.git awscan3 ``` 保持如下目录结构: ```bash ./awscan_api ├── awscan1 ├── awscan2 └── awscan3 ``` ### 3.安装依赖 - 第一次使用扫描器 ```bash [root@awscan_api]$ cd awscan1/Python-3.9.17&&chmod +x Install_py39.sh&&./Install_py39.sh&&python3.9 - m pip install -r ../requirements.txt ``` - 安装过扫描器(仅安装flask即可) ```bash [root@awscan_api]$ pip install -r requirements.txt ``` ### 4.启动服务(默认46130端口) ```bash python main_api.py ``` 启动后将在当前目录下创建 tasks.db 数据库用于任务存储。 ## 📡 接口说明 ### 🔍 获取可用扫描器列表 ```http request GET /api/scanners ``` 示例 ```bash curl http://localhost:46130/api/scanners ``` 响应 ```http request - status 表示扫描器状态,idle表示空闲,busy表示繁忙 { "scanners": [ { "name": "awscan", "status": "busy" }, { "name": "awscan1", "status": "busy" } ], "status": "success" } ``` ### 📝 创建 Comp(基于公司名) 模式任务 示例:调用 awscan1扫描器,执行基于公司名的漏扫任务,传入公司名(一行内容,空格分隔) ```http POST /api/create_task/comp Content-Type: application/json { "content": "浙江XX集团公司 XX集团有限公司 杭州XX有限公司", "scanner_name": "awscan1" } ``` 带上限制扫描模块include_module 逗号分隔(batch_api模式同参数);可选模块:afrog, Unauthorized, extract_login, Could_att, nuclei, dirsearch, spf ```http request POST http://localhost:46130/api/create_task/comp Content-Type: application/json { "content": "浙江XX团公司 XX集团有限公司", "include_module" : "afrog,Unauthorized", "scanner_name": "awscan1" } ``` ### 📋 创建 Yaml 扫描任务(batch_api 模式) 示例:调用 awscan2扫描器,执行基于站点id的batch_api漏扫任务,json格式的数据 ```http POST /api/create_task/batch_api Content-Type: application/json { "scanInfo": [ { "siteid": 100001, "sitename": "AA区", "dbname": "default", "companyType": "上市公司,国有企业", "scan": false }, { "siteid": 100002, "sitename": "BB区", "dbname": "default", "companyType": "上市公司,机关单位", "scan": false }, { "siteid": 100057, "sitename": "萧山区", "companyType": "上市公司", "dbname": "default", "scan": true } ], "scanner_name": "awscan2" } ``` ### 📋 创建 vul_api 扫描任务(vul_api 模式) 示例:调用 awscan2扫描器,执行基于站点siteid和漏洞vulid的漏扫任务,json格式的数据 ```http POST /api/create_task/vul_api Content-Type: application/json { "siteid": "100130", "vulid" : "142239", "scanner_name": "awscan" } ``` ### 📋 创建 mutil_url 扫描任务(murl_api 模式) 示例:调用 awscan1扫描器,执行多个url(空格分隔)的漏扫任务,json格式的数据 ```http POST /api/create_task/murl_api Content-Type: application/json { "urls": "https://gitee.com https://www.baidu.com/", "scanner_name": "awscan1" } ``` ### 任务下发api响应 ```http { "message": "任务已提交后台执行", "status": "success", "task_id": "e1f8ad61-f771-4a6b-9c95-6206a2ab3b40" } ``` ### 📄 获取所有任务信息 ```http GET /api/tasks ``` 示例: ```bash curl http://localhost:46130/api/tasks ``` ```http request - exec_params 执行的参数(只取第一个txt/api站点 名称) - process_rate 表示完成率,process_rate=1时表示任务完成 - scan_mode 表示创建任务的扫描模式,comp,batch_api 两种 - status 表示当前任务扫描状态,0 :未启动,1:扫描中,2:扫描完成 - task_desc 表示当前扫描的任务名称 - vul_count 表示当前扫描出的漏洞信息(与scan_output中 json格式一致) { "status": "success", "tasks": [ { "exec_params": "awscan/浙江万丰企业集团公司.txt", "process_rate": 0.47058823529411764, "scan_mode": "comp", "status": 1, "task_desc": "浙江万丰企业集团公司.txt", "task_id": "e1f8ad61-f771-4a6b-9c95-6206a2ab3b40", "vul_count": "[[{\"poc_id\": \"SPF邮件伪造漏洞\", \"vul_name\": \"SPF邮件伪造漏洞\", \"severity\": \"high\", \"target\": \"bookdna.cn\", \"vul_path\": \"bookdna.cn\", \"vul_description\": \"攻击者可以利用SPF漏洞伪造合法的发件人地址,从而进行欺诈或钓鱼攻击\", \"poc_result\": [{\"request\": \"swaks --body \\\"Attackbookdna.cn\\\" --header \\\"Subject:Hackerbookdna.cn\\\" -t zhangsan@bookdna.cn -f \\\"test@bookdna.cn\\\"\", \"response\": \"成功发送邮件 250 Mail OK queued as ...\"}]}, {\"poc_id\": \"SPF邮件伪造漏洞\", \"vul_name\": \"SPF邮件伪造漏洞\", \"severity\": \"high\", \"target\": \"mhuoba.com\", \"vul_path\": \"mhuoba.com\", \"vul_description\": \"攻击者可以利用SPF漏洞伪造合法的发件人地址,从而进行欺诈或钓鱼攻击\", \"poc_result\": [{\"request\": \"swaks --body \\\"Attackmhuoba.com\\\" --header \\\"Subject:Hackermhuoba.com\\\" -t zhangsan@mhuoba.com -f \\\"test@mhuoba.com\\\"\", \"response\": \"成功发送邮件 250 Mail OK queued as ...\"}]}]]" }, { "exec_params": "awscan1/浙江万丰企业集团公司.txt", "process_rate": 0.17647058823529413, "scan_mode": "comp", "status": 1, "task_desc": "浙江万丰企业集团公司.txt", "task_id": "fa4c8f8e-aece-42ec-8c25-699cf6bd4e9e", "vul_count": "[[{\"poc_id\": \"Rsync未授权\", \"vul_name\": \"Rsync未授权\", \"severity\": \"medium\", \"target\": \"217.194.134.12:873\", \"vul_path\": \"217.194.134.12:873\", \"vul_description\": \"Rsync未授权\", \"poc_result\": [{\"request\": \"217.194.134.12:873\", \"response\": \"access_successful\"}]}]]" } ] } ``` ### 📄 获取单条任务信息 ```http GET /api/task/ ``` 示例: ```bash curl http://localhost:46130/api/task/fa4c8f8e-aece-42ec-8c25-699cf6bd4e9e ``` 响应 ```http { "status": "success", "tasks": [ { "exec_params": "awscan1/浙江万丰企业集团公司.txt", "process_rate": 0.17647058823529413, "scan_mode": "comp", "status": 1, "task_desc": "浙江万丰企业集团公司.txt", "task_id": "fa4c8f8e-aece-42ec-8c25-699cf6bd4e9e", "vul_count": "[[{\"poc_id\": \"Rsync未授权\", \"vul_name\": \"Rsync未授权\", \"severity\": \"medium\", \"target\": \"217.194.134.12:873\", \"vul_path\": \"217.194.134.12:873\", \"vul_description\": \"Rsync未授权\", \"poc_result\": [{\"request\": \"217.194.134.12:873\", \"response\": \"access_successful\"}]}]]" } ] } ``` ### 📥 下载漏洞数据(ZIP 格式) 用于下载指定任务的漏洞扫描结果(`vul_count` 字段内容)。接口会从数据库中获取 JSON 数据并打包成 `data.json`,返回一个 `.zip` 文件供用户下载查看。 #### 🟢 接口请求 ```http GET /api/download_vul_json?task_id=<任务ID> ``` | 参数名 | 类型 | 是否必填 | 说明 | | --------- | ------ | ---- | ----------- | | `task_id` | string | ✅ 是 | 漏洞扫描任务的唯一标识 | ✅ 示例请求 ```http request GET /api/download_vul_json?task_id=123e4567-e89b-12d3-a456-426614174000 ``` ✅ 响应(成功) 返回一个 application/zip 类型的文件,命名为: ```shell vul_task_.zip ``` 压缩包内包含一个 UTF-8 编码的 data.json 文件,内容为任务产生的漏洞信息(嵌套的 JSON 结构)。 ⚠️ 响应(无漏洞数据) 若任务存在但无漏洞数据: ```json { "message": "无漏洞数据" } ``` ❌ 响应(异常情况) - 未提供 task_id: ```json { "error": "Missing task_id parameter" } ``` - 找不到任务: ```json { "error": "Task not found" } ``` ## ⚠️ 注意事项 切勿同时对同一个扫描器目录进行手动扫描和 API 分发任务。 例如:已经通过 API 向 awscan1 下发任务,请不要再手动执行 cd awscan1 && python3.9 xxx.py 否则会产生冲突和任务失败。 ## 🧪 示例接口文件 所有接口示例已包含在 test_main_api.http 文件中,推荐使用 IDEA + REST Client 插件测试接口。