# 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**: 2026-02-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # awscan_api ## 📌 项目介绍 `awscan_api` 是一个基于 Flask 的漏洞扫描器 API 服务,配合多个独立部署的扫描器实例,实现任务的下发、任务状态查看与漏洞数据统一管理。 > 支持三种任务模式: --- > - **comp 模式[输入公司名]** , > - **batch_api 模式[输入区域站点id]** > - **murl 模式[输入url列表]** --- > 支持两种扫描任务: > 1. 常规漏洞扫描。调用扫描引擎,充分扫描已有资产的漏洞。 > 2. 1day漏洞扫描。针对新发现的1day漏洞进行大批量poc验证。 ## 🛠️ 系统架构 ![系统架构图](./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 app.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\"}]}]]" } ] } ``` ### 📋 使用1day漏扫模式下发任务(调用新的api接口,传入vul_id信息) - vul_id: 与 poc yaml模版中的 id必须完全一致 - pocType: 指定这是主机类扫描[host]的poc,还是网站类[url]扫描的poc #### 创建一个新的 1day_comp 扫描任务 ```http POST http://localhost:46130/api/create_task/1day_comp Content-Type: application/json { "content": "浙江万丰企业集团公司 金富春集团有限公司 杭州双鹏装饰工程有限公司 杭州明南教育科技有限公司 浙江出版集团数字传媒有限公司 杭州翼创科技淘宝信息技术店 杭州零境空间科技有限公司 杭州尚辰网络科技有限公司 杭州天音计算机系统工程有限公司 杭州时代广播音响设备有限公司 杭州启圣自动化设备有限公司 杭州市江西吉安商会 杭州乐刻文化传媒有限公司 杭州海贝科技有限公司 杭州多米粒科技有限公司", "scanner_name": "awscan", "vul_id": "CVE-2024-12345", "pocType": "host" } ``` #### 创建一个新的 1day_batch_api 扫描任务 ```http POST http://localhost:46130/api/create_task/1day_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": "awscan", "vul_id": "CVE-2024-12345", "pocType": "url" } ``` #### 创建一个新的 1day_murl_api 扫描任务 ```http POST http://localhost:46130/api/create_task/1day_murl_api Content-Type: application/json { "urls": "https://gitee.com https://www.baidu.com/ https://example.com https://test-site.org", "scanner_name": "awscan", "vul_id": "CVE-2024-12345", "pocType": "host" } ``` ### 📥 下载漏洞数据(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 插件测试接口。