最近花了几天的时间研究了Qualys扫描的自动化调用方式,基于python实现。这里记录了中间遇到的一些问题、解决方式,最终给出了代码实现。
准备工作
除了安装python(我本地安装的是python3.7)之外,还需要进行如下2步准备:
1. 下载Qualys Developer API文档
https://www.qualys.com/documentation/
下载文档Qualys API (VM, PC) User Guide,确定server api url和各功能api接口的url及参数
2. 安装python第三方库qualysapi
github网址:https://github.com/paragbaxi/qualysapi
安装方式:
pip install qualysapi
解决的难点问题
1. 第三方库qualysapi提供的部分实现方法无法满足功能
比如新建报告的方法launchReport,该方法提供的输入参数有限,无法满足接口调用的功能要求。这时可以通过偏底层的QGConnector.request发送请求。例如:
response_text = self.con.request("/api/2.0/fo/report",
{"action": 'launch', "report_title": report_title, "report_refs": scan_refs,
"output_format": output_format, "template_id": template_id,
"report_type": "Scan"})
2. 如何生成指定的某个扫描任务的报告
通过研究和验证发现,Qualys支持新建报告模板,可以通过listReportTemplates()查看所有的报告模板。报告模板分为2种类型: Host Based Report Template和Scan Based Report Template,其中Scan Based Report Template能够通过指定扫描任务的scan reference(简称scan ref)来生成报告。要生成指定扫描任务的报告,需要新建Scan Based Report Template,获取报告模板的template_id,再加上扫描任务的scan ref,即可创建报告。需要说明的是,创建报告时,如果指定的报告模板是(默认的)基于HOST的模板,api接口参数scan