Skipfish分析
1. Skipfish简介
Skipfish由谷歌制作,于2010年对外发布。Skipfish被描述是一个高效的Web应用程序的安全性检测工具,它不仅仅是一款检测工具。它是一款完整的漏洞扫描工具。它有以下特点:
1) 高速:它可以达到每秒400多个请求,在高速局域网下可以到达每秒2000多个请求;
2) 它的命令行选项简单易用;
3) 它可以检测出各种各样的漏洞问题,从简单的目录遍历和信息泄露到不同类型的SQL注入和XML注入;
Skipfish的主要缺点是自从2012年以来就没有更新过。对于一些新兴的技术它并不适用于此。
skipfish是一种活动的Web应用程序安全侦察工具。它通过执行递归爬网和基于字典的探针来为目标站点准备一个交互式站点地图。然后,使用来自多个活动(但希望是非破坏性)安全检查的输出对结果映射进行注释。该工具生成的最终报告旨在作为专业Web应用程序安全评估的基础。
2. skipfish原理
该工具会首先尽可能获取所有网站路径,进行访问,然后根据返回的内容,检测是否存在漏洞。该工具采用字典爆破和网页爬行两种方式获取网站。一旦获取网页内容,该工具会自动分析网页内容,扩充字典,从而提高爆破效率。同时,该工具提供特征码文件,对网页内容进行分析,以发现潜在漏洞。用户可以根据需要,扩充预置的特征文件,加强扫描功能。
3. skipfish使用
该工具会首先尽可能获取该网址下的所有路径,进行访问,然后根据返回的内容,检测是否存在漏洞。
扫描完成后会生成一个index.html文件,如下图所示:
4. payload的生成原理
Payload的生成方式是在/src/http_client.c源码文件中。
4.1. payload特征
4.1.1. XSS注入
在check.c源码文件中,可以看到XSS注入的相关信息。
经过分析inject_xss_tests函数,发现对http头的一些字段加了new_xss_tag;
在database.c源码文件中,分析new_xss_tag函数,可以看到XSS注入存在 “–>">’>’"<sfi6位数v6位数>”特征。
4.1.2. SQL注入
在check.c源码文件中,可以看到SQL注入的相关信息。
经过分析inject_sql_tests函数,发现 SQL注入请求头中可能会出现“sfi9-0数字”特征(数字从大到小,0-9位,例如sfi9876)并且请求头最后会出现“’””等标识,在请求中User-Agent、Referer、Accept-Language这三个字段会出现“sfish’"”标识。
SQL注入主要特征如下图所示:
4.1.3. XML注入
在check.c源码文件中,可以看到XML注入的相关信息。
通过分析inject_xml_tests函数,发现XML注入检测时可能会出现“sfish>’>">”特征。
4.1.4. 重定向注入
在check.c源码文件中,可以看到重定向注入的相关信息。
通过分析inject_redir_listing_tests函数,发现重定向注入可能存在“http://skipfish.invalid/;?”,“//skipfish.invalid/;?”,“skipfish://invalid/;?”,“‘skip’’’“fish”""”,“‘skip’’’“fish”""”等特征。
4.1.5. Shell注入(diff)
在check.c源码文件中,可以看到shell注入(diff)的相关信息。
通过分析inject_diff_shell_tests函数,我们可以发现shell注入存在下图特征:
4.1.6. Shell注入(spec)
在check.c源码文件中,可以看到shell注入(spec)的相关信息。
通过分析inject_ shell_tests函数,我们可以发现shell注入存在下图特征:
4.1.7. format string
在check.c源码文件中,可以看到format string的相关信息。
通过分析inject_format_tests函数,发现format string检测可能存在下图特征:
4.1.8. integer handling
在check.c源码文件中,可以看到integer handling的相关信息。
通过分析inject_integer_tests函数,发现integer handling检测可能会存在下图特征:
4.1.9. 目录遍历
在check.c源码文件中,可以看到目录遍历的相关信息。
通过分析inject_dir_listing_tests函数,发现目录遍历的http请求头中可能会出现如图所示字段:
4.1.10. 本地文件包含
在check.c源码文件中,可以看到本地文件包含的相关信息。
通过分析inject_lfi_tests函数,发现目录遍历的http请求头中可能会出现“%二进制”或者“/…”的特征。
4.2. Accept-Encoding和Connection生成原理
Accept-Encoding和Connection除了XSS注入、SQL注入等,其余都是默认固定的
4.3. User-Agent生成原理
User-Agent生成根据浏览器选择不同的类型,版本也会根据skipfish的版本不同而不同。也可以添加-b参数伪装成IE/FIREFOX/IPHONE的浏览器