导语:htcap是一个Web应用程序扫描程序,可以通过拦截ajax调用以及DOM修改并以递归方式爬取单页应用程序(SPA)。
工具介绍
htcap是一个Web应用程序扫描程序,可以通过拦截ajax调用以及DOM修改并以递归方式爬取单页应用程序(SPA)。Htcap不仅仅是漏洞扫描程序,因为它主要侧重于网站的爬取过程,并使用外部工具来发现漏洞。我们可以将其理解为是一款用于现代Web应用程序的手动以及自动渗透测试的工具。
它的扫描过程主要分为两部分,首先htcap将抓取目标并收集尽可能多的请求(urls,forms,ajax ecc 等等)并将其保存到sql-lite数据库。抓取完成后,可以针对已保存的请求启动多个安全扫描程序,并将扫描结果保存到同一数据库。Htcap自带的sqlmap和arachni模块内置。Sqlmap用于发现SQL注入漏洞,arachni用于发现XSS,XXE,Code Executions,File Inclusions ecc。由于扫描器模块扩展了BaseScanner类,因此可以轻松地创建或修改它们。当填充数据库(至少使用crawing数据)时,可以使用诸如sqlite3或DBEaver之类的现成可用工具进行探索,或者使用内置脚本将结果导出为各种格式。
Htcap所采用的是一种能够以递归方式对基于ajax的页面进行爬取的算法。该算法通过捕获ajax调用,将DOM修改映射到自身,并针对新添加的元素递归地重复该过程。当加载页面时,htcap将通过触发所有事件和填充输入值来启动,以触发ajax调用。当检测到ajax调用时,htcap等待它完成并调用相对回调函数; 如果在此之后,DOM被修改,htcap将针对添加的元素运行相同的算法,并重复它,直到所有的ajax调用被触发。
Htcap支持三种扫描模式:被动,主动和侵略性。当处于被动模式时,htcap不与页面进行交互,这意味着没有触发任何事件,仅遵循链接。在这种模式下,htcap作为一个非常基本的网页抓取工具,只收集页面中找到的链接(A标签)。这个过程就像是一个用户点击了链接一样。主动模式的行为其实类似于被动模式,但它会触发所有发现的事件。这个过程就像是用户了与页面进行了交互但却没有输入任何值。而侵略性模式则会使使htcap可以填充输入值并发布表单。这个过程类似于那些会在页面上执行尽可能多的操作的用户。
Htcap可以将在网站上的爬取过程限制在特定的范围内。可用范围包括:域名、目录以及url。当范围设置为域名时,htcap将仅抓取目标的域名,再加上allowed_domains(-d选项)。如果范围是目录,htcap将仅抓取目标目录及其子目录,如果范围是url,htcap将不会抓取任何东西,它只是会分析一个页面。
命令行参数
$ htcap crawl -h usage: htcap [options] url outfile Options: -h帮助 -w覆盖输出文件 -q不显示进度信息 -m设置爬取模式: - passive::不要与页面发生交互 - active::触发所有事件 - aggressive:填写输入值和爬取网站表单(默认) -sSCOPE设置爬取范围 - domain:限制爬取到当前域名(默认) - directory:限制爬取到当前目录(和子目录) - url:只分析单页面 -D最大爬取深度(默认值:100) -P连续表单的最大爬取深度(默认值:10) -F即使在侵略性模式下,也不爬取表单 -H保存页面生成的HTML -dDOMAINS需要扫描的域名,用逗号分隔(ex * .target.com) -cCOOKIES 利用JSON格式或者name=value对的形式设置cookie,用分号隔开 -CCOOKIE_FILE包含COOKIES的文件路径 -rREFERER 设置初始引用 -xEXCLUDED逗号分隔需要排除掉的url(正则表达式)- 即注销urls -pPROXY代理字符串协议:host:port 协议可以是'http'或'socks5'- -nTHREADS并行线程数量(默认值:10) -ACREDENTIALS 用于HTTP验证的用户名和密码,用冒号分隔 -UUSERAGENT设置用户代理 -tTIMEOUT分析页面时间的最大值(默认300) -S跳过初始URL检查 -G对具有相同名称的QUERY_STRING参数进行分组(“[]”结尾除外) -N不使用正常的URL路径(保持../../) -R重定向的最大次数(默认为10) -I忽略robots.txt
环境要求
Python 2.7
PhantomJS v2
Sqlmap(用于sqlmap扫描器模块)
Arachni(用于arachni扫描器模块)
下载以及运行
$ git clone https://github.com/segment-srl/htcap.git htcap $ htcap / htcap.py