基于Python的nessus API简析——动态创建任务
2017-12-14 14:10
2346 查看
前言
前面两篇文章我们完成了发起任务并获取结果,不过我们之前运行的任务都是事先建好的,而这个任务运行时,我们对这个任务的启动请求将被拒绝。虽然多任务并发的需要并不多见,但是这里还是介绍一下如何动态的创建一个扫描任务。一、创建任务
创建任务需要的API和文档链接如下:POST /scans
https://localhost:8834/api#/resources/scans/create
这个API要求用POST方式传输数据,请求的payload如下:
参数 | 值类型 | 描述 | 是否为必要参数 |
uuid | string | 扫描模板的UUID | TRUE |
settings.name | string | 扫描器名称 | TRUE |
settings.description | string | 扫描器描述 | FALSE |
settings.policy_id | integer | 扫描模板ID,policy_id | FALSE |
settings.folder_id | integer | 扫描所在文件夹ID | FALSE |
settings.scanner_id | integer | 扫描ID | FALSE |
settings.enabled | boolean | 是否启用计划扫描 | TRUE |
settings.launch | string | 扫描频率 (i.e. ON_DEMAND, DAILY, WEEKLY, MONTHLY, YEARLY) | FALSE |
settings.starttime | string | 扫描开始时间 (i.e. YYYYMMDDTHHMMSS). | FALSE |
settings.rrules | string | 设置扫描运行规则。 频率 (FREQ=ONCE or DAILY or WEEKLY or MONTHLY or YEARLY) 间隔 (INTERVAL=1 or 2 or 3 ... x) 星期 (BYDAY=SU,MO,TU,WE,TH,FR,SA) 例如要创建星期三和星期五每三周运行一次的扫描 'FREQ=WEEKLY;INTERVAL=3;BYDAY=MO,WE,FR' | FALSE |
settings.timezone | string | 扫描时间表的时区。 | FALSE |
settings.text_targets | string | 扫描的目标IP列表 | TRUE |
settings.file_targets | string | 包含要扫描的目标列表的文件的名称。 | FALSE |
settings.emails | string | 以逗号分隔的将接收电子邮件摘要报告的帐户列表。 | FALSE |
settings.acls | array | 包含应用于扫描的权限的数组。 | FALSE |
新建任务必要的参数分别是
扫描器模板ID:uuid,
扫描名:settings.name
是否启用定时器:settings.enabled
扫描目标:settings.text_targets
其他参数都没什么大问题,按照文档给的要求给就行了,但是这里面的UUID怎么生成呢?
需要注意的是,这里的UUID并不是普通的UUID,而是专指nessus的扫描模板自带的UUID。
没错就是下面这张图里的这些模板,在手动创建任务时,我们直接点击便可,而通过API方式创建时就需要我们通过提供UUID的方式来指定了。
那么如何获得uuid呢?可以通过如下的API来获取:
GET/editor/{type}/templates
https://localhost:8834/api#/resources/editor/list
其中{ type }可以是scan,也可以是policy,这里我不展开了,我们查询scan就行,代码如下:
def get_template_uuid(name='advanced'): # 调用/editor/{type}/templates url = 'https://localhost:8834/editor/{type}/templates'.format(type='scan') # 发送请求 respon = requests.get(url, headers=header, verify=False) templates = json.loads(respon.text)['templates'] for template in templates: if template['name'] == name: return template['uuid'] return None
接下来我们就可以动态的创建一个任务了,这里我仅创建一个最简单的任务。如果创建成功,返回值中的respon['scan']['id']便是这个任务的scan_id
def create_scan(uuid, name, text_targets): # 调用/scans接口 url = "https://localhost:8834/scans" # post的payload data = {} data['uuid'] = uuid data['settings'] = {} data['settings']['name'] = name data['settings']['enabled'] = True data['settings']['text_targets'] = text_targets # 发送请求 respon = requests.post(url, data=json.dumps(data), headers=header, verify=False) return json.loads(respon.text)['scan']['id']至此我们已经完成了整个扫描从创建到发起再到分析的所有环节,希望能对大家有所启发。
相关文章推荐
- 基于Python的nessus API简析——登录&进行一次扫描
- 基于Python的nessus API简析——监听&获取扫描结果
- 基于ASP.NET的Web动态控件创建
- 基于dom编程中 动态创建与删除元素的使用
- python里创建一个任务(Task)
- python中利用exec动态创建函数
- ArcGIS Server Administrator API 编写python脚本(二)-----创建站点
- 使用Python创建简单的HTTP服务(基于SimpleHTTPServer) 和 FTP服务(基于pyftpdlib)
- Python 使用 Boto3 API 创建 EMR 集群
- 使用Python创建MySQL数据库实现字段动态增加以及动态的插入数据
- 基于VS Code创建Spring Boot项目开发REST API(一)
- 基于Python,Selenium和PhantomJS实现动态页面爬取
- python 动态创建一个类
- 基于ASP.NET的Web动态控件创建
- 基于任务的Service Bus API
- 基于asp.net的web页面动态控件创建以及使用
- Python学习 第二天任务 (一:【基于Python编程从入门到实践】第二章 变量和字符串 书本及动手试一试)
- activiti 动态加载任务执行人(基于jeesit)
- Python创建对称矩阵的方法示例【基于numpy模块】【转】
- 基于任务的Service Bus API