首先說一下編輯環境:
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:
curl -k --request POST --url 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 的電腦)
- API-KEY - 這是Acunetix11的API-KEY,如果你安裝了就可以在頁面右上方的 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:
curl -k -i --request POST --url 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:
curl -k -i --request POST --url 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:
curl -k -i --request POST --url 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(“此處為命令語句”),接著用JAVARegex去解析命令的返回結果,得到其中我們需要的資訊再進行下一步操作。 前面的1、2、3步的命令都執行並拿到結果後,在第三步我們可以根據上面寫的方法得到HTML版本的報告,然後用curl -k -o E:\\myFile.html --url XXX.html去將產生的報告下載到本機磁碟。最後用Jsoup去解析HTML擷取我們想要的掃描報告資訊儲存的資料庫。