第161天:安全开发-Python-红队项目&漏扫调用&API推送微信&使命自动添加并 ...

石小疯  金牌会员 | 2024-10-11 12:06:37 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 993|帖子 993|积分 2979

目次
案例一:Python-红队项目-Xray调用推送微信
案例二:Python-红队项目-Awvs 调用自动添加
案例三: Python-红队项目-SQLMAP 调用自动添加


案例一:Python-红队项目-Xray调用推送微信

首先当地测试调用api发送信息给微信
api网站地址:(可以免费使用7天啊!)Server酱·Turbo版 | 一个请求通过API将消息推送到个人微信、企业微信、手机客户端和钉钉群、飞书群

api调用方式,直接访问就可以,desp背面跟的是你要发送的数据,最好以post方式请求,get数据会比较少,xxx更换为你的key
   ​https://sctapi.ftqq.com/xxxx.send?title=messagetitle&desp=messagecontent
  这里我直接尝试访问,查看输出效果

 使用python请求
  1. import requests
  2. url = "https://sctapi.ftqq.com/xxx.send?title= test!!!"
  3. content="""
  4.      ip = "127.0.0.1",
  5.      whoami = "admin",
  6.      work = "say hello"
  7. """
  8. data={
  9.     'desp':content
  10. }
  11. print(data)
  12. requests.post(url,data=data)
复制代码


在当地搭建一个Flask模块搭建起来的微型网站,其中里面的request对象有许多用法
   在Flask中,request对象是一个非常紧张的全局对象,它封装了客户端发送给服务器的HTTP请求信息。通过request对象,你可以访问请求中的数据,比如查询字符串(query string)、表单数据(form data)、JSON数据、文件上传、头部信息(headers)、cookies等。
  下面这个案例中搭建了一个微型的flask网站,当GET访问/x时就会触发test方法,吸收请求中的headers信息
  1. from flask import Flask,request
  2. app = Flask(__name__)
  3. @app.route('/x',methods=["GET"])
  4. def test():
  5.     x = request.headers
  6.     print(x)
  7. if __name__ == "__main__":
  8.     app.run()
复制代码


xray  -webhook-output参数先容
   在Xray中,使用--webhook-output参数来指定Webhook的URL地址。比方:
  1. xray webscan --url http://example.com --webhook-output http://your-webhook-server.com/webhook
复制代码
这个命令会启动Xray的web扫描模式,对指定的URL举行扫描,并将扫描效果发送到http://your-webhook-server.com/webhook这个地址。
  
  Xray发送到Webhook的响应格式是JSON,包罗了扫描效果的具体信息。响应的JSON布局大致如下:
  1. {
  2.   "type": "xxx",
  3.   "data": {}
  4. }
复制代码
使用这个参数把前面两个案例举行联合,把扫描出来的数据发送给自己搭建的建议网站,然后调用api接口,发送给微信
整合代码
  1. from flask import Flask,request
  2. import requests
  3. app = Flask(__name__)
  4. @app.route('/webhook',methods=["POST"])
  5. def test():
  6.     try:
  7.         x = request.json
  8.         #print(x['data']['target']['url'])
  9.         
  10.         url = "https://sctapi.ftqq.com/SCT257938Tua9PZKvryRYtsKHbNfgWacLg.send?title= vuln"
  11.         content="""
  12.             url : {url}
  13.             插件: {plugin}
  14.             vlun类型: {type}
  15.         """.format(url=x['data']['target']['url'],plugin=x['data']['plugin'],type=x['type'])
  16.         data={
  17.             'desp':content
  18.         }
  19.         print(data)
  20.         requests.post(url,data=data)
  21.     except Exception as e:
  22.         pass
  23.         
  24. if __name__ == "__main__":
  25.     app.run()
复制代码
把xray返回过来的这三段数据发送给wx

程序启动后,xray扫描毛病网页
  1. xray_windows_amd64.exe webscan --url http://testphp.vulnweb.com/artists.php?artist=1 --webhook-output http://127.0.0.1:5000/webhook
复制代码
收到消息了

查看效果

每一条都会发送效果
案例二:Python-红队项目-Awvs 调用自动添加

参考文章:AWVS13批量脚本_awvs自界说脚本-CSDN博客
获取awvs的api-key
  1. # 发送代码如下
  2. api_add_url = "https://x/api/v1/targets"
  3. headers = {
  4.     'X-Auth': 'x',
  5.     'Content-type': 'application/json'
  6. }
  7. data = '{"address":"http://vulnweb.com/","description":"create_by_reaper","criticality":"10"}'
  8. r = requests.post(url=api_add_url, headers=headers, data=data,verify=False).json()
  9. print(r)
复制代码
新增扫描使命
   MethodOST
URL: /api/v1/targets
  代码
  1. import requests# 发送代码如下
  2. api_add_url = "https://x/api/v1/targets"
  3. headers = {
  4.     'X-Auth': 'x',
  5.     'Content-type': 'application/json'
  6. }
  7. data = '{"address":"http://vulnweb.com/","description":"create_by_reaper","criticality":"10"}'
  8. r = requests.post(url=api_add_url, headers=headers, data=data,verify=False).json()
  9. print(r)
复制代码
尝试运行创建

添加乐成
 创建乐成后会有一个target-id号,以此来判断创建是否乐成,包括后续也必要用到这个id来举行启动
开启扫描
   MethodOST
URL: /api/v1/scans
  代码
  1. import requests
  2. id = xxxxxxxx
  3. data = '{"profile_id":"11111111-1111-1111-1111-111111111111","schedule":{"disable":false,"start_date":null,"time_sensitive":false},"target_id":"%s"}'% id
  4. api_run_url="https://192.168.172.130:3443/api/v1/scans"
  5. headers = {
  6.     'X-Auth': '1986ad8c0a5b3df4d7028d5f3c06e936c4d6110fabd7542828c3deca8e7fee4f9',
  7.     'Content-type': 'application/json'
  8. }
  9. r = requests.post(url=api_run_url, headers=headers, data=data, verify=False).json()
  10. print(r)
复制代码
创建失败的返回码

创建乐成的返回码,同样可以根据id号来判断

乐成开启扫描

把这两个脚本联合一下,写一个把url写进文件夹,一键创建使命而且启动
  1. import requests
  2. # 发送代码如下
  3. def touch_work(key,url):
  4.     api_add_url = "https://127.0.0.1:3443/api/v1/targets"
  5.     headers = {
  6.         'X-Auth': key,
  7.         'Content-type': 'application/json'
  8.     }
  9.     data = '{"address":"%s","description":"create_by_reaper","criticality":"10"}'% url
  10.     r = requests.post(url=api_add_url, headers=headers, data=data,verify=False).json()
  11.     id =  r['target_id']
  12.     if id is not False:
  13.         print("任务创建成功,id号为: %s"%id)
  14.     return id
  15. # 核心代码
  16. def run_work(key,id):
  17.     data = '{"profile_id":"11111111-1111-1111-1111-111111111111","schedule":{"disable":false,"start_date":null,"time_sensitive":false},"target_id":"%s"}'% id
  18.     api_run_url="https://127.0.0.1:3443/api/v1/scans"
  19.     headers = {
  20.         'X-Auth': key,
  21.         'Content-type': 'application/json'
  22.     }
  23.     r = requests.post(url=api_run_url, headers=headers, data=data, verify=False).json()
  24.     id = r["target_id"]
  25.     if id is not False:
  26.         print("启动扫描成功")
  27. if __name__ == "__main__":
  28.     key = input("please input your api-key:")
  29.     with open("url.txt","r") as urls:
  30.         for url in urls:
  31.             url = url.replace("\n","")
  32.             print("扫描url:"+url)
  33.             id = touch_work(key,url)
  34.             run_work(key,id)
  35.             print("==================================")
复制代码
 乐成启动

案例三: Python-红队项目-SQLMAP 调用自动添加

参考文章:深入了解SQLMAP API - FreeBuf网络安全行业门户
sqlmap安装完成以后,同一个目次下会有sqlmapapi.py,可以使用这个文件调用sqlmap的api接口

sqlmap的api参数
   # 0.启用sqlmap-API服务  python sqlmapapi.py -s
  # 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")
  python sqlmapapi.py -s 会启动一个当地端口,可以通过这个端口调用api

创建记录使命

设置扫描信息,数据必须使用json格式举行传输,因此必要使用json.dumps,将字典转化成为json格式,ua头中文本范例也必须是json格式
  1. requests.post("http://127.0.0.1:8775/option/76a4c6fd0750fd10/set",data=json.dumps({'url':'http://testphp.vulnweb.com/artists.php?artist=1'}),headers={'Content-Type':'application/json'}).json()
复制代码
如果返回true代表创建乐成啊

开始扫描竟然也必要把目标url再次带入进去,我以为有些繁琐,不应该通过id判断已经写入了嘛
  1. requests.post("http://127.0.0.1:8775/scan/0b03a4d6d1560beb/start",data=json.dumps({'url':'http://testphp.vulnweb.com/artists.php?artist=1'}),headers={'Content-Type':'application/json'}).json()
复制代码
返回true代表乐成

读取扫描状态,这个读取效果,不消再次写入目标url,用过sqlmap的应该都知道sqlmap会有一段时间来反应
  1. requests.get("http://127.0.0.1:8775/scan/b0717c18d0731951/status",headers={'Content-Type':'application/json'}).json()
复制代码
如果状态时terminated证明乐成了,如果是running就是还在跑

查看输出效果
  1. requests.get("http://127.0.0.1:8775/scan/b0717c18d0731951/data",headers={'Content-Type':'application/json'}).json()
复制代码

可以从中取出自己想要的数据,然后通过server酱酱把数据返回给微信
代码举行整合,优化
  1. import requests,json
  2. def create_task():
  3.      header = {
  4.         'Content-Type':'application/json'
  5.         }
  6.      r = requests.get("http://127.0.0.1:8775/task/new",headers=header).json()
  7.      if r['success'] == True:
  8.          return r['taskid']
  9. def set_task(id,scanurl):
  10.     url = "http://127.0.0.1:8775/option/%s/set"%id
  11.     headers = {
  12.         'Content-type': 'application/json'
  13.     }
  14.     data= {
  15.         'url':scanurl
  16.     }
  17.     r = requests.post(url,data=json.dumps(data),headers=headers).json()
  18.     if r['success'] == True:
  19.         print("设置扫描信息完成,id为:"+id)
  20. def start_task(id,scanurl):
  21.     url="http://127.0.0.1:8775/scan/%s/start"%id
  22.     headers = {
  23.         'Content-type': 'application/json'
  24.     }
  25.     data= {
  26.         'url':scanurl
  27.     }
  28.     r = requests.post(url,data=json.dumps(data),headers=headers).json()
  29.     if r['success'] == True:
  30.         print("开始扫描任务,id为:"+id)
  31. def status_task(id):
  32.     url="http://127.0.0.1:8775/scan/%s/status"%id
  33.     headers = {
  34.         'Content-type': 'application/json'
  35.     }
  36.     print("扫描还在进行中")
  37.     while True:
  38.         r = requests.get(url,headers=headers).json()
  39.         if r['status'] == 'running':
  40.             pass
  41.         if r['status'] == 'terminated':
  42.             print("扫描已经结束,id为"+id)
  43.             break
  44. def cat_data(id,scanurl):
  45.     url="http://127.0.0.1:8775/scan/%s/data"%id
  46.     headers = {
  47.         'Content-type': 'application/json'
  48.     }
  49.     r = requests.get(url,headers=headers).json()
  50.     if r['data'][0]['status'] == 1:
  51.         print("存在sql注入漏洞")
  52.         for key in range(1,6):
  53.             key = str(key)
  54.             try:
  55.                 print("sql注入类型为:"+r['data'][1]['value'][0]['data'][key]['title'])
  56.                 print("sql注入payload为:"+r['data'][1]['value'][0]['data'][key]['payload'])
  57.                 print("\n")
  58.                 url1 = "https://sctapi.ftqq.com/SCT257938Tua9PZKvryRYtsKHbNfgWacLg.send?title= There is an SQL injection vulnerability!!!"
  59.                 content="""
  60.                     url : {url1}
  61.                     sql注入漏洞类型: {type}
  62.                     sql注入漏洞payload: {payload}
  63.                 """.format(url1=scanurl,type=r['data'][1]['value'][0]['data'][key]['title'],payload=r['data'][1]['value'][0]['data'][key]['payload'])
  64.                 data={
  65.                     'desp':content
  66.                 }
  67.                 requests.post(url1,data=data)
  68.             except Exception as e:
  69.                 pass
  70.         print("=================================python sqlmapapi by xiaodisec======================================")
  71. if __name__ == "__main__":
  72.      #print(id)
  73.      #scanurl = "http://testasp.vulnweb.com/showthread.asp?id=0"
  74.      with open("url.txt","r") as urls:
  75.         for url in urls:
  76.             scanurl = url.replace("\n","")
  77.             print("正在扫描的url是:"+url)
  78.             id = create_task()
  79.             scanurl = scanurl.replace("\n","")
  80.             set_task(id,scanurl)
  81.             start_task(id,scanurl)
  82.             status_task(id)
  83.             cat_data(id,scanurl)
复制代码
运行效果,这里我从效果里面设置了循环,由于同一个sql注入毛病中大概,差别种类的sql注入范例都可以或许适用,必要都举行打印

而且设置了微信推送

感觉照旧可以举行优化,可以把同一个url注入的信息同一次发送


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

石小疯

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表