Python调⽤云服务器AWVS13API接⼝批量扫描(指哪打哪)最近因为实习的原因,为了减少⼀部分的⼯作量,在阿⾥云服务器上搭建了AWVS扫描器 ⽅便摸鱼
但是发现AWVS貌似没有批量添加的⽅法,作者只好把整理的捏了⼜捏
⼿动输⼊是不可能⼿动输⼊的,去查了查⽹上关于AWVS扫描器API的使⽤,到两篇⽂章:
然后花⼀个⼩时的时间整理了⼀下,因为作者只需要添加任务,以及让扫描任务启动,所以我们也从这两个功能⼊⼿,查看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 = '' + 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 = quest.Request(url, data, headers)
html = quest.urlopen(request).read().decode('utf-8')
return html
  在create_target()函数中,如服务器IP是全局变量,即搭建AWVS的服务器的IP,后⾯接的端⼝需要根据实际情况修改。
可以看到现在还没有任务:
简单调⽤:
#这两处需要修改为你⾃⼰的
IP = ''
API_KEY = ''
def main():
testurl='www.zsjjob/'
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 Scan11111111-1111-1111-1111-111111111111完全扫描High Risk Vulnerabilities11111111-1111-1111-1111-111111111112⾼风险漏洞Cross-site Scripting Vulnerabilities11111111-1111-1111-1111-111111111116XSS漏洞SQL Injection Vulnerabilities11111111-1
111-1111-1111-111111111113SQL注⼊漏洞Weak Passwords11111111-1111-1111-1111-111111111115弱⼝令检测Crawl Only11111111-1111-1111-1111-111111111117Crawl Only Malware Scan11111111-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 = '' + 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 = quest.Request(url, data, headers)
html = quest.urlopen(request).read().decode('utf-8')
# return html
return "now scan {}".format(target_id)
  然后先将AWVS上⾯的任务清空⼀下,然后整合和调⽤之前的所有代码。
清空后的AWVS如图:
整合调⽤的全部代码为(作者去掉了IP和API_KEY,需要读者按照⾃⼰的搭建⾃⾏添加,另外还需要注意端⼝的问题)import json
import ssl
quest
import os
ssl._create_default_https_context = ssl._create_unverified_context
#os.environ['http_proxy'] = '127.0.0.1:8080'
#os.environ['https_proxy'] = '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 = '' + 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 = quest.Request(url, data, headers)
html = quest.urlopen(request).read().decode('utf-8')
return html
def get_target_list():
url = '' + IP + ':3443/api/v1/targets'
headers = {"X-Auth": API_KEY, "content-type": "application/json", 'User-Agent': 'curl/7.53.1'}
request = quest.Request(url=url, headers=headers)
html = quest.urlopen(request).read().decode('utf-8')
return html
def profiles_list():
url = '' + IP + ':3443/api/v1/scanning_profiles'
headers = {"X-Auth": API_KEY, "content-type": "application/json", 'User-Agent': 'curl/7.53.1'}
request = quest.Request(url=url, headers=headers)
html = quest.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 = '' + 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 = quest.Request(url, data, headers)
html = quest.urlopen(request).read().decode('utf-8')
# return html
return "now scan {}".format(target_id)
def stop_target(target_id):
url = '' + IP + ':3443/api/v1/scans/' + target_id + '/abort'
headers = {"X-Auth": API_KEY, "content-type": "application/json", 'User-Agent': 'curl/7.53.1'}
request = quest.Request(url=url, headers=headers)
html = quest.urlopen(request).read().decode('utf-8')
print(html)
def target_status(target_id):
url = '' + IP + ':3443/api/v1/scans/' + target_id
headers = {"X-Auth": API_KEY, "content-type": "application/json", 'User-Agent': 'curl/7.53.1'}
request = quest.Request(url=url, headers=headers)
html = quest.urlopen(request).read().decode('utf-8')
print(html)
def get_target_result(target_id, scan_session_id):
url = '' + 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 = quest.Request(url=url, headers=headers)
html = quest.urlopen(request).read().decode('utf-8')
print(html)
'''
主要使⽤批量添加与启动扫描任务的功能
即create_target()函数与start_target()函数
'''
def main():
testurl='www.zsjjob/'
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()
  运⾏之
curl命令发送post请求带参数可以看到任务已经⾃动运⾏起来了,读者可以根据⾃⼰的,修改上述代码,使其更符合业务需求。另外需要注意的是,AWVS的批量添加URL中,都是需要http或者https开头的!!
以上(开始快乐批量扫描趴)
参考链接:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。