用途:个人学习笔记,有所借鉴,欢迎指正!
目标:
利用Python脚本调用漏洞扫描工具API批量扫描目标url,发现漏洞后有所通知,解放双手。
一、漏洞扫描-API调用-Xray
参考:快速开始 - xray Documentation
应用案例:可通过自动化扫描后将实时结果进行微信推送,也可以应用在其他安全工具上。
使用示例:xray webscan --url http://x.x.x.x --webhook-output http://127.0.0.1:5000/webhook
基本步骤:
1、命令漏扫触发本地URL
2、Flask启动进行监听处理
3、借助Server酱API推送微信
from flask import Flask, request
import requestsapp = Flask(__name__)@app.route('/webhook', methods=['POST'])
def xray_webhook():url = 'https://sctapi.ftqq.com/SCT75428T2Fd9hkLOmLXk53uWeFtl17TD.send?title=Xray find vuln!!!'try:#接受传递过来的数据转换json格式vuln=request.jsoncontent = """## xray 发现了新漏洞url: {url}插件: {plugin}漏洞类型: {vuln_class}请及时查看和处理""".format(url=vuln['data']['target']['url'], plugin=vuln['data']['plugin'],vuln_class=vuln['type'])print(content)data={'desp':content}print(data)requests.post(url,data=data)return 'ok'except Exception as e:passif __name__ == '__main__':app.run()
二、Python-红队项目-Awvs调用自动添加
漏扫API调用-AWVS
Awvs漏洞扫描工具:https://www.ddosi.org/awvs-5/
API使用参考:AWVS13批量脚本_%targets:website,=%-CSDN博客
应用案例:可通过脚本调用AWVS自动添加扫描也可以应用在其他安全工具上。
基本步骤:
1、启动工具&开启API-KEY
2、创建新任务并记录任务ID
3、启动新任务并记录返回ID
三、Python-红队项目-SQLMAP API调用脚本自动添加扫描
漏扫API调用-SQLMAP
参考:https:/www.freebuf.com/articles/web/204875.html
应用案例:前期通过信息收集拿到大量的URL地址,这个时候可以配合SqlmapAPl接口进
行批量的注入检测。
开发当前项目过程:(利用sqlmapAPI接口实现批量URL注入安全检测)
from flask import Flask, request
import requests,time,json#启用sqlmap-API服务 python sqlmapapi.py -s
#Sqlmap API接口使用:
# 1.创建新任务记录任务ID @get("/task/new")
# 2.设置任务ID扫描信息 @post("/option/<taskid>/set")
# 3.开始扫描对应ID任务 @post("/scan/<taskid>/start")
# 4.读取扫描状态判断结果 @get("/scan/<taskid>/status")
# 5.如果结束删除ID并获取结果 @get("/task/<taskid>/delete")
# 6.扫描结果查看 @get("/scan/<taskid>/data")def new_id():headers = {'Content-Type': 'application/json'}url='http://127.0.0.1:8775'+'/task/new'resp=requests.get(url,headers=headers).json()taskid=resp['taskid']if resp['success'] is True:print('->1、创建任务ID成功,ID:' + taskid)return taskiddef set_id(id,scanurl):headers = {'Content-Type': 'application/json'}data={'url':scanurl}url = 'http://127.0.0.1:8775/option/%s/set' % idresp = requests.post(url, data=json.dumps(data),headers=headers).json()if resp['success'] is True:print('->2、设置任务ID成功,ID:' + taskid)print('->2、设置任务URL成功,URL:' + scanurl)return taskiddef scan_id(id,scanurl):headers = {'Content-Type': 'application/json'}data = {'url': scanurl}url = 'http://127.0.0.1:8775/scan/%s/start' % idresp = requests.post(url, data=json.dumps(data), headers=headers).json()if resp['success'] is True:print('->3、启动扫描任务ID成功,ID:%s'%id)print('->3、启动任务URL成功,URL:%s'%scanurl)def status_id(id):url = 'http://127.0.0.1:8775/scan/%s/status'%idprint('->4、扫描任务进行中,请等待结束,ID:%s' %id)while 1:resp = requests.get(url).textif 'running' in resp:#print(resp)continueelse:print('->4、扫描任务ID已完成,ID:%s' %id)breakdef data_id(id,scanurl):url = 'http://127.0.0.1:8775/scan/%s/data' % idresp = requests.get(url)#print(resp.json()['data'][0]['status'])if resp.json()['data'][0]['status'] == 1:print('>>>>>>>>>>>>>>>>>>>>>>>>>')print('存在注入:'+'\n'+scanurl)print('>>>>>>>>>>>>>>>>>>>>>>>>>')wx = 'https://sctapi.ftqq.com/SCT75428T2Fd9hkLOmLXk53uWeFtl17TD.send?title=SQLMAP find vuln!!!'sql_title=resp.json()['data'][1]['value'][0]['data']['5']['title']sql_payload=resp.json()['data'][1]['value'][0]['data']['5']['payload']sql_dbms = resp.json()['data'][1]['value'][0]['dbms'][0]try:content = """## sqlmap 发现了新漏洞url: {url}漏洞标题: {title}漏洞Payload: {Payload}漏洞数据库类型:{dbms}请及时查看和处理""".format(url=scanurl, title=sql_title, Payload=sql_payload,dbms=sql_dbms)#print(content)data = {'desp': content}print(data)requests.post(wx, data=data)return 'ok'except Exception as e:pass# with open('result.txt', 'a+') as f:# f.write(resp.text)# f.write('\n' + '===========python sqlmapapi by xiaodisec=============' + '\n')# f.write('-?----------------------------------------------------' + '\n')# f.close()print('->5、注入任务ID已完成,请查看结果:result.txt')def delete_id(id):url = 'http://127.0.0.1:8775/task/%s/delete' % idresp = requests.get(url).json()if resp['success'] is True:print('->6、删除任务ID:%s成功' % id)time.sleep(3)if __name__ == '__main__':for url in open('url.txt'):taskid = new_id()set_id(taskid,url.replace('\n',''))scan_id(taskid,url.replace('\n',''))status_id(taskid)data_id(taskid,url.replace('\n',''))delete_id(taskid)print('---------------------------------')