Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
skipfish — 由 lcamtuf 为 Google 创建的 Web 应用程序安全扫描器 - 非官方镜像 | Kitploit
工具/GitHubGitHub/spinkham/skipfish
侦察漏洞扫描器Web漏洞扫描器动态分析 (沙盒)Web应用程序漏洞利用信息收集Web安全模糊测试渗透测试网络爬虫
GitHubspinkham/skipfish

skipfish

87216613年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

由 lcamtuf 为 Google 创建的 Web 应用程序安全扫描器 - 非官方镜像

查看仓库网站

skipfish - Web 应用程序安全扫描器

http://code.google.com/p/skipfish/

  • 编写与维护:

    Michal Zalewski [email protected] Niels Heinen [email protected] Sebastian Roschke [email protected]

  • 版权所有 2009 - 2012 Google Inc,保留所有权利。

  • 依据 Apache 许可证 2.0 版之条款发布。


  1. 什么是 skipfish?

Skipfish 是一款主动式 Web 应用程序安全侦察工具。它通过递归爬取和基于字典的探测,为目标站点编制一份交互式站点地图。随后,该地图会被附加上若干主动(但愿是无破坏性的)安全检查的输出。该工具生成的最终报告旨在作为专业 Web 应用程序安全评估的基础。


  1. 为什么值得关注这个特别的工具?

市面上已有许多功能类似的开源和商业工具(例如 Nikto、Nessus);选择最适合您的那一款即可。话虽如此,skipfish 仍试图解决 Web 安全扫描器常见的一些问题。其具体优势包括:

  • 高性能:在响应良好的互联网目标上实测可达每秒 500+ 个请求,在局域网/城域网上可达每秒 2000+ 个请求,对本地实例可达每秒 7000+ 个请求,同时 CPU、网络和内存占用非常小。这可归因于:

    • 采用多路复用单线程、全异步的网络 I/O 与数据处理模型,消除了某些多线程客户端中存在的内存管理、调度和 IPC 低效问题。

    • 采用先进的 HTTP/1.1 特性,如范围请求、内容压缩和 keep-alive 连接,并强制限制响应大小,从而控制网络层面的开销。

    • 使用智能响应缓存和先进的服务器行为启发式规则,以最大限度减少不必要的流量。

    • 面向性能的纯 C 实现,包括自定义 HTTP 协议栈。

  • 易用性:skipfish 高度自适应且可靠。该扫描器具备以下特性:

    • 启发式识别晦涩的基于路径和查询的参数处理方式。

    • 优雅地处理多框架站点——这类站点中某些路径遵循完全不同的语义,或受制于不同的过滤规则。

    • 基于站点内容分析自动构建词表。

    • 概率性扫描特性,允许对任意复杂的站点进行周期性、有时间限制的评估。

    • 精心设计的安全检查:该工具旨在提供准确而有意义的结果:

      • 手工精心制作的字典可提供出色的覆盖面,并允许在合理时间内对 $keyword.$extension 进行彻底测试。

      • 检测漏洞时优先采用三步差分探测,而非签名检查。

      • 使用 Ratproxy 风格的逻辑来发现细微的安全问题:跨站请求伪造、跨站脚本包含、混合内容、MIME 与字符集不匹配、错误的缓存指令等。

      • 内置安全检查专为处理棘手场景而设计:存储型 XSS(路径、参数、请求头)、盲 SQL 或 XML 注入、盲 Shell 注入。

      • Snort 风格的内容签名,可突出显示服务器错误、信息泄露或具有潜在危险的 Web 应用程序。

      • 报告后处理通过识别重复模式,大幅减少由任何残留误报或服务器特殊机制造成的噪声。

话虽如此,skipfish 并非银弹,可能不适合某些用途。例如,它并不满足 WASC《Web 应用程序安全扫描器评估标准》中的大部分要求(有些是有意为之,有些则是不得已);而且与大多数同类项目不同,它没有附带用于横幅式(banner)检查的广泛已知漏洞数据库。


  1. 太有意思了!具体实现了哪些测试?

该工具提供的安全检查粗略清单如下。

  • 高风险缺陷(可能导致系统被入侵):

    • 服务器端查询注入(包括盲注入向量、数值型参数)。
    • GET 或 POST 参数中显式的类 SQL 语法。
    • 服务器端 Shell 命令注入(包括盲注入向量)。
    • 服务器端 XML / XPath 注入(包括盲注入向量)。
    • 格式化字符串漏洞。
    • 整数溢出漏洞。
    • 接受 HTTP PUT 的路径。
  • 中风险缺陷(可能导致数据泄露):

    • 文档正文中的存储型与反射型 XSS 向量(提供最基本的 JS XSS 支持)。
    • 通过 HTTP 重定向的存储型与反射型 XSS 向量。
    • 通过 HTTP 响应头拆分(header splitting)的存储型与反射型 XSS 向量。
    • 目录遍历 / LFI / RFI(包括受限向量)。
    • 各类文件兴趣点(POI,如服务器端源码、配置文件等)。
    • 攻击者提供的脚本和 CSS 包含向量(存储型与反射型)。
    • 外部不可信脚本和 CSS 的包含向量。
    • 脚本和 CSS 资源上的混合内容问题(可选)。
    • 从非 SSL 页面提交或提交至非 SSL 页面的密码表单(可选)。
    • 可渲染内容上错误或缺失的 MIME 类型。
    • 可渲染内容上的通用 MIME 类型。
    • 可渲染内容上错误或缺失的字符集。
    • 可渲染内容上相互冲突的 MIME / 字符集信息。
    • 设置 Cookie 的响应上的错误缓存指令。
  • 低风险问题(影响有限或特异性较低):

    • 目录列表绕过向量。
    • 重定向到攻击者提供的 URL(存储型与反射型)。
    • 攻击者提供的内嵌内容(存储型与反射型)。
    • 外部不可信内嵌内容。
    • 非可脚本子资源上的混合内容(可选)。
    • 通过 HTTPS -> HTTP 提交 HTML 表单(可选)。
    • URL 中包含 HTTP 凭据。
    • 已过期或尚未生效的 SSL 证书。
    • 无 XSRF 保护的 HTML 表单。
    • 自签名 SSL 证书。
    • SSL 证书主机名不匹配。
    • 敏感度较低内容上的错误缓存指令。
  • 内部警告:

    • 资源获取尝试失败。
    • 超出爬取限制。
    • 404 行为检查失败。
    • 检测到 IPS 过滤。
    • 意外的响应变化。
    • 疑似分类错误的爬取节点。
  • 非特定性信息条目:

    • 常规 SSL 证书信息。
    • 发生显著变化的 HTTP Cookie。
    • 发生变化的 Server、Via 或 X-... 请求头。
    • 新的 404 签名。
    • 无法访问的资源。
    • 需要 HTTP 认证的资源。
    • 死链(无效链接)。
    • 服务器错误。
    • 所有未另行分类的外部链接(可选)。
    • 所有外部电子邮件(可选)。
    • 所有外部 URL 重定向器(可选)。
    • 指向未知协议的链接。
    • 无法自动完成的表单字段。
    • 密码输入表单(供外部暴力破解使用)。
    • 文件上传表单。
    • 其他 HTML 表单(未另行分类)。
    • 数字文件名(供外部暴力破解使用)。
    • 由用户提供、继而渲染于页面上的链接。
    • 次要内容上错误或缺失的 MIME 类型。
    • 次要内容上的通用 MIME 类型。
    • 次要内容上错误或缺失的字符集。
    • 次要内容上相互冲突的 MIME / 字符集信息。
    • 类似 OGNL 的参数传递约定。

除已识别问题的列表外,skipfish 还提供所发现文档类型和问题类型的概要总览;以及一份交互式站点地图,其中通过暴力枚举发现的节点会以独特方式标注。

注意:作为一个有意的设计决策,skipfish 不会对高度非特定性的问题重复告警,包括但不限于:

  • 非 HttpOnly 或非 Secure 的 Cookie,
  • 非 HTTPS 或启用了自动完成的表单,
  • 页面上检测到的 HTML 注释,
  • 错误消息中泄露的文件系统路径,
  • 服务器或框架版本泄露,
  • 支持 TRACE 或 OPTIONS 请求的服务器,
  • 仅存在某些技术(如 WebDAV)本身。

如果愿意,大多数这些方面都很容易在报告中直接查看——例如,所有 HTML 表单都会单独列出,新的 Cookie 或有趣的 HTTP 请求头也是如此——预期审计人员可以酌情根据这些数据提出某些设计建议。话虽如此,这些情况不会被特别标注为具体的安全缺陷。


  1. 好吧,我想试试。我需要了解什么?

首先也是最重要的,请勿作恶。只对您自己拥有、或已获准测试的服务使用 skipfish。

请记住,所有类型的安全测试都可能具有破坏性。尽管该扫描器在设计上不会执行恶意攻击,但它仍可能意外干扰网站的运行。您必须接受这一风险,并做好相应规划。在可行的情况下,请针对测试实例运行扫描器,并做好应对意外后果的准备。

另请注意,该工具面向安全专业人员使用,且本质上属于实验性质。它可能产生误报,也可能遗漏明显的安全问题——即便运行完美,它也绝不是一款傻瓜式(point-and-click)应用程序。请勿不加辨别地采信其输出。

针对厂商提供的演示站点运行该工具并不是评估它的好方法,因为这些站点对漏洞的模拟通常非常不完善;我们也没有为这些情况做任何适配。

最后,该扫描器从设计上就不适合应对恶意或行为异常的 HTTP 服务器——在这些场景下,它不保证自身行为的安全(或理智)。


  1. 如何运行扫描器?

要编译它,只需解压归档文件并尝试执行 make。您很可能需要先安装 libidn。

接下来,您需要阅读 doc/dictionaries.txt 中的说明,以选择正确的字典文件并进行正确配置。这一步对后续扫描结果的质量影响深远,所以请不要跳过。

选定字典后,您可以使用 -S 加载该字典,并使用 -W 指定一个初始为空的文件,用于保存任何新学到的站点特定关键词(这在未来的评估中会派上用场):

$ touch new_dict.wl $ ./skipfish -o output_dir -S existing_dictionary.wl -W new_dict.wl
http://www.example.com/some/starting/path.txt

如果您不想在任何位置存储自动学到的关键词,可以使用 -W-。

请注意,如果需要,您可以提供多个起始 URL;它们都会被爬取。也可以使用以下语法从文件中读取 URL:

$ ./skipfish [...other options...] @../path/to/url_list.txt

扫描进行期间,该工具会显示一些有用的统计信息。您还可以按回车键切换到进行中的 HTTP 请求列表。

在上面的示例中,skipfish 将扫描整个 www.example.com(包括若从主页链接到的其他端口上的服务),并将报告写入 output_dir/index.html。随后您可以用自己喜欢的浏览器查看该报告(必须启用 JavaScript;由于某些浏览器最近对 file:/// 协议做了安全方面的改进,您可能需要通过 HTTP 访问结果)。index.html 文件是静态的;实际结果以 JSON 文件的层级结构存储,如有需要,适合机器处理或用于不同的展示前端。此外,所有已发现 URL 的列表会保存到单个文件 pivots.txt 中,方便后续处理。

一个简单的配套脚本 sfscandiff 可用于计算针对同一目标、使用相同选项执行的两次扫描之间的差异。较新的报告会被非破坏性地标注:所有新增或发生变化的节点会添加红色背景;所有新增或发生变化的问题会添加蓝色背景。

某些站点可能需要身份验证,我们对这一点的支持在 doc/authentication.txt 中有说明。大多数情况下,您会希望使用表单认证方法,它能够检测失效的会话以便重新认证。

认证完成后,站点上的某些 URL 可能会注销您的会话;您可以通过两种方式应对:使用 -N 选项,使扫描器拒绝设置或删除 Cookie 的尝试;或使用 -X 参数,阻止匹配的 URL 被抓取:

$ ./skipfish -X /logout/logout.aspx ...other parameters...

-X 选项还有助于加快扫描速度,可排除 /icons/、/doc/、/manuals/ 等诸如此类的标准常见路径。一般来说,您可以使用 -X 和 -I(仅爬取匹配某个子串的 URL)以任意方式限制扫描范围——包括将其仅限制在特定协议和端口上:

$ ./skipfish -I http://example.com:1234/ ...other parameters...

一个相关的功能 -K 允许您指定不进行模糊测试的参数名(对于将会话 ID 放在 URL 中的应用程序,可用来减少噪声)。

另一个有用的范围选项是 -D——允许您指定额外的、视为测试范围内(in-scope)的主机或域名。默认情况下,命令行 URL 中出现的所有主机都会被加入列表——但您可以使用 -D 放宽这些规则,例如:

$ ./skipfish -D test2.example.com -o output-dir http://test1.example.com/

……或者,如需域通配符匹配,请使用:

$ ./skipfish -D .example.com -o output-dir http://test1.example.com/

在某些情况下,您并不想实际爬取某个第三方域名,但您足够信任该域名的所有者,因而不担心来自该位置的跨域内容包含问题。要抑制相关警告,可以使用 -B 选项,例如:

$ ./skipfish -B .google-analytics.com -B .googleapis.com ...other parameters...

默认情况下,skipfish 发送极简的 HTTP 请求头,以减少线上传输的数据量;不过,有些站点会检查 User-Agent 字符串或请求头顺序,以拒绝不支持的客户端。在这种情况下,您可以使用 -b ie、-b ffox 或 -b phone 来模仿其中一款流行的浏览器(或 iPhone)。

在自定义 HTTP 请求方面,您还可以使用 -H 选项插入任意附加的非标准请求头;或使用 -F 定义主机与 IP 之间的自定义映射(绕过解析器)。后一个功能对于尚未上线或遗留的服务尤其有用。

有些站点可能过大,无法在合理的时间内完成扫描。如果站点存在定义明确的 tarpit——例如社交网络中 10 万个几乎相同的用户资料页——可以使用 -X 或 -S 排除这些特定位置。在其他情况下,您可能需要借助其他设置:-d 将爬取深度限制为指定数量的子目录层级;-c 限制每个目录的子项数量;-x 限制每条爬取树分支的后代总数;-r 限制一次扫描中发送的请求总数。

对于重复性评估,有一个有趣的选项:-p。通过指定 1% 到 100% 之间的百分比,可以指示爬虫跟踪少于 100% 的链接,并尝试少于 100% 的字典条目。这自然会限制扫描的完整性;但与大多数其他设置不同,它是以一种均衡、非确定性的方式进行的。当您需要对基础设施进行有时间限制但周期性的评估时,这一选项极为有用。另一个相关选项是 -q,它将爬虫的初始随机种子设置为指定值。这可用于精确复现之前的扫描以比较结果。随机性在 -p 模式下被最大程度地依赖,但也用于做出其他一些扫描管理决策。

某些特别复杂(或有缺陷)的服务可能包含大量完全相同或几乎相同的页面。虽然这些情况默认会在报告中以灰色显示,但它们仍会占用一定的屏幕空间,并在 JavaScript 层面耗费一些处理时间。在这种极端情况下,您可以在报告生成前使用 -Q 选项完全抑制重复节点的报告。这可能会让您对站点组织方式的理解不够全面,但对测试覆盖没有影响。

在某些快速评估中,您可能也无心关注站点预期功能的实现——只希望探查未被链接到的秘密内容。在这种情况下,您可以指定 -P 来禁止所有 HTML 解析。这会限制覆盖范围,并让扫描器失去通过查看 HTML 学习新关键词的能力,但会大幅加快测试速度。另一个类似地削弱功能、但可降低扫描持久性影响风险的选项是 -O,它会禁止所有表单解析和提交步骤。

某些处理敏感用户数据的站点非常重视 SSL——以及 SSL 的正确配置。Skipfish 可以(可选地)帮助您找出有问题的混合内容或密码提交场景——使用 -M 选项即可启用此功能。扫描器会对诸如在 https:// 页面上加载 http:// 脚本之类的情况提出告警——但会忽略诸如图片之类的无风险场景。

同样,某些注重细节的站点可能会关心这样的情况:缓存已在 HTTP/1.1 层面受到限制,但未给出明确的 HTTP/1.0 缓存指令。在命令行中指定 -E 会使 skipfish 仔细记录所有此类情况。

在某些场合,您可能想限制每秒请求数,以减轻目标服务器的负载(或有可能绕过 DoS 防护)。可以使用 -l 标志设置此限制,所给值即为您希望 skipfish 执行的最大每秒请求数。

扫描通常不应耗时数周。在许多情况下,您可能希望限制扫描持续时间,使其适配某个时间窗口。这可以通过 -k 标志实现,该标志允许以 H:M:S 格式指定时、分、秒的数量。如果在测试完所有页面之前发生扫描超时,使用此标志可能会影响扫描覆盖率。

最后,在某些涉及自包含站点(没有大量用户内容)的评估中,审计人员可能会关心所看到的任何外部电子邮件或 HTTP 链接,即使它们没有直接的安全影响。使用 -U 选项可将这些内容记入日志。

字典管理是一个专门的课题;如前所述,doc/dictionaries.txt 中有更详细的说明。请先阅读该文件再继续。一些相关选项包括:-S 和 -W(前面已介绍过)、用于抑制自动学习的 -L、用于限制关键词猜测库大小的 -G、用于丢弃旧字典条目的 -R,以及用于抑制开销高昂的 $keyword.$extension 模糊测试的 -Y。

Skipfish 还具备表单自动完成机制,以最大限度地提高扫描覆盖率。所填值应是非恶意的,因为它们的目的不是实施安全检查——而是为了绕过输入验证逻辑。您可以使用 -T 选项定义额外规则或覆盖现有规则(-T form_field_name=field_value,例如 -T login=test123 -T password=test321——但请注意,-C 和 -A 是更好的登录方式)。还有少量与性能相关的选项。使用 -g 设置全局维持到所有目标的最大连接数(明智的做法是将其保持在 50 以下,以免压垮你系统或附近 NAT / 防火墙设备上的 TCP/IP 协议栈);使用 -m 设置每 IP 限制(可以稍微试验一下:localhost 通常 2-4 为宜,本地网络 4-8,外部目标 10-20,对于严重延迟或不支持 keep-alive 的主机可设为 30 以上)。还可以使用 -w 设置 I/O 超时(即 skipfish 对单次读取或写入只会等待这么久),以及使用 -t 设置总请求超时,以适应极慢或极快的站点。

最后,-f 控制在中止扫描之前你愿意看到的最大连续 HTTP 错误数;-s 设置要获取和解析的响应的最大长度(更长的响应将被截断)。

在扫描大型、多媒体密集型站点时,你可能还想指定 -e。这将防止二进制文档为报告目的而保留在内存中,从而释放大量 RAM。

进一步的速率限制可通过第三方用户态工具(如 trickle)或内核级流量整形来实现。

哦,还可以使用 -u 抑制实时扫描统计信息。


  1. 但是说真的,该怎么运行它?

对设计良好且自包含的站点进行标准认证扫描(警告所有外部链接、电子邮件、混合内容及缓存头问题),包括温和的暴力破解:

$ touch new_dict.wl $ ./skipfish -MEU -S dictionaries/minimal.wl -W new_dict.wl
-C "AuthCookie=value" -X /logout.aspx -o output_dir
http://www.example.com/

五连接爬取,但不进行暴力破解;伪装成 MSIE 并信任 example.com 的内容:

$ ./skipfish -m 5 -L -W- -o output_dir -b ie -B example.com
http://www.example.com/

仅进行高强度暴力破解(不提取 HTML 链接),限制在单个目录内,并在 5 秒后超时:

$ touch new_dict.wl $ ./skipfish -S dictionaries/complete.wl -W new_dict.wl
-P -I http://www.example.com/dir1/ -o output_dir -t 5 -I
http://www.example.com/dir1/

如需所有命令行选项的简要列表,请尝试运行 ./skipfish -h。


  1. 如何解读和处理报告的问题?

skipfish 报告的大多数问题应当不言自明,前提是你对 Web 安全基础知识有良好的掌握。如果你需要快速重温某些较为复杂的主题(如 MIME 嗅探),你可能会喜欢我们内容全面的《浏览器安全手册》作为入门参考:

http://code.google.com/p/browsersec/

如果你仍需要帮助,有几个组织投入了大量精力来记录和解释许多常见的 Web 安全威胁,并就如何应对这些威胁向公众提供建议。除其他组织外,我建议你参考 OWASP 和 Web 应用安全联盟(Web Application Security Consortium)发布的资料:

  • http://www.owasp.org/index.php/Category:Principle
  • http://www.owasp.org/index.php/Category:OWASP_Guide_Project
  • http://www.webappsec.org/projects/articles/

虽然我很乐意诊断扫描器本身的问题,但遗憾的是,我无法为第三方 Web 应用程序的内部工作机制提供任何帮助。


  1. 已知限制 / 功能愿望清单

以下是 skipfish 当前缺失的功能列表。如果你希望在这些领域之一贡献代码来改进该工具,请告诉我:

  • 缓冲区溢出检查:经过仔细考虑,我怀疑没有可靠的方法可以远程测试缓冲区溢出。正如我们正在寻找的实际故障条件一样,适当的缓冲区大小检查也可能导致未捕获的异常、500 消息等。不过,我倒是很乐意被证明是错的。

  • 完整的 JavaScript XSS 检测:代码中已有一些基本的检查,但没有内置适当的脚本引擎来评估表达式和 DOM 访问。

  • 变长编码字符消耗 / 注入漏洞:这些问题目前在浏览器层面似乎已基本得到解决,因此在撰写本文时,它们的优先级要低得多。

  • 针对第三方、基于插件的内容(Flash、Java、PDF 等)的安全检查和链接提取。

  • 密码暴力破解和数字文件名暴力破解探测。

  • 搜索引擎集成(vhosts、起始路径)。

  • VIEWSTATE 解码。

  • NTLM 和摘要式身份验证(digest authentication)。

  • 更多特定的 PHP 测试(eval 注入、RFI)。

  • 代理支持:通过 config.h 中的 #define 指令可启用实验性的 HTTP 代理支持。添加对 HTTPS 代理的支持更为复杂,目前仍在进行中。

  • 扫描恢复选项、更好的运行时信息。

  • 独立安装(make install)支持。

  • 调度和管理 Web UI。


  1. 哎呀!出了严重问题!

再好的网络爬虫,也总有一天会被某个 Web 框架烧毁。如果你遇到看似异常的行为(例如,扫描耗时过长并产生过多请求、扫描输出中出现完全虚假的节点,或直接崩溃),请首先查看我们的已知问题页面:

http://code.google.com/p/skipfish/wiki/KnownIssues

如果你在那里找不到满意的答案,请使用以下命令重新编译扫描器:

$ make clean debug

...然后按以下方式重新运行:

$ ./skipfish [...previous options...] 2>logfile.txt

然后你可以检查 logfile.txt,了解出了什么问题;如果看起来像是扫描器的问题,请清除日志文件中的任何敏感信息,并将其发送给作者。

如果扫描器崩溃了,请按上述说明重新编译,然后输入:

$ ulimit -c unlimited $ ./skipfish [...previous options...] 2>logfile.txt $ gdb --batch -ex back ./skipfish core

...并且请务必将最后一条命令的输出也发送给作者。


  1. 致谢与反馈

Skipfish 的诞生得益于 Google 信息安全工程团队的贡献和宝贵反馈。

如果你对这款应用程序有任何错误报告、问题、建议或疑虑,可通过 [email protected] 联系主要作者。

下载工具