Python呼叫雲伺服器AWVS13API介面批量掃描(指哪打哪)
最近因為實習的原因,為了減少一部分的工作量,在阿里雲伺服器上搭建了AWVS掃描器 方便摸魚
但是發現AWVS貌似沒有批量新增的方法,作者只好把整理的URL.txt捏了又捏
手動輸入是不可能手動輸入的,去查了查網上關於AWVS掃描器API的使用,找到兩篇文章:
https://blog.csdn.net/wy_97/article/details/106872773
https://blog.csdn.net/sinat_25449961/article/details/82985638
然後花一個小時的時間整理了一下,因為作者只需要新增任務,以及讓掃描任務啟動,所以我們也從這兩個功能入手,檢視API介面。
新增任務介面是:
Method:POST URL: /api/v1/targets
傳送引數 | 型別 | 說明 |
---|---|---|
address | string | 目標網址:需http或https開頭 |
criticality | Int | 危險程度;範圍:[30,20,10,0];預設為10 |
description | string | 備註 |
具體的使用如下:
''' create_target函式 功能: AWVS13 新增任務介面 Method : POST URL : /api/v1/targets 傳送引數: 傳送引數 型別 說明 address string 目標網址:需要http或https開頭 criticality int 危險程度;範圍:[30,20,10,0];預設為10 description string 備註 ''' def create_target(address,description,int_criticality): url = 'https://' + IP + ':13443/api/v1/targets' headers = {"X-Auth": API_KEY, "content-type": "application/json", 'User-Agent': 'curl/7.53.1'} values = { 'address': address, 'description': description, 'criticality': int_criticality, } data = bytes(json.dumps(values), 'utf-8') request = urllib.request.Request(url, data, headers) html = urllib.request.urlopen(request).read().decode('utf-8') return html
在create_target()函式中,如伺服器IP是全域性變數,即搭建AWVS的伺服器的IP,後面接的埠需要根據實際情況修改。
可以看到現在還沒有任務:
簡單呼叫:
#這兩處需要修改為你自己的 IP = '' API_KEY = '' def main(): testurl='https://www.zsjjob.com/' description="null" int_criticality=10 print(create_target(testurl,description,int_criticality)) if __name__=='__main__': main()
執行返回結果為:
接著我們檢視AWVS新增的任務裡面
可以看到只是新增到了任務中,還未進行掃描,接著我們檢視開始掃描的API:
Method:POST URL: /api/v1/scans
傳送引數 | 型別 | 說明 |
profile_id | string | 掃描型別 |
ui_session_i | string | 可不傳 |
schedule | json | 掃描時間設定(預設即時) |
report_template_id | string | 掃描報告型別(可不傳) |
target_id | string | 目標id |
可以看到必選的就是 掃描型別,掃描時間設定,目標id
而掃描型別 profile_id 可以選擇的有:
掃描型別 | 值 | 翻譯 |
Full Scan | 11111111-1111-1111-1111-111111111111 | 完全掃描 |
High Risk Vulnerabilities | 11111111-1111-1111-1111-111111111112 | 高風險漏洞 |
Cross-site Scripting Vulnerabilities | 11111111-1111-1111-1111-111111111116 | XSS漏洞 |
SQL Injection Vulnerabilities | 11111111-1111-1111-1111-111111111113 | SQL注入漏洞 |
Weak Passwords | 11111111-1111-1111-1111-111111111115 | 弱口令檢測 |
Crawl Only | 11111111-1111-1111-1111-111111111117 | Crawl Only |
Malware Scan | 11111111-1111-1111-1111-111111111120 | 惡意軟體掃描 |
我們在程式碼中使用的是掃描型別對應的值,一般都是直接使用完全掃描
掃描時間設定我們按照預設值設定,目標 id 我們之前已經看到過了,即:
所以我們只要將獲取到的target_id和其他兩個引數丟進去就行了。
具體使用如下:
''' start_target 功能: AWVS13 啟動掃描任務介面 Method : POST URL : /api/v1/scans 傳送引數: 傳送引數 型別 說明 profile_id string 掃描型別 ui_session_i string 可不傳 schedule json 掃描時間設定(預設即時) report_template string 掃描報告型別(可不傳) target_id string 目標id ''' def start_target(target_id,profile_id): url = 'https://' + IP + ':13443/api/v1/scans' # schedule={"disable": False, "start_date": None, "time_sensitive": False} headers = {"X-Auth": API_KEY, "content-type": "application/json", 'User-Agent': 'curl/7.53.1'} values = { 'target_id': target_id, 'profile_id': profile_id, 'schedule': {"disable":False,"start_date":None,"time_sensitive":False} } data = bytes(json.dumps(values), 'utf-8') request = urllib.request.Request(url, data, headers) html = urllib.request.urlopen(request).read().decode('utf-8') # return html return "now scan {}".format(target_id)
然後先將AWVS上面的任務清空一下,然後整合和呼叫之前的所有程式碼。
清空後的AWVS如圖:
整合呼叫的全部程式碼為(作者去掉了IP和API_KEY,需要讀者按照自己的搭建自行新增,另外還需要注意埠的問題)
import json import ssl import urllib.request import os ssl._create_default_https_context = ssl._create_unverified_context #os.environ['http_proxy'] = 'http://127.0.0.1:8080' #os.environ['https_proxy'] = 'https://127.0.0.1:8080' IP = '' API_KEY = '' ''' create_target函式 功能: AWVS13 新增任務介面 Method : POST URL : /api/v1/targets 傳送引數: 傳送引數 型別 說明 address string 目標網址:需要http或https開頭 criticality int 危險程度;範圍:[30,20,10,0];預設為10 description string 備註 ''' def create_target(address,description,int_criticality): url = 'https://' + IP + ':13443/api/v1/targets' headers = {"X-Auth": API_KEY, "content-type": "application/json", 'User-Agent': 'curl/7.53.1'} values = { 'address': address, 'description': description, 'criticality': int_criticality, } data = bytes(json.dumps(values), 'utf-8') request = urllib.request.Request(url, data, headers) html = urllib.request.urlopen(request).read().decode('utf-8') return html def get_target_list(): url = 'https://' + IP + ':3443/api/v1/targets' headers = {"X-Auth": API_KEY, "content-type": "application/json", 'User-Agent': 'curl/7.53.1'} request = urllib.request.Request(url=url, headers=headers) html = urllib.request.urlopen(request).read().decode('utf-8') return html def profiles_list(): url = 'https://' + IP + ':3443/api/v1/scanning_profiles' headers = {"X-Auth": API_KEY, "content-type": "application/json", 'User-Agent': 'curl/7.53.1'} request = urllib.request.Request(url=url, headers=headers) html = urllib.request.urlopen(request).read().decode('utf-8') return html ''' start_target 功能: AWVS13 啟動掃描任務介面 Method : POST URL : /api/v1/scans 傳送引數: 傳送引數 型別 說明 profile_id string 掃描型別 ui_session_i string 可不傳 schedule json 掃描時間設定(預設即時) report_template string 掃描報告型別(可不傳) target_id string 目標id ''' def start_target(target_id,profile_id): url = 'https://' + IP + ':13443/api/v1/scans' # schedule={"disable": False, "start_date": None, "time_sensitive": False} headers = {"X-Auth": API_KEY, "content-type": "application/json", 'User-Agent': 'curl/7.53.1'} values = { 'target_id': target_id, 'profile_id': profile_id, 'schedule': {"disable":False,"start_date":None,"time_sensitive":False} } data = bytes(json.dumps(values), 'utf-8') request = urllib.request.Request(url, data, headers) html = urllib.request.urlopen(request).read().decode('utf-8') # return html return "now scan {}".format(target_id) def stop_target(target_id): url = 'https://' + IP + ':3443/api/v1/scans/' + target_id + '/abort' headers = {"X-Auth": API_KEY, "content-type": "application/json", 'User-Agent': 'curl/7.53.1'} request = urllib.request.Request(url=url, headers=headers) html = urllib.request.urlopen(request).read().decode('utf-8') print(html) def target_status(target_id): url = 'https://' + IP + ':3443/api/v1/scans/' + target_id headers = {"X-Auth": API_KEY, "content-type": "application/json", 'User-Agent': 'curl/7.53.1'} request = urllib.request.Request(url=url, headers=headers) html = urllib.request.urlopen(request).read().decode('utf-8') print(html) def get_target_result(target_id, scan_session_id): url = 'https://' + IP + ':3443/api/v1/scans/' + target_id + '/results/' + scan_session_id + '/vulnerabilities ' headers = {"X-Auth": API_KEY, "content-type": "application/json", 'User-Agent': 'curl/7.53.1'} request = urllib.request.Request(url=url, headers=headers) html = urllib.request.urlopen(request).read().decode('utf-8') print(html) ''' 主要使用批量新增與啟動掃描任務的功能 即create_target()函式與start_target()函式 ''' def main(): testurl='https://www.zsjjob.com/' description="null" int_criticality=10 target_id=create_target(testurl,description,int_criticality).split('"')[21] print(start_target(target_id,'11111111-1111-1111-1111-111111111111')) if __name__=='__main__': main()
執行之
可以看到任務已經自動執行起來了,讀者可以根據自己的URL.txt,修改上述程式碼,使其更符合業務需求。
另外需要注意的是,AWVS的批量新增URL中,都是需要http或者https開頭的!!
以上(開始快樂批量掃描趴)
參考連結:
https://blog.csdn.net/sinat_25449961/article/details/82985638