首先说一下编辑环境:
1.本机要安装Curl命令,下载地址:https://curl.haxx.se/download.html(注:里面有太多太多的版本,我们这里就下载一个只要有curl.exe的都行)
2.需要Jsoup的jar,这个在百度上搜一下就能看到好多。
3.测试的话需要安装Acunetix11,这个嘛,目前网上还没提供(反正我是没找到)免费的,我们先暂时忽略掉这一点吧,继续说下去,切入正题!
首先调用Acunetix11 API生成扫描报告一共需要4个步骤。结合API文档解释一下步骤:
1.建立一个扫描目标到http://www.baidu.com(不建议用百度网址测试,扫描时间太长了)
在演示一个扫描之前您将需要会在您想要扫描的网站上建立一个扫描目标。您将需要利用 (POST)目标终端去实现它。使用cURL:
https://127.0.0.1:3443/api/v1/targets --header "X-Auth:
API-KEY" --header "content-type: application/json" --data "{\"address\":\"
www.baidu.com\",\"description\":\"
baidu\",\"criticality\":\"
10\"}"
其中:
- https://127.0.0.1:3443 - 是Acunetix11端口URL(就是你安装了Acunetix11 的电脑)
Administration中生成KEY了。
- www.baidu.com - 是您想要添加的一个扫描目标网址
- baidu - 是描述扫描目标的词句 (非必填)
- 10 - 是目标的临界值 (Critical [30], High [20], Normal [10], Low [0])
命令成功之后会201,以及其它一些数据,其中包括target_id(返回结果中locations最后的一截字符串)
2. 在一个创建好的目标上运行一个扫描。
To start a scan you will need to make use of the (POST) scans endpoint. Using cURL:
https://127.0.0.1:3443/api/v1/scans --header "X-Auth:
API-KEY" --header "content-type: application/json" --data "{\"target_id\":\"
TARGET-ID\",\"profile_id\":\"
11111111-1111-1111-1111-111111111111\",\"schedule\":{\"disable\":false,\"start_date\":null,\"time_sensitive\":false}}"
其中:
-
https://127.0.0.1:3443 - 是Acunetix11端口URL
- API-KEY - 是您在第1步中生成的的API key
- TARGET-ID - 是您从之前的JSON回复中得到的
target_id值
- 11111111-1111-1111-1111-111111111111 - 是扫描profile ID。通过使用(GET)
scanning_profiles 端点获得的列表,列表包括了扫描profile和他们的ID。(后面在解释)
这个会反馈一个201 OK JSON回复,包含了许多扫描的细节,包括 scan_id。
3.生成报告
要生成一个开发者报告,您需要利用 (POST)报告端点。使用cURL:
https://127.0.0.1:3443/api/v1/reports --header "X-Auth:
API-KEY" --header "content-type: application/json" --data "{\"template_id\":\"11111111-1111-1111-1111-111111111111\",\"source\":{\"list_type\":\"scans\", \"id_list\":[\"
SCAN-ID\"]}}"
其中:
- https://127.0.0.1:3443 - 是Acunetix11端口URL
- API-KEY - 是您在第1步中生成的的API key
- SCAN-ID - 是您从之前的JSON回复中获得的 scan_id。
会有一个201HTTP回复显示了请求是成功的 ,并且会包含一个带有id的Location header(例如 Location: /api/v1/reports/54f402f6-7a60-4934-952f-45bfe6c4abf4 )。一旦报告被URL: https://127.0.0.1:3443/reports/download/54f402f6-7a60-4934-952f-45bfe6c4abf4.pdf 访问,这个id可以被用来下载报告。最新版本还会提供HTML版本的报告,并且可以从 https://127.0.0.1:3443/reports/download/54f402f6-7a60-4934-952f-45bfe6c4abf4.html 访问。
4.下载报告(注:目前这个功能似乎有点问题,至少我还没有调通,厂商那边也迟迟没有回复,后面我说一下别的方式下载报告)
为了生成一个XML报告,您将需要利用 (POST)exports 端点。使用cURL:
https://127.0.0.1:3443/api/v1/exports --header "X-Auth:
API-KEY" --header "content-type: application/json" --data "{\"export_id\":\"21111111-1111-1111-1111-111111111111\",\"source\":{\"list_type\":\"scan_result\",\"id_list\":[\"
SCAN_ID\"]}}"
其中:
-
https://127.0.0.1:3443 - 是Acunetix11端口URL
- API-KEY - 是您在第1步中生成的的API key
- SCAN-ID - 是您从之前的JSON回复中获得的
scan_id
上面可以看到有好几个地方是一连串的11111-111之类的,这些都是一些接口的返回值,我们这可以不用更改它们,你可以把它们看成常量,代表选择的模版。
其中profile_id是扫描类型,例如部分扫描,全部扫描等等,上面的代表FULL SCAN全部扫描;template_id是生成的报告的模版类型;export_id是下载的报告的模版类型,上面的代表XML格式类型。
由于时间关系,JAVA代码的操作,我只说一下思路。
首先写好curl命令,然后Runtime.getRuntime().exec(“此处为命令语句”),接着用JAVA正则表达式去解析命令的返回结果,得到其中我们需要的信息再进行下一步操作。
前面的1、2、3步的命令都执行并拿到结果后,在第三步我们可以根据上面写的方法得到HTML版本的报告,然后用curl -k -o E:\\myFile.html --url XXX.html去将生成的报告下载到本机磁盘。最后用Jsoup去解析HTML获取我们想要的扫描报告信息保存的数据库。