漏洞2.0评估算法接口说明文档 郝伟 2021/10/18 [TOC]
1. 漏洞2.0管理服务器登陆信息
IP:192.168.104.102
SSH:root/huauN2021!@#$
平台:http://192.168.104.102:8999
admin/operator2021
路径:/home/project/ai_kg
2. 项目版本控制
本项目使用Git进行版本控制,代码存储于Gitee上,信息如下。
- 仓库地址: https://gitee.com/hwaust/vul_evaluation_2nd
- 主管理帐号: hwuast@126.com
3. 代码测试服务器说明
为了方便测试,代码拖回本地后,使用公司内部机 192.168.104.102 进行测试。其中根据不同人员和作用建立有以下测试目录,每个目录都配有独立的Django的运行环境。
名称 | 作用 | 存储目录 | Django地址 | Django端口 | 备注 |
---|---|---|---|---|---|
project | 项目的正式代码,确认无问题后再提交。 | /home/project |
api, doc | 8000 | 无 |
haowei | 郝伟的测试目录。 | /home/haowei |
api, doc | 8010 | 无 |
wuzhijuan | 吴脂娟的测试目录。 | /home/wuzhijuan |
api, doc | 8020 | 无 |
注意,每个链接包括两个地址,分别为接口地址和测试地址,如project为例:
- 接口地址 api:http://192.168.104.102:8000/vulEval
- 测试地址 doc:http://192.168.104.102:8000/doc
其他测试接口 |编号|作用|链接| |:----:|:----|:----| |1|变量a显示|http://192.168.104.102:8010/api/hello/| |2|变量a和strlist自加|http://192.168.104.102:8010/api/add/|
4. 关于Django的相关操作
以正式项目为例(192.168.104.102:8000),启动过程如下:
- 进入项目目录:
cd /home/project/vul_evaluation_2nd/ai_kg
- 启动Django服务,分为前台启动和后台启动两种。
- 前台启动:
python3 manage.py runserver 0.0.0.0:8000
- 后台启动:
nohup python3 manage.py runserver 0.0.0.0:8000 >> log.txt &
- 前台启动:
可以将代码简化后合并为1行:
python3 /home/project/vul_evaluation_2nd/ai_kg/manage.py runserver 0.0.0.0:8000 >> log.txt &
5. 基于 drf-yasg 的接口调试模块
为了方便接口的高度,在本项目中使用了 drf-yasg 模块,它依赖于Anaconada和Django。
5.1. 简介
本项目中所使用的三个模块如下所示:
- Anaconda3, 一个综合的Python运行环境;
- Django, 一个简单易用的Python版的Web服务;
- drf-yasg, 基于Django的接口服务
5.2. 安装过程
- 下载安装包与依赖组件到服务器上:
shell script wget https://repo.anaconda.com/archive/Anaconda3-2021.05-Linux-x86_64.sh /root/ yum install libXcomposite libXcursor libXi libXtst libXrandr alsa-lib mesa-libEGL libXdamage mesa-libGL libXScrnSaver
- 安装Anaconda3:
```shell script
sh Anaconda3-2021.05-Linux-x86_64.sh
* 按提示 询问你是否同意anaconda3的license,输入yes,回车即可 * 请求用户是否希望对Anaconda3进行初始化 输入yes,回车即可 * 环境配置: ```shell script vi /etc/profile
* 在文件的末尾加上下述代码 ```shell script export PATH=$PATH:/root/anaconda3/bin ``` * 保存退出 * 立即生效: ```shell script source /etc/profile ```
输入python3 查看python版本
添加软链接:
shell script ln -s /root/anaconda3/bin/python3 /usr/bin/python3 ln -s /root/anaconda3/bin/pip3 /usr/bin/pip3
配置Django + drf-yasg实现在线接口文档:
shell script pip3 install -i https://pypi.douban.com/simple django pip3 install -i https://pypi.douban.com/simple drf_yasg
5.3. 相关文档
关于drf-yasg的使用可以可以参见以下文档:
- drf-yasg官方文档, https://drf-yasg.readthedocs.io/en/stable/
- Django + drf-yasg实现在线接口文档-代码实测, https://www.icode9.com/content-4-980874.html
- drf-yasg 用法, https://blog.csdn.net/lmz_lmz/article/details/80986106
- 经验总结: drf-yasg接口文档几个细节的自定义方式, https://zhuanlan.zhihu.com/p/269499888
5.4. 使用方法
打开测试页面,
- 点击右下方
vulEval_create
- 点击
Try it out
- 在文本构模式中输入测试用例
- 点击
Execute
5.5. 测试用例
示例1:机器打分 输入:
{
"data": "[-1, 2, 3, 3, 3, 2, 2, 2, 2, 3, 1, 2, 1, 2, 2, 2]"
}
输出:
{
"code": 0,
"data": {
"type": 0,
"result": 2
}
}
示例2:人工打分 输入
{
"data": "[4, 2, 3, 3, 3, 2, 2, 2, 2, 3, 1, 2, 1, 2, 2, 2]"
}
输出
{
"code": 0,
"data": {
"type": 1,
"result": 4
}
}
6. 接口说明
6.1. 基本信息
- 接口名称:vulEval
- 示例地址:http://10.10.0.16:8300/vulEval
- 接口作用:用于进行漏洞可利用性评估,包括机器评估和人工评估两类。
- 传值方式:post
6.2. 参数说明
顺序| 参数名| 说明| 取值范围说明 |:---:|:---|:---|:---| | v0 | invokingType| 调用类型| 表示机器评估或人工评估:-1表示机器评估;0-5表示人工评估,对应的数值为评估的分值;其他值无效。 | v1 | vulType| 漏洞类型| 1.配置错误; 2.代码问题; 3.资源管理错误; 4.数字错误; 5.信息泄露; 6.竞争条件; 7.输入验证; 8.缓冲区错误; 9.格式化字符串; 10.跨站脚本; 11.路径遍历; 12.后置链接; 13.SQL注入; 14.注入; 15.代码注入; 16.命令注入; 17.操作系统命令注入; 18.安全特征问题; 19.授权问题; 20.信任管理; 21.加密问题; 22.未充分验证数据可靠性; 23.跨站请求伪造; 24.权限许可和访问控制; 25.访问控制错误; 26.资料不足 | v2 | accessLevel| 获取权限等级| 1.管理员权限; 2.部分权限用户; 3.普通用户; |4.访客 | v3 | CVSS3Score| CVSS3漏洞综合评分| 具体的评分分值。 | | v4 | CNNVDScore| CNNVD危害等级评分| 具体的评分分值。 | | v5 | POC| POC| 1.有; 2.无 | | v6 | EXP| EXP| 1.有; 2.无 | | v7 | vulPermissions| 漏洞对权限的需求| 1.高; 2.低; | | v8 | accessPath| 访问路径| 1.网络; 2.邻接; 3.本地; 4.物理接触; | | v9 | impactPlatformScope| 影响平台范围| 1.所有; 2.适度; 3.罕见; 4.可能触 |及 | v10 | impactAssetNum| 影响资产数量| 1.高; 2.中; 3.低; | | v11 | days| 0Day| 1.0day; 2.1day; 3.nday; | | v12 | degree| 确认程度| 1.是; 2.否; | | v13 | securityPatches| 安全补丁| 1.有; 2.无; | | v14 | softwareProtectionCapability| 软件防护能力| 1.高; 2.低; | | v15 | organProtectionCapability| 机构防护能力| 1.高; 2.中; 3.低; |
6.3. 返回类型
格式:json 内容:表示查询结果,格式如下所示,结果放在data中,type为0时表示查询,result表示查询的结果;如果type为1,则result无效。 示例
"result = -1 {'code': -1, 'message': 'Machine evaluation error'}
result = 0-5 {'code': 0, 'data': {'type': 0, 'result': result}}"
# invokingType = 0-5表示人工评估
{'code': 0, 'data': {'type': 1, 'result': invokingType}}
# invokingType 其他值无效
{'code': -2, 'message': 'invokingType input error'}
6.4. 注意事项:
- 调用时注意两点:
- 传参数时传送索引;
- 默认值为0,表未选择。
6.5. 示例集
6.5.1. 示例1
- 查询url: http://10.10.0.16:8300/base_info
- 参数
- api_type: country
- pageNum: 1
- pageSize: 5
- sort: time
- 返回结果
{
""code"": 0,
""data"": {
""list"": [
{
""id"": ""country00020210920030000000001"",
""name"": ""不丹"",
""code"": ""BT"",
""readNum"": 0
},
{
""id"": ""country00020210920030000000002"",
""name"": ""东帝汶"",
""code"": ""TL"",
""readNum"": 0
},
{
""id"": ""country00020210920030000000003"",
""name"": ""中国"",
""code"": ""HK"",
""readNum"": 0
},
{
""id"": ""country00020210920030000000004"",
""name"": ""中国"",
""code"": ""TW"",
""readNum"": 0
},
{
""id"": ""country00020210920030000000005"",
""name"": ""中国"",
""code"": ""MO"",
""readNum"": 0
}
],
""pageNum"": 1,
""pageSize"": 5,
""total"": 5
}
}
7. 附:漏洞分类
id name class 9 格式化字符串 1 10 跨站脚本 1 13 SQL注入 1 14 注入 1 15 代码注入 1 16 命令注入 1 17 操作系统命令注入 1
2 代码问题 2 3 资源管理错误 2 4 数字错误 2 5 信息泄露 2 6 竞争条件 2 11 路径遍历 2 12 后置链接 2
18 安全特征问题 3 19 授权问题 3 20 信任管理 3 21 加密问题 3 22 未充分验证数据可靠性 3 23 跨站请求伪造 3 24 权限许可和访问控制 3 25 访问控制错误 3
26 资料不足 4
8 缓冲区错误 5
1 配置错误 6
7 输入验证 7