web应用测试综述:
Burpsuite综述:
Burpsuit有许多功能,包括但不限于:
Interception Proxy:旨在让用户控制发送到服务器的请求。
Repeater:快速重复或修改指定请求的能力。
Intruder:允许自动化自定义攻击和payload。
Decoder:解码和编码不同格式的字符串(URL,BASE64,HTML等等)。
Comparer: 高亮显示不同的请求或响应之间的不同处。
Extender: 扩展Burp功能的API接口,以及许多通过BApp商店免费提供的扩展。
Spider and Discover Content feature:爬取web应用程序上的链接,并且可以被用来动态枚举非显式链接的内容来寻找信息。
Scanner (Pro Only): 检查web应用程序漏洞(XSS,SQLi,代码注入,文件包含等)的自动扫描程序。
入门
Burp的详细帮助文档在下面能找到:
http://portswigger.net/burp/help/suite_gettingstarted.html
Burpsuite能通过java -jar命令行加载。你可以通过使用选项“-Xmx”分配你的burp所需内存。
java -jar -Xmx1024m /path/to/burp.jar
一旦burpsuite启动,建议你先在Scope定义好目标主机。你可以在site map控制显示的内容和其他功能。Scope能通过定义目标主机名,IP,或者网络范围:
Burp的Engagement Tools
Burpsuite在它的Engagement Tools (右击目标站点的视图>Engagement Tools )下他提供了大量有用的功能。从这你可以选择“Analysis Target”(分析目标),这个功能提供给你链接,参数和静态、动态内容的计数。了解这些信息对评估目标非常有用。链接、参数、和动态内容越多,注入fuzz的点就更多。
在下面的截图中你可以看到一些其他功能,如“Schedule Task”(定时任务),让你可以定时进行主动扫描。如果客户端想在一天中的某几个小时执行自动化测试,这个功能特别有用。
Discovering Unlinked Content(发现非显式链接内容)
进行web应用程序测试时将面临到的一个问题是枚举未使用显式链接的内容。这可能是一种很耗时的方式,因为它主要依赖暴力猜解来制作请求并且查看服务器上是否存在该资源。举个例子,“/tmp/”目录不是在web应用任何一个链接中,但是如果发送请求/tmp/目录将得到响应。为了解决这个问题,我们有许多其他的选择:
利用Burp的Discover Content功能。
利用其它扫描器(Nikto,w3af,ZAP等)来探测一些默认资源。
利用DirBuster或Burp的Intruder功能基于一个固定列表暴力猜解资源。
所有的这些方法都非常耗时,并且实际上可能找不到任何东西,因此根据测试时间和范围,你可以不必让DirBuster 运行一整天。一般情况下,当你另外进行手工测试的时候,它会自动在后台运行。
下面是一个例子:调用Burp的Discover Content功能尝试动态枚举非显式链接的内容:
Burp的Decoder和Comparer(编解码器和对比器)
当你开始测试WEB应用程序时,你将发现你经常需要将字符串解码或编码成不同格式。当尝试绕过一些简单的waf的时候非常有用。下面的例子是使用Burp的decoder执行URL编码,除此之外还有别的编解码选项。
Burp的Comparer功能让你快速将请求或响应进行比较,并且高亮显示它们之间的区别:
Burp的Extender(扩展)
扩展功能提供了强大的API接口开发,通过使用脚本语言开发额外的功能。许多扩展是用python编写并且通过Burp的应用商店免费提供使用。有个非常有用的扩展是Carbonator,它允许你在命令行中实现brupspider>scan>report的全自动化。下面是应用商店一些可用扩展的截图:
Burp的Intruder(暴力破解)
另一个选项是利用Burp的intruder功能,它可以使用一个请求并且允许用户修改请求,定义各种不同的payload注入点。一个常见的用例是迭代请求中的参数值,用来查看web应用程序如何响应(例如:get /product.php?item=1),你也许可以使用intruder检查比较一下1-1000响应的不同之处。你还可以将请求的资源作为要修改的位置。下面我们将通过遍历一个目录字典来演示这一点:
1.指定一个请求并且选择“Send to Intruder”,这将在“intruder”选项卡下弹出以下窗口。高亮显示区域是在请求中将使用“sniper”payload进行暴力猜解的那部分:
2.接下来是payload选项卡,你可以加载一个字典进行暴力猜解:
3.选择“Intruder > Start Attack”开始攻击。接下来的结果窗口将显示创建的请求和HTTP状态码。正如我们所看到的,我们能枚举出一部分spider未发现的其他资源:
除了使用Burp,建议在后台运行中间扫描程序用来检查一些默认配置和资源。下面是使用Nikto的例子,也可以考虑其他扫描工具(ZAP,w3af,Grendal等)。正如我们所看到的,Nikto发现了更多有趣的东西等待我们去调查,如/tmp/和/test/:
在初步的侦察之后,我们想开始一个主动式扫描,这能让Burp测试已知内容以发现漏洞。主要通过Burp输入内容(HTML、javascript、SQL语法、系统命令等)进行大量的工作,并且监测应用程序如何响应来实现。与任何Web应用程序漏洞扫描器一样,Burp会报告一些需要手动验证的报告。要启动一个主动式扫描,右击site map上的URL或者资源并选择“Actively scan this host”,将会弹出下面主动扫描向导:
在Web应用程序的扫描时间可能因Web应用程序而异。在某些情况下,Web应用程序的自动扫描时间范围可能从几个小时到几天不等。扫描期间列举的链接计数是潜在的扫描持续时间的一个很好的指标。下面的窗口显示了1515个链接枚举,但很少有参数用于测试输入。不带参数的链接将减少Burp对每个链接的请求次数,因此扫描时间较短。
在评估主动扫描网络应用时,另一个关键因素是表单提交。当你主动扫描web应用程序时,根据web应用程序和向用户提供的功能,你可能会生成大量日志,故障单,作业等。如果不在评估范围内,应该密切监视这些情况以防止造成拒绝服务(DoS)情况。
扫描开始后,可通过跳转到Burp中的“scanner”选项卡来查看结果和状态.
随着开始显示结果,你可以开始检查一些结果。下面我们可以看到Burp提取多个爆出的结果以进一步调查:
分析扫描结果和手动测试:
验证Burp扫描结果,确定是否是误报,充分了解结果,这通常会是一个好主意。从选择发现的结果开始选择,如“Cross-site scripting (reflected)”,然后选择并查看其请求和响应中,影响漏洞评估的详细信息。检查XSS的第一件事就是在浏览器中重复这一个请求,然后查看脚本是否运行了。你可以通过右击请求正文部分然后选择“Request in browser”:
查看浏览器中的响应对确定标记是否正确非常有用。由于XSS评估结果与在客户端浏览器中执行的代码相关,因此选择在依赖于扫描器逻辑之前,手工验证发现结果非常重要。
Burp的另一个常用功能是“Repeater”,通常用于验证结果或手动搜索其他结果。只需右键单击请求正文部分并选择“Send to Repeater”:
在Repeater界面中,你可以修改请求并快速重新发送请求给Web应用程序。
反射型XSS可以通过注入某种HTML / JavaScript的payload进行快速测试,该payload解析无需输入进行验证。下面是修改XSS payload简单地“alert(”XSS“)”的示例:
对于反射型XSS的实际应用,你可能会利用iframe作为payload与鱼叉式网络钓鱼结合使用。下面是一个示例XSS payload,你可以使用它来代替“alert()”,所以现在它可以加载客户端侧提供的exploit或BeEF挂钩的第三方资源:
BeEF是通过使用JavaScript来控制受害者浏览器的强大方法。在上面,你可以看到使用XSS漏洞与BeEF相关的受害者浏览器。BeEF提供大量功能在受害者浏览器上执行,甚至连接到Metasploit以进行攻击。
关于Web应用程序的安全性中,XSS经常被许多人忽视,因为你需要利用其他方法获取最终目标——shell。关于XSS的一点需要注意的是,我们已经确定Web应用程序没有正确过滤用户输入,并且这可能只是一个引出许多其他漏洞的迹象。
在下面这种情况,我们通过发送到repeater并修改payload并在浏览器中显示响应来验证XSS,并展示了如何利用XSS来控制受害者浏览器。Burp扫描结果另一个优点是修改发现结果所联系的风险等级。当分析扫描结果时,你将毫无疑问遇见一些False Positive(误报)情况。因此,Burp提供用户修改结果为“False Positive”的能力:
Burp能够使用各种payload进行模糊输入,但它确实会遗漏一些特定版本的漏洞和配置问题。这对任何工具都很常见,因此建议你执行手动测试来验证工具找到的结果,并列举Web应用程序中的其他漏洞。
手动测试的第一步是获取Web应用程序使用的技术。特定的软件和版本信息可能会导致你获取额外的信息以获取可能存在的漏洞或漏洞。Whatweb是一款非常棒的工具,能够让你快速了解Web应用程序所使用的技术。下面我们可以看到whatweb的命令行语法和输出:
此时,我们可能已经在运行完整的Burp扫描之前运行了whatweb,但是我们可以从whatweb的输出中看到一些非常有趣的信息。
在这种情况下,我们看到一个ColdFusion Web应用程序,它给我们提供了手工测试的一个入手点。现在已经枚举出了ColdFusion,检查是否存在管理资源(如“/ CFIDE / administrator /”),以便判断是否合乎ColdFusion应用的逻辑。
手工测试
Burp也可以成为在Web应用程序上执行手工测试的好工具。通常,这种类型的测试是通过安全评估来进行的,并且随着从各种扫描中发现更多信息,可以进一步利用手动测试来利用它。关于手工测试的主题可以讲好几本书,本博文将重点介绍一些非常基础的内容。当你开始浏览Web应用程序并查看工具输出时,请问你自己以下问题:
1.列举并研究所有可能存在的软件版本。ColdFusion,WordPress,SharePoint等。
研究所有软件版本以检查是否存在已知的漏洞和常见的错误配置
尝试请求与正在使用的技术相关的其他资源,这些资源可能不会被Web应用程序显式链接出来。
2.Web应用程序是否用到了用户输入?
查看修改参数值,HTTP头字段,cookie等,以查看Web应用程序的响应方式。
3.如果你怀疑某个部分的请求出现在屏幕上,请测试XSS。因此,如果你浏览该页面并注意到你的User-Agent可以直接看见,请尝试用一些HTML / JavaScript替换你的User-Agent以测试XSS()。
4.你的请求是否被利用来针对数据库执行查询?例如,如果你注意到一个名为“id”的参数,并且看到它带有一个数字值,请尝试放置一个单引号“或双引号”以尝试生成数据库错误。这种类型的测试可以识别SQL注入的存在。
5.Web应用程序是否利用任何输入来执行命令?尝试修改输入以将附加命令附加到请求,并查看它是否被Web应用程序成功处理。
获取一个shell
Webshell有各种文件格式和功能。你可能能够登陆一个php shell(raw shell,meterpreter等),一个原始的netcat shell,.asp shell,.jsp等等。可以使用的shell类型取决于web应用程序所使用的技术和配置。例如,如果你获得了对Apache Tomcat GUI的访问权限,则可以部署WAR后门。如果你在运行IIS时遇到一些RFI漏洞,你可以尝试上传一个asp shell。
当你获得一个shell的时候,你也可以使用Web应用程序服务帐户的权限来运行,它可能无法在当前工作目录中执行命令。由于这些原因,你可能需要将Web Shell放置在/ tmp /目录()中。关于远程命令执行(RCE),它一般需要在请求结束时有一个空字节(%00)。
有时候配置错误会导致可以上传一个web shell。下面我们可以看到我们可以访问ColdFusion管理界面。如果我们跳转到这里,这实际上允许我们安排任务并上传(.cfm)后门。这是一个重要的发现,但许多自动化扫描工具完全错过了:
这个例子不太可能发生在现实世界中,但重点是列举Web应用程序利用的软件版本,然后进行研究以发现任何漏洞。ColdFusion伴随着许多目录遍历和越权漏洞已经成熟了。利用谷歌搜索和检查exploit-db等攻击研究资源,在这个测试阶段可能会有很长的路要走。
由于我们可以访问管理界面,因此下一个合理的步骤就是安排一个任务来调用(.cfm)后门并将其发布到Web应用程序中。要在ColdFusion中安排任务,它位于“Debugging&Logging”菜单下:
接下来,你需要在另一个地方快速搭起一个WEB服务器,以允许WEB应用程序将后门下载下来。我发现利用Python来快速建立一个Web服务器是非常有用的:
python -m SimpleHTTPServer 80
然后,我们可以配置并运行计划任务来撤消并发布后门。你需要确保选中“publish”复选框,并且可以从左侧的服务器设置摘要中枚举文件系统目录结构:
在我们运行计划任务后,你可以监控你的Python Web服务器以查看受害者服务器请求后门。然后,你可以跳转到Web应用上的后门进行交互,以在其OS上执行命令:
我们可以执行一个“whoami”命令来查看Web应用程序有什么权限:
作为“nt authority\system”执行,意味着我们可以开始进行一些修改,如添加用户并关闭防火墙。我们将使用以下命令添加一个用户:
net user jobin password /ADD
net user localgroup Administrators jobin /ADD
net localgroup “Remote Desktop Users” jobin /ADD
现在禁用防火墙并通过(.cfm)shell添加用户,我们可以通过RDP协议连接受害者系统以获得终端访问权限:
领取专属 10元无门槛券
私享最新 技术干货