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
https://blog.csdn.net/wy_97/article/details/106872773
Python调用云服务器AWVS13API接口批量扫描(指哪打哪)的更多相关文章
- Python调用7zip命令实现文件批量解压
Python调用7zip命令实现文件批量解压 1.输入压缩文件所在的路径 2.可以在代码中修改解压到的文件路径和所需要解压的类型,列入,解压文件夹下面所有的mp4格式的文件 3.cmd 指的就是Pyt ...
- express:webpack dev-server开发中如何调用后端服务器的接口?
开发环境: 前端:webpack + vue + vue-resource,基于如下模板创建的开发环境: https://github.com/vuejs-templates/webpack ...
- Python实现云服务器防止暴力密码破解
云服务器防止暴力密码破解 云服务器暴露在公网上,每天都有大量的暴力密码破解,更换端口,无济于事,该脚本监控安全日志,获取暴力破解的对方ip,加入hosts黑名单 路径说明 描述 路径 登录安全日志 / ...
- 在windows下用python调用darknet的yolo接口
0,目标 本人计算机环境:windows7 64位,安装了vs2015专业版,python3.5.2,cygwin,opencv3.3,无gpu 希望实现用python调用yolo函数,实现物体检测. ...
- Python调用百度地图API实现批量经纬度转换为实际省市地点(api调用,json解析,excel读取与写入)
1.获取秘钥 调用百度地图API实现得申请百度账号或者登陆百度账号,然后申请自己的ak秘钥.链接如下:http://lbsyun.baidu.com/apiconsole/key?applicatio ...
- 简单实现Python调用有道API接口(最新的)
# ''' # Created on 2018-5-26 # # @author: yaoshuangqi # ''' import urllib.request import urllib.pars ...
- python调用nmap进行扫描
#coding=utf-8 import nmap import optparse import threading import sys import re ''' 需安装python_nmap包, ...
- 用Python调用华为云API接口发短信
[摘要] 用Python调用华为云API接口实现发短信,当然能给调用发短信接口前提条件是通过企业实名认证,而且有一个通过审核的短信签名,话不多说,showcode #!/usr/bin/python3 ...
- python调用腾讯云短信接口
目录 python调用腾讯云短信接口 账号注册 python中封装腾讯云短信接口 python调用腾讯云短信接口 账号注册 去腾讯云官网注册一个腾讯云账号,通过实名认证 然后开通短信服务,创建短信应用 ...
随机推荐
- 你还再为下载jar包慢而烦恼吗?Maven配置阿里云镜像
Maven配置阿里云镜像 为什么我们下载jar这么慢 maven默认会从中央仓库下载jar包,这个仓库在国外,而且全世界的人都会从这里下载,所以下载速度肯定是非常慢的. 解决方案使用镜像 什么是镜像? ...
- [转自王垠]完全用GNU/Linux工作,摈弃Windows低效率的工作方式
ZT (a qinghua student's article) 我已经半年没有使用 Windows 的方式工作了.Linux 高效的完成了我所有的工作. GNU/Linux 不是每个人都想用的.如果 ...
- [Docker镜像] 关于阿里云容器镜像服务的使用(以天池比赛提交镜像为例)
最近在参加天池比赛,由于比赛需要使用阿里云容器镜像服务完成线上预测任务,所以花费了3-4天的时间了解并使用Docker完成相关镜像操作,在此分享下我学习的内容,以下是本文的目录结构: 介绍 镜像 容器 ...
- linux c语言 哲学家进餐---信号量PV方法一
1.实验原理 由Dijkstra提出并解决的哲学家进餐问题(The Dinning Philosophers Problem)是典型的同步问题.该问题是描述有五个哲学家共用一张圆桌,分别坐在周围的 ...
- 第二章epoll
epoll_create:函数实现分析 /* * Open an eventpoll file descriptor. */ SYSCALL_DEFINE1(epoll_create1, int, f ...
- Internet 网络协议族
1.linux目前支持多种协议族,每个协议族用一个net_porto_family结构实例来表示,在初始化时,会调用sock_register()函数初始化注册到net_families[NPROTO ...
- [LeetCode题解]86. 分隔链表 | 三指针 + 虚拟头节点
解题思路 三指针,一个指向前半部分待插入位置,一个指向后半部分待插入位置,最后一个从前往后遍历 代码 /** * Definition for singly-linked list. * public ...
- 下载器Folx扩展程序支持哪些浏览器
Folx使用多线程的下载方式大大提升了下载的速度,可以完全替代浏览器自带的下载工具,使下载文件的管理更加简单高效.但是,必须给浏览器安装Folx扩展程序,才能使用Folx下载页面链接. Folx在偏好 ...
- 使用celery异步发送短信
目录 1.使用celery异步发送短信 1.1在celery_task/mian.py中添加发送短信函数 1.2在verifcations/views.py中添加celery发送短信视图函数 1.3 ...
- Python JSON存储数据
前言: 很多程序都要求用户输入某种信息,如让用户存储游戏首选项或提供要可视化的数据.不管专注的是什么,程序都把用户提供的信息存储在列表和字典等数据结构中.用户关闭 程序时,你几乎总是要保存他们提供的信 ...