前言
最近需要使用Goby对目标进行批量化漏洞插件检测,但是Goby的漏洞检测逻辑是先进行资产的指纹识别,资产匹配上才会打对应的POC进行漏洞扫描。
对于某些场景来说很不友好,扩展goby_exp
说是能直接进行漏洞扫描,但是这个实现逻辑更不能理解。。开启直接检测模式居然要有一个任务扫描出对应的资产指纹,然后才能调用。
解决
可以观察到插件都有一个GobyQuery
字段,在我的插件库里则是有FofaQuery
和GobyQuery
。
通过界面修改这两个字段发现Goby
居然有强校验逻辑。
所以,写个脚本把插件中的字段批量修改成通配符就行了(就是如此简单
AI写的脚本有点问题,需要小小修改下:
import os
import re
import argparse
def replace_in_file(file_path):
try:
with open(file_path, 'r', encoding='utf-8') as f:
content = f.read()
except (UnicodeDecodeError, PermissionError) as e:
print(f"⚠️ 无法读取文件 {file_path}: {e}")
return False
# 正则表达式:匹配 "FofaQuery": "任意内容" 或 "GobyQuery": "任意内容"
# 使用非贪婪匹配 .*? 来捕获引号内的内容
pattern = r'("(?:FofaQuery|GobyQuery)":\s*")([^"]*)(")'
# 替换函数:保留前后部分,中间替换为 *
def replacer(match):
return match.group(1) + '*' + match.group(3)
new_content, count = re.subn(pattern, replacer, content)
if count > 0:
try:
with open(file_path, 'w', encoding='utf-8') as f:
f.write(new_content)
print(f"✅ 已修改 {file_path}(替换 {count} 处)")
return True
except Exception as e:
print(f"❌ 写入失败 {file_path}: {e}")
return False
else:
# print(f"🔍 无匹配项 {file_path}")
return False
def main(folder_path):
if not os.path.isdir(folder_path):
print(f"❌ 指定路径不是有效文件夹: {folder_path}")
return
modified_count = 0
file_count = 0
for root, dirs, files in os.walk(folder_path):
for file in files:
file_path = os.path.join(root, file)
file_count += 1
if replace_in_file(file_path):
modified_count += 1
print(f"\n📊 总结:遍历 {file_count} 个文件,修改了 {modified_count} 个文件。")
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="替换文件中 FofaQuery 和 GobyQuery 的值为 *")
parser.add_argument("folder", help="要遍历的文件夹路径")
args = parser.parse_args()
main(args.folder)
溜了