WebGoat 54课程.docx
《WebGoat 54课程.docx》由会员分享,可在线阅读,更多相关《WebGoat 54课程.docx(86页珍藏版)》请在冰豆网上搜索。
WebGoat54课程
密级
公开
WebGoat5.4课程
北京知道创宇信息技术有限公司
2012-9
版本说明
修订人
修订内容
修订时间
版本号
审阅人
白河·愁
初稿
2011.11.8
0.1
文档信息
文档名称
文档编号
文档版本号
保密级别
扩散范围
扩散批准人
文档说明
WebGoat的课程指导,自己根据网上搜集的资料整理(主要是胡晓斌2011年7月的WebGoat5.2使用说明)和自己的理解完成和半完成。
因能力有限,部分课程没有完成,希望有兴趣的人一起学习、补充。
版权声明
可以随便修改
目录
1.WebGoat简介1
1.1.WebGoat安装1
1.2.WebGoat启动1
2.WebGoat课程3
2.1.Introduction(介绍)3
2.1.1.HowtoworkwithWebGoat3
2.1.2.HowToConfigureTomcat4
2.1.3.UsefulTools(工具介绍)6
2.1.4.CreateAWebGoatLesson7
2.2.General(常规)7
2.2.1.HTTPBasic7
2.2.2.HTTPSplitting(HTTP拆分)7
2.3.AccessControlFlaws(访问控制缺陷)8
2.3.1.UsinganAccessControlMatrix8
2.3.2.BypassaPathBasedAccessControlScheme9
2.3.3.LAB:
RoleBasedAccessControl(基于角色的访问控制测试)11
2.4.AJAXSecurity14
2.4.1.SameOriginPolicyProtection14
2.4.2.LAB:
DOM-Basedcross-sitescripting15
2.4.3.LAB:
ClientSideFiltering18
2.4.4.DOMInjection19
2.4.5.XMLInjection20
2.4.6.JSONInjection23
2.4.7.SilentTransactionsAttacks25
2.4.8.DangerousUseofEval26
2.4.9.InsecureClientStorage26
2.5.AuthenticationFlaws(认证漏洞)28
2.5.1.PasswordStrength28
2.5.2.ForgotPassword28
2.5.3.BasicAuthentication29
2.5.4.MultiLevelLogin132
2.5.5.MultiLevelLogin234
2.6.BufferOverflows(缓冲区溢出)35
2.6.1.Off-by-OneOverflows35
2.7.CodeQuality(代码质量)36
2.7.1.DiscoverCluesintheHTML36
2.8.Concurrency(并发)36
2.8.1.ThreadSafetyProblems36
2.8.2.ShoppingCartConcurrencyFlaw37
2.9.Cross-SiteScripting(XSS,跨站脚本)39
2.9.1.PhishingwithXSS39
2.9.2.LAB:
CrossSiteScripting40
2.9.3.StoredXSSAttacks41
2.9.4.ReflectedXSSAttacks42
2.9.5.CrossSiteRequestForgery(CSRF)42
2.9.6.CSRFPromptBy-Pass44
2.9.7.CSRFTokenBy-Pass44
2.9.8.HTTPOnlyTest44
2.9.9.CrossSiteTracing(XST)Attacks45
2.10.ImproperErrorHandling(不正确的错误处理)46
2.10.1.FailOpenAuthenticationScheme46
2.11.InjectionFlaws(注入漏洞)47
2.11.1.CommandInjection47
2.11.2.NumericSQLInjection48
2.11.3.LogSpoofing49
2.11.4.XPATHInjection50
2.11.5.StringSQLInjection51
2.11.6.LAB:
SQLInjection52
2.11.7.ModifyDatawithSQLInjection54
2.11.8.AddDatawithSQLInjection54
2.11.9.DatabaseBackdoors55
2.11.10.BlindNumericSQLInjection73
2.12.DenialofService(拒绝服务)73
2.12.1.DenialofServicefromMultipleLogins73
2.13.InsecureCommunication(不安全的通讯)74
2.13.1.InsecureLogin74
2.14.InsecureConfiguration(不安全配置)75
2.14.1.ForcedBrowsing75
2.15.InsecureStorage(不安全的存储)76
2.15.1.EncodingBasics76
2.16.MaliciousExecution(恶意执行)77
2.16.1.MaliciousFileExecution77
2.17.ParameterTampering(参数篡改)78
2.17.1.BypassHTMLFieldRestrictions78
2.17.2.ExploitHiddenFields78
2.17.3.ExploitUncheckedEmail78
2.17.4.BypassClientSideJavaScriptValidation80
2.18.SessionManagementFlaws(会话管理漏洞)80
2.18.1.HijackaSession80
2.18.2.SpoofanAuthenticationCookie81
2.18.3.SessionFixation83
2.19.WebServices83
2.19.1.CreateaSOAPRequest83
2.19.2.WSDLScanning85
2.19.3.WebServiceSAXInjection86
2.19.4.WebServiceSQLInjection86
2.20.AdminFunctions(管理功能)87
2.20.1.ReportCard87
2.21.Challenge87
3.关于OWASP87
4.问题87
WebGoat简介
WebGoat是OWASP(OpenWebApplicationSecurityProject)开发的用于Web漏洞演示与验证的平台。
该平台包含了SQL注入、跨站脚本、访问控制、线程安全、参数操纵、会话管理缺陷、认证失效等多种常见的Web安全漏洞。
最新版下载
WebGoat安装
以Windows版安装文件为例,安装很方便,在网站下载后是一个压缩包,解压完就算安装完成。
WebGoat启动
WebGoat压缩包后,解压缩后进入目录,双击执行webgoat.bat文件(Linux下执行webgoat.sh),在本地浏览器访问地址:
http:
//localhost/WebGoat/attack。
在提示框中输入用户名密码,用户名和密码均为guest后即可进入WebGoat演示环境的欢迎界面,如下图:
点击StartWebGoat则进入WebGoat演示环境的主界面,便可以开始使用WebGoat进行教学演示,如下图:
WebGoat课程
以下详细介绍WebGoat的各个测试模块以及详细测试步骤。
Introduction(介绍)
HowtoworkwithWebGoat
1.环境信息
WebGoat使用ApacheTomcat服务,她在本地运行并且很容易做配置,最初的配置是单用户配置,可以通过修改tomcat-users.xml增加其他用户。
2.界面说明
◆1,WebGoat的课程分类;
◆2,显示完成课程的技术提示;
◆3,显示HTTP响应参数;
◆4,显示HTTP响应Cookie;
◆5,显示课程目标;
◆6,显示Java源代码;
◆7,显示所选课程的通用解决办法;
HowToConfigureTomcat
WebGoat使用默认的Tomcat配置。
1.修改默认端口
通过修改“\tomcat\conf\server_80.xml”文件,修改部分见下
maxThreads="150"minSpareThreads="25"maxSpareThreads="75"
enableLookups="false"redirectPort="8443"acceptCount="100"
connectionTimeout="20000"disableUploadTimeout="true"
allowTrace="true"/>
2.配置多客户端访问
默认的WebGoat配置只能使用本机才能访问,
3.增加用户
修改tomcat\conf\tomcat-users.xml文件
--
NOTE:
Bydefault,nouserisincludedinthe"manager-gui"rolerequired
tooperatethe"/manager/html"webapplication.Ifyouwishtousethisapp,
youmustdefinesuchauser-theusernameandpasswordarearbitrary.
-->
--
NOTE:
Thesampleuserandroleentriesbelowarewrappedinacomment
andthusareignoredwhenreadingthisfile.Donotforgettoremove
....>thatsurroundsthem.
-->
--
-->
UsefulTools(工具介绍)
1.WebScarab
WebScarab是OWASP的一个项目,相当于浏览器的本地代理,可以利用WebScarab修改HTTP的请求国和响应。
官方地址:
https:
//www.owasp.org/index.php/Category:
OWASP_WebScarab_Project
2.Firebug
Firebug是Firefox的一个浏览器插件,可以使用Firebug检查、修改、编辑Web页面。
官方网址:
CreateAWebGoatLesson
General(常规)
HTTPBasic
◆课程目标
理解通过Web应用程序和浏览器转移字符串,本节不涉及Web攻击过程,仅用于验证请求响应正常。
◆课程方法
输入框内填写任意字符串,如:
abc,然后点击按钮Go!
,得到反转后的字符串,验证请求及响应正常,本节即完成。
HTTPSplitting(HTTP拆分)
◆课程目标
本课程让学员了解如何进行HTTPSplitting攻击。
◆课程原理
攻击者向Web服务器传递恶意代码,一个有应用漏洞不检查CR(回车,可以表示为%0d或\r)和LF(换行,也可表示为%0a或\n)。
这些字符不仅使攻击者控制应用程序打算发送的响应的头和响应体,而且还使他们能够完全在其控制下创造更多的答复。
HTTP拆分攻击配合缓存中毒一起使用,能使效果达到最大化。
缓存中毒攻击的目标是使缓存中毒,欺骗缓存,使其相信使用HTTP拆分劫持的页面是一个很正常的页面,是一个服务器的副本。
攻击者使用HTTPSplitting攻击,在请求头那里设置为将来的日期,这将迫使浏览器发送IF-Modified-Since请求头,这使攻击者有机会拦截服务器的答复,并代之以一个“304不修复”答复,以下是一个简单的304响应:
HTTP/1.1304NotModified
Date:
Fri,30Dec200517:
32:
47GMT
◆课程方法
这个课程分成2部
1.怎样完成HTTPSplitting攻击,选择一种语言进行搜索(如:
China),应用程序会在服务器上重定向你的请求。
使用回车(%0d)或换行(%0a)字符进行攻击,直到应用程序响应200。
2.提升HTTPSplitting攻击到CachePoisoning(缓存区中毒)
AccessControlFlaws(访问控制缺陷)
UsinganAccessControlMatrix
课程介绍
在一个基于角色的访问控制列表中,一个角色代表一组访问控制权限,一个用户可以被赋予一个或多个角色,一个基于角色的访问控制列表通常包含2部分:
角色权限管理和角色分配。
一个被破坏的基于角色的访问控制方案可能允许用户执行不允许他/她的被分配的角色,或以某种方式允许特权升级到XX的角色的访问。
课程目标
每个用户有一个角色可以访问唯一的特定资源,只有Admin用户组拥有“AccountManager”资源的权限,发现一个角色管理的漏洞。
课程方法
选择用户,选择资源,检查访问,测试每个用户和每个资源
BypassaPathBasedAccessControlScheme
◆课程介绍(绕过基于路径的访问控制方案)
‘guest’用户拥有访问所有lesson_plans/English目录下的所有文件的权限,尝试找出访问控制的漏洞访问其他的资源(如:
tomcat/conf/tomcat-users.xml)。
◆课程方法
使用代理拦截HTTP请求,修改访问文件,查看服务器返回结果。
LAB:
RoleBasedAccessControl(基于角色的访问控制测试)
◆课程介绍
在基于角色的访问控制列表里,一个角色代表着一组访问控制权限,一个用户可以被赋予一个或多个用户角色。
一个基于角色的访问控制通常包含二个部分:
角色和角色权限。
一个存在漏洞角色管理可能允许一个用户执行他/她没有权限执行的功能。
◆课程目标
暴露给定网站的访问控制缺陷,每种角色有权限获得特定的资源,每个用户被赋予了一个或多个角色,只有“Admin”角色可以访问“F”资源,成功的攻击使一个不在“Admin”组的用户访问“F”资源。
◆课程方法
Stage1:
BypassPresentationalLayerAccessContro
一个普通员工“Tom”利用脆弱的访问控制在职工列表界面使用删除功能,用户的密码是用户名的小写(如:
Tom的密码是tom)。
1.找出具有删除权限的账户;
2.执行“DeleteProfile”功能,使用WebScarab拦截请求,查看“Action”行为,可以看到action=DeleteProfile;
3.使用Tom用户登录,然后使用“ViewProfile”功能,使用代理截获请求,修改action行为DeletePRofile。
Stage2:
AddBusinessLayerAccessControl
执行修复访问控制中的Delete功能漏洞,需要修改WebGoat网站的代码,重复第一步骤验证是否修复。
AJAXSecurity
AJAX中一个关键的组成是XMLHttpRequest(XHR),可以允许JavaScript异步处理客户端请求服务端,包括:
无格式文本、Json串、回调的JS代码,本节讨论这些信息的威胁。
SameOriginPolicyProtection
XHR请求只能够从原始的服务器返回,尝试从非原始服务器返回请求会失败。
课程方法
请求原始服务器资源
请求非原始站点资源
LAB:
DOM-Basedcross-sitescripting
DOM型的跨站脚本
使用http:
//localhost:
8099/WebGoat/images/logos/owasp.jpg的图片修改页面显示内容。
课程原理
基于DOM的CSS(即XSS)漏洞一般都是由于JS没有对输入的参数作过滤,导致用户可以输入一些XSS载体标签。
在输入框中,我们输入常规的字符发现上面都会出现Hello,XXX的显示
课程方法
随便输入字符“abc”,会回显“helloabc”,找到输入框的HTML代码,在键盘输入后会激活displayGreeting事件,并将输入框中内容作为参数传入
查看displayGreeting函数http:
//localhost:
8099/WebGoat/javascript/DOMXSS.js没对任何参数做任何过滤,就直接替换了greeting的内容,这样我们就可以分析页面代码直接输入想要的标签来进行攻击了。
课程方法
输入//localhost:
8099/WebGoat/images/logos/owasp.jpg”>
使用
使用iframe标签生成payload
alert(“XSS”);”>
输入以下内容:
Pleaseenteryourpassword:
alert('Ihaveyourpassword:
'+pass.value);">Submit
修复漏洞,需要修改displayGreeting函数,
functiondisplayGreeting(name){
if(name!
=''){
document.getElementById("greeting").innerHTML="Hello,"+escapeHTML(name)+"!
";
}
}
LAB:
ClientSideFiltering
课程目的
绕过客户端的过滤,查看CEO的信息
课程原理
客户端不显示ID为102的员工信息,在客户端提交102ID查看相关信息,理由是客户端做的过滤,可以绕过。
课程步骤
使用firebug修改UserID的值为102
修复这个漏洞
DOMInjection
课程目的
在输入框内输入字符的时候会有一个ajax请求到后台验证我输入的key是否合法,然后决定是否激活Activate按钮,应用系统需要使用LicenseKey激活,测试绕过激活程序。
课程原理
验证部分放到客户端了
课程方法
使用代理拦截返回请求
你妹,直接firebug删掉disable属性
XMLInjection
课程目标
会员836239只有100积分,不过我们希望能买2000和3000积分的商品。
课程原理
使用代理,提交请求时,修改产品的ID号。
课程方法
使用WebGoat拦截请求,修改称产品ID
使用firebug直接修改
使用WebGoat拦截、修改返回内容
增加
JSONInjection
JavaScriptObjectNotation(JSON)是一种简单的轻量级的数据交换格式,JSON可以以很多形式应用,如:
数组,列表,哈希表和其他数据结构。
JSON广泛应用于AJAX和web2.0应用,相比XML,JSON得到程序员的更多的青睐,因为它使用更简单,速度更快。
但是与XML一样容易受到注入攻击,恶意攻击者可以通过在请求响应中注入任意值。
课程目标
一位旅行者,有两个航班可以选择:
直达航班,但价格贵;经停2次,价格便宜。
目标:
获得直达航班,并且价格便宜的机票。
课程原理
这个和上面的XMLInjection一样,不过这次服务器返回的是Json串
{
\"From\":
\"Boston\",
\"To\":
\"Seattle\",
\"flights\":
[
{\"stops\":
\"0\",\"transit\":
\"N/A\",\"price\":
\"$600\"},
{\"stops\":
\"2\",\"transit\":
\"Newark,Chicago\",\"price\":
\"$300\"}
]
}
我们把600改成一个较小的值就可以了
课程方法
从BOS到SEA
拦截请求
用firebug修改价格
SilentTransa