您的位置:首页 > 编程语言 > Python开发

基于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']
至此我们已经完成了整个扫描从创建到发起再到分析的所有环节,希望能对大家有所启发。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  api 自动化 python nessus