最近因为实习的原因,为了减少一部分的工作量,在阿里云服务器上搭建了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接口。

添加任务接口是:

  1. Method:POST
  2. URL: /api/v1/targets

  

发送参数 类型 说明
address string 目标网址:需http或https开头
criticality Int 危险程度;范围:[30,20,10,0];默认为10
description string 备注

具体的使用如下:

  1. '''
  2. create_target函数
  3. 功能:
  4. AWVS13
  5. 新增任务接口
  6. Method : POST
  7. URL : /api/v1/targets
  8. 发送参数:
  9. 发送参数 类型 说明
  10. address string 目标网址:需要http或https开头
  11. criticality int 危险程度;范围:[30,20,10,0];默认为10
  12. description string 备注
  13. '''
  14. def create_target(address,description,int_criticality):
  15. url = 'https://' + IP + ':13443/api/v1/targets'
  16.  
  17. headers = {"X-Auth": API_KEY, "content-type": "application/json", 'User-Agent': 'curl/7.53.1'}
  18. values = {
  19. 'address': address,
  20. 'description': description,
  21. 'criticality': int_criticality,
  22. }
  23. data = bytes(json.dumps(values), 'utf-8')
  24. request = urllib.request.Request(url, data, headers)
  25. html = urllib.request.urlopen(request).read().decode('utf-8')
  26. return html

  在create_target()函数中,如服务器IP是全局变量,即搭建AWVS的服务器的IP,后面接的端口需要根据实际情况修改。

可以看到现在还没有任务:

简单调用:

  1. #这两处需要修改为你自己的
  2. IP = ''
  3. API_KEY = ''
  4.  
  5. def main():
  6. testurl='https://www.zsjjob.com/'
  7. description="null"
  8. int_criticality=10
  9. print(create_target(testurl,description,int_criticality))
  10.  
  11. if __name__=='__main__':
  12. main()

  运行返回结果为:

接着我们查看AWVS添加的任务里面

可以看到只是添加到了任务中,还未进行扫描,接着我们查看开始扫描的API:

  1. Method:POST
  2. 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和其他两个参数丢进去就行了。

具体使用如下:

  1. '''
  2. start_target
  3. 功能:
  4. AWVS13
  5. 启动扫描任务接口
  6. Method : POST
  7. URL : /api/v1/scans
  8. 发送参数:
  9. 发送参数 类型 说明
  10. profile_id string 扫描类型
  11. ui_session_i string 可不传
  12. schedule json 扫描时间设置(默认即时)
  13. report_template string 扫描报告类型(可不传)
  14. target_id string 目标id
  15. '''
  16. def start_target(target_id,profile_id):
  17. url = 'https://' + IP + ':13443/api/v1/scans'
  18.  
  19. # schedule={"disable": False, "start_date": None, "time_sensitive": False}
  20. headers = {"X-Auth": API_KEY, "content-type": "application/json", 'User-Agent': 'curl/7.53.1'}
  21. values = {
  22. 'target_id': target_id,
  23. 'profile_id': profile_id,
  24. 'schedule': {"disable":False,"start_date":None,"time_sensitive":False}
  25. }
  26. data = bytes(json.dumps(values), 'utf-8')
  27. request = urllib.request.Request(url, data, headers)
  28. html = urllib.request.urlopen(request).read().decode('utf-8')
  29. # return html
  30. return "now scan {}".format(target_id)

  然后先将AWVS上面的任务清空一下,然后整合和调用之前的所有代码。

清空后的AWVS如图:

整合调用的全部代码为(作者去掉了IP和API_KEY,需要读者按照自己的搭建自行添加,另外还需要注意端口的问题)

  1. import json
  2. import ssl
  3. import urllib.request
  4. import os
  5.  
  6. ssl._create_default_https_context = ssl._create_unverified_context
  7.  
  8. #os.environ['http_proxy'] = 'http://127.0.0.1:8080'
  9. #os.environ['https_proxy'] = 'https://127.0.0.1:8080'
  10.  
  11. IP = ''
  12. API_KEY = ''
  13.  
  14. '''
  15. create_target函数
  16. 功能:
  17. AWVS13
  18. 新增任务接口
  19. Method : POST
  20. URL : /api/v1/targets
  21. 发送参数:
  22. 发送参数 类型 说明
  23. address string 目标网址:需要http或https开头
  24. criticality int 危险程度;范围:[30,20,10,0];默认为10
  25. description string 备注
  26. '''
  27. def create_target(address,description,int_criticality):
  28. url = 'https://' + IP + ':13443/api/v1/targets'
  29.  
  30. headers = {"X-Auth": API_KEY, "content-type": "application/json", 'User-Agent': 'curl/7.53.1'}
  31. values = {
  32. 'address': address,
  33. 'description': description,
  34. 'criticality': int_criticality,
  35. }
  36. data = bytes(json.dumps(values), 'utf-8')
  37. request = urllib.request.Request(url, data, headers)
  38. html = urllib.request.urlopen(request).read().decode('utf-8')
  39. return html
  40.  
  41. def get_target_list():
  42. url = 'https://' + IP + ':3443/api/v1/targets'
  43. headers = {"X-Auth": API_KEY, "content-type": "application/json", 'User-Agent': 'curl/7.53.1'}
  44. request = urllib.request.Request(url=url, headers=headers)
  45. html = urllib.request.urlopen(request).read().decode('utf-8')
  46. return html
  47.  
  48. def profiles_list():
  49. url = 'https://' + IP + ':3443/api/v1/scanning_profiles'
  50. headers = {"X-Auth": API_KEY, "content-type": "application/json", 'User-Agent': 'curl/7.53.1'}
  51. request = urllib.request.Request(url=url, headers=headers)
  52. html = urllib.request.urlopen(request).read().decode('utf-8')
  53. return html
  54.  
  55. '''
  56. start_target
  57. 功能:
  58. AWVS13
  59. 启动扫描任务接口
  60. Method : POST
  61. URL : /api/v1/scans
  62. 发送参数:
  63. 发送参数 类型 说明
  64. profile_id string 扫描类型
  65. ui_session_i string 可不传
  66. schedule json 扫描时间设置(默认即时)
  67. report_template string 扫描报告类型(可不传)
  68. target_id string 目标id
  69. '''
  70. def start_target(target_id,profile_id):
  71. url = 'https://' + IP + ':13443/api/v1/scans'
  72.  
  73. # schedule={"disable": False, "start_date": None, "time_sensitive": False}
  74. headers = {"X-Auth": API_KEY, "content-type": "application/json", 'User-Agent': 'curl/7.53.1'}
  75. values = {
  76. 'target_id': target_id,
  77. 'profile_id': profile_id,
  78. 'schedule': {"disable":False,"start_date":None,"time_sensitive":False}
  79. }
  80. data = bytes(json.dumps(values), 'utf-8')
  81. request = urllib.request.Request(url, data, headers)
  82. html = urllib.request.urlopen(request).read().decode('utf-8')
  83. # return html
  84. return "now scan {}".format(target_id)
  85.  
  86. def stop_target(target_id):
  87. url = 'https://' + IP + ':3443/api/v1/scans/' + target_id + '/abort'
  88. headers = {"X-Auth": API_KEY, "content-type": "application/json", 'User-Agent': 'curl/7.53.1'}
  89. request = urllib.request.Request(url=url, headers=headers)
  90. html = urllib.request.urlopen(request).read().decode('utf-8')
  91. print(html)
  92.  
  93. def target_status(target_id):
  94. url = 'https://' + IP + ':3443/api/v1/scans/' + target_id
  95. headers = {"X-Auth": API_KEY, "content-type": "application/json", 'User-Agent': 'curl/7.53.1'}
  96. request = urllib.request.Request(url=url, headers=headers)
  97. html = urllib.request.urlopen(request).read().decode('utf-8')
  98. print(html)
  99.  
  100. def get_target_result(target_id, scan_session_id):
  101. url = 'https://' + IP + ':3443/api/v1/scans/' + target_id + '/results/' + scan_session_id + '/vulnerabilities '
  102. headers = {"X-Auth": API_KEY, "content-type": "application/json", 'User-Agent': 'curl/7.53.1'}
  103. request = urllib.request.Request(url=url, headers=headers)
  104. html = urllib.request.urlopen(request).read().decode('utf-8')
  105. print(html)
  106.  
  107. '''
  108. 主要使用批量添加与启动扫描任务的功能
  109. 即create_target()函数与start_target()函数
  110.  
  111. '''
  112. def main():
  113. testurl='https://www.zsjjob.com/'
  114. description="null"
  115. int_criticality=10
  116. target_id=create_target(testurl,description,int_criticality).split('"')[21]
  117. print(start_target(target_id,'11111111-1111-1111-1111-111111111111'))
  118.  
  119. if __name__=='__main__':
  120. 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接口批量扫描(指哪打哪)的更多相关文章

  1. Python调用7zip命令实现文件批量解压

    Python调用7zip命令实现文件批量解压 1.输入压缩文件所在的路径 2.可以在代码中修改解压到的文件路径和所需要解压的类型,列入,解压文件夹下面所有的mp4格式的文件 3.cmd 指的就是Pyt ...

  2. express:webpack dev-server开发中如何调用后端服务器的接口?

    开发环境:     前端:webpack + vue + vue-resource,基于如下模板创建的开发环境: https://github.com/vuejs-templates/webpack  ...

  3. Python实现云服务器防止暴力密码破解

    云服务器防止暴力密码破解 云服务器暴露在公网上,每天都有大量的暴力密码破解,更换端口,无济于事,该脚本监控安全日志,获取暴力破解的对方ip,加入hosts黑名单 路径说明 描述 路径 登录安全日志 / ...

  4. 在windows下用python调用darknet的yolo接口

    0,目标 本人计算机环境:windows7 64位,安装了vs2015专业版,python3.5.2,cygwin,opencv3.3,无gpu 希望实现用python调用yolo函数,实现物体检测. ...

  5. Python调用百度地图API实现批量经纬度转换为实际省市地点(api调用,json解析,excel读取与写入)

    1.获取秘钥 调用百度地图API实现得申请百度账号或者登陆百度账号,然后申请自己的ak秘钥.链接如下:http://lbsyun.baidu.com/apiconsole/key?applicatio ...

  6. 简单实现Python调用有道API接口(最新的)

    # ''' # Created on 2018-5-26 # # @author: yaoshuangqi # ''' import urllib.request import urllib.pars ...

  7. python调用nmap进行扫描

    #coding=utf-8 import nmap import optparse import threading import sys import re ''' 需安装python_nmap包, ...

  8. 用Python调用华为云API接口发短信

    [摘要] 用Python调用华为云API接口实现发短信,当然能给调用发短信接口前提条件是通过企业实名认证,而且有一个通过审核的短信签名,话不多说,showcode #!/usr/bin/python3 ...

  9. python调用腾讯云短信接口

    目录 python调用腾讯云短信接口 账号注册 python中封装腾讯云短信接口 python调用腾讯云短信接口 账号注册 去腾讯云官网注册一个腾讯云账号,通过实名认证 然后开通短信服务,创建短信应用 ...

随机推荐

  1. MSSQL 指定分隔符号 生成数据集

    DECLARE @xml VARCHAR(MAX)='磨毛:1 缩率:2 干磨:3 湿摩:4 水洗牢度:5 手感:6 防水:7 PH:8 日晒:9' SET @xml= '<root>'+ ...

  2. 1. 线性DP 887. 鸡蛋掉落 (DP+二分)

    887. 鸡蛋掉落 (DP+二分) https://leetcode-cn.com/problems/super-egg-drop/ /*首先分析1个蛋,1个蛋的话,最坏情况需要N次,每次只能从0 1 ...

  3. UNP——第二章,端口号,套接字对,TCP,UDP输出

    1.端口号 端口号用于区分使用相同协议的进程. TCP69 与 UDP69 是不同的. 端口号范围 0 - 65535, 其中 0- 1023 是保留端口. 2.套接字对 TCP服务通过套接字对,唯一 ...

  4. Docker版EKL安装记录文档

    Docker版EKL安装记录文档 拉取已下三个镜像 docker.io/logstash 7.5.2 b6518c95ed2f 6 months ago 805 MB docker.io/kibana ...

  5. 分布式监控系统之Zabbix基础使用

    前文我们了解了分布式监控系统zabbix的相关组件的作用和zabbix的部署,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13997582.html:今天我们 ...

  6. Python_爬虫_urllib解析库

    简介:提取网页保存到txt文件中 + 解析txt文件内容,取出内容 from urllib import request import re.json url="http://www.163 ...

  7. 无所不能的Embedding4 - Doc2vec第二弹[skip-thought & tf-Seq2Seq源码解析]

    前一章Doc2Vec里提到,其实Doc2Vec只是通过加入Doc_id捕捉了文本的主题信息,并没有真正考虑语序以及上下文语义,n-gram只能在局部解决这一问题,那么还有别的解决方案么?依旧是通用文本 ...

  8. python-网络安全编程第八天(实战高精度密码字典生成器)

    前言 emmmm 高精度密码字典源码 1.py import exrex import sys #url过滤处理 def host_para(host): if '://' in host: host ...

  9. Python相比其他计算机语言真的更有优势吗?

    要了解Python相比其他计算机语言,首先要了解Python语言的特点 Python语言的特点 一.简单易学.明确优雅.开发速度快 ①简单易学:与 C 和 Java 比,Python的学习成本和难度曲 ...

  10. Java Web 会话技术总结

    会话技术 会话概念 一次会话中包含多次请求和响应. 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止,一次会话结束. 会话的功能 在一次会话的范围内的多次请求间,共享数据. 会 ...