WebGoat实验.docx
《WebGoat实验.docx》由会员分享,可在线阅读,更多相关《WebGoat实验.docx(27页珍藏版)》请在冰豆网上搜索。
![WebGoat实验.docx](https://file1.bdocx.com/fileroot1/2023-2/22/6e021ffa-66a2-4ef1-8bd9-de6063f1ac68/6e021ffa-66a2-4ef1-8bd9-de6063f1ac681.gif)
WebGoat实验
WebGoat学习报告五
瞿靖东2015/12/1
版本号:
WebGoat5.4
13、不安全的配置(InsecureConfiguration)
强制浏览(HowtoExploitForcedBrowsing)
技术原理(HowItworks)
强制浏览是黑客用来访问获取那些没有被引用,但仍然允许被访问的资源的技术。
一种方法是操纵浏览器中的URL,删除结尾部分,直到找到一个不受保护的目录。
总体目标(GeneralGoals)
你的目标是尝试猜测“config”界面的URL。
“config”的URL只提供给维护人员。
该应用程序没有做垂直权限检查。
操作方法(Solutions)
如果你想访问一个受限制的页面,你需要能够猜测URL访问页面,如“/admin”。
尝试使用/WebGoat/config,/WebGoat/configuration,/WebGoat/conf,最后发现conf能够成功访问。
14不安全的存储(InsecureStorage)
技术原理(HowItworks)
熟悉一些经常使用的编码,包含有Base64编码,实体编码,基于密码的加密,MD5hash,SHA-256hash,Unicode编码,URL编码,十六进制编码,Rot13编码,XOR和密码编码,双unicode编码,双URL编码
Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。
Base64编码可用于在HTTP环境下传递较长的标识信息。
例如,在JavaPersistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTPG
Hash是一种特殊的算法,MD5就是其中常用的一种。
它的算法的特征是不可逆性,并且才计算的时候所有的数据都参与了运算,其中任何一个数据变化了都会导致计算出来的Hash值完全不同,所以通常用来校验数据是否正确或用作身份验证。
常见的,论坛里面用户的密码是经过MD5等Hash算法算出来的Hash值进行保存的。
在通常的网络下载中,会带有一个Hash值,这个值是用来校验你下载的文件是否损坏并保证尚未被别人篡改的。
操作方法(Solutions)
输入一些文字比如是qjd然后按go
在下面我们看到了一些编码的和一些解码的文字那样我们就把内容输进去
15恶意执行(MaliciousExecution)
技术原理(HowItworks)
脚本后门属于典型的恶意文件。
总体目标(GeneralGoals)
下面的表单允许你上传图片文件,图片上传后显示在当前页面。
互联网上的各种论坛或社交网站很容易找到此类应用。
该功能容易被恶意文件执行漏洞利用。
为了通过本课程,你需要上传一个恶意文件。
为证明你的文件能够被执行,它必须能够创建另一个名为guest.txt的文件。
操作方法(Solutions)
第一步是在服务器上创建一个可以运行的文件,该文件运行后会出创建guest.txt。
为完成该步骤,我们使用了Java中createNewFile()命令。
创建一个.jsp后缀的文件hacker.jsp,其代码如下:
<%java.io.Filefile=newjava.io.File("filepath\\webgoat.txt");
file.createNewFile();%>
<%内为JSP代码。
该段代码功能是创建一个guest.ext文件。
其中filepath需要你自己填写成一个指定的路径,注意Windows下文件分隔符中\字符需要通过\\转义。
Linux系统下分隔符为“/”。
当前测试环境中位置为:
D:
\\工具\\WebGoat\\WebGoat-5.4\\tomcat\\webapps\\WebGoat\\mfe_target\\webgoat.txt
接下来上传恶意jsp文件,并找出该文件的位置,从而访问并执行该文件。
通过图片上传按钮,提交并上传“图片文件”hacker.jsp。
访问该URL:
http:
//localhost:
8080/WebGoat/uploads/hacker.jsp,执行恶意文件。
访问该URL会看到一个空白页面,刷新课程页面,本课程通过(guest.txt文件已经被创建)。
16参数篡改(ParameterTampering)
(1)绕过HTML字段限制(BypassHTMLFieldRestrictions)
技术原理(HowItworks)
很多浏览器辅助工具都支持修改HTML或JavaScript代码,也支持手动提交HTTP数据。
总体目标(GeneralGoals)
向网站发送超出预期的输入信息。
在该练习中,你的任务是破坏客户端校验并向网站发送非法输入信息,包括部分被禁用的字段。
6个字段必须同时验证。
操作方法(Solutions)
要通过本节课程,你需要在6个字段中提交非法字符(斜杠、单引号等)。
其中有三个字段涉及到切换或下来,我们将通过Webscarab中断并修改请求。
我们还需要向禁用的字段写入非法数据。
这里有两种方式可以实现:
通过Firebug插件启用或通过Webscarab修改。
打开Firebug,找到form表单包含的几个字段,如:
disabledinput。
删除属性disabled。
此时页面上的禁用按钮已经实效,控件被激活处于可用状态。
当你完成输入添加后,记下来是提交验证输入。
为每个字段设置不允许的非法字符,确保至少有5个字段的长度超过了系统原先设定的限制。
完成修改后,提交数据,通过本课程。
(2)利用隐藏字段(ExploitHiddenFields)
技术原理(HowItworks)
开发人员在加载信息的页面上使用隐藏字段来跟踪、登录、定价等。
虽然这是一种方便且易于开发的机制,他们往往不验证从隐藏字段收到的信息。
本课程中,我们将了解如何找到和修改隐藏字段以便宜的价格购买产品。
总体目标(GeneralGoals)
你需要利用隐藏字段,使用错误的价格购买产品。
操作方法(Solutions)
开启WebScarab直接修改交易额。
(3)利用未检查的E‐mail(ExploitUncheckedEmail)
技术原理(HowItworks)
验证所有的输入信息总是不错的做法。
多数网站都允许一个非验证的用户给“朋友”发送e-mail。
对垃圾邮件发送者来说,这是一个绝佳的机制,可以利用公司的邮件服务器来发送电子邮件。
总体目标(GeneralGoals)
发送一封令人讨厌的E-mail。
操作方法(Solutions)
发送一封包含跨站脚本攻击代码的邮件。
输入,发送邮件,实现跨站脚本攻击。
也可以通过WebScarab修改相应的字段,向其他人发送恶意邮件。
(4)绕过客户端JavaScript校验(BypassClientSideJavaScriptValidation)
技术原理(HowItworks)
很多浏览器辅助工具都支持修改HTML或JavaScript代码,也支持手动提交HTTP数据。
总体目标(GeneralGoals)
在这个练习中,每个输入框中有不同的输入要求,你要做的就是绕过客户端验证机制破坏这些规则,输入不允许输入的字符。
操作方法(Solutions)
正常提交一次数据,并使用WebScarab拦截。
17会话管理缺陷(SessionManagementFlaws)
(1)会话劫持(HijackaSession)
技术原理(HowItworks)
开发人员在开发他们的自有会话ID时经常忘记整合的复杂性和随机性,这些因素对安全来说是必须的。
如果用户的特定的会话ID不具备复杂和随机性,那么应用程序很容易受到基于会话的暴力攻击的威胁。
总体目标(GeneralGoals)
本课程的目标是尝试访问一个其他用户的会话(该会话已经过服务器认证)。
我们尝试预测WEAKID的数值。
WEAKID用于区别WebGoat中不同用户(经过认证的或匿名的)。
操作方法(Solutions)
这个课程就是说因为这个Web应用用来生成会话标识的算法不够随机,所以很容易被预测,从而要求我们发现会话标识生成的规律并且使用暴力破解的办法找到一个有效的会话标识。
这里我们使用WebScarab作为代理来观察浏览器和服务器之间的数据通信。
先随便输入一点东西来观察浏览器发送给服务器的请求。
从上图可以看到有个WEAKID的Cookie,这就是我们的攻击目标,我们使用WebScarab的会话标识分析功能来分析这个会话标识。
在WebScarab上点击“SessionIDAnalysis”这个Tab页面,然后在“Collection”子页面的“PreviousRequests”的下拉菜单中选取我们需要分析的那个请求,如下图所示:
然后我们需要使WebScarab意识到Cookie里面的WEAKID这个参数是会话标识。
我们知道如果客户端发送给Web服务器的请求里面没有会话标识的话,服务器会从新生成一个新的会话标识并通过Cookie返回给客户端,利用这个特性,我们可以使WebScarab通过分析服务器返回的Cookie的办法来识别会话标识。
这里我们删除现有的这个参数,然后点击"Test"按钮让WebScarab进行分析。
弹出类似如下的对话框表示WebScarab已经成功的识别出了会话标识的参数。
然后在取样数量这里我们输入稍微大点的数字,比如50,然后点击“Fetch”按钮,WebScarab就会自动从服务器上获取50个会话标识的样例。
下面我们进入“SessionIDAnalysis”下的“Analysis”子页面,在“SessionIdentifier”下拉菜单中选择这个参数后可以看到WebScarab获取的这些会话标识。
我们可以看到这些会话标识是非常有规律的,是被短横线分割的2部分,前一部分是每次加1的有序排列的数字,后一部分也是不断增加的有序排列的数字,我们可以猜测后一部分应该是时间戳
再进一步仔细观察后可以发现有些特别的地方,如上图所示,会话标记第一部分的数字跳了一个。
这说明中间跳掉的会话标记是被别的用户使用了,我们的目标就是找到这个会话标识。
在我们这个例子中,根据我们发现的会话标识生成的规律,中间跳掉的这个会话标识的值应该是在12266-1449319737470到12268-1449319737570之间。
下面我们使用WebScarab的模糊测试的功能来试图找到这个会话标识。
我们先把相应的请求添加到模糊测试的模板里面。
在WebScarab的“Summary”页面中,选择目标请求后,右键菜单中可以看到“Useasfuzztemplate”的菜单项,点击这个菜单项就可以把这个请求作为模糊测试的基础模板。
然后进入WebScarab的“Fuzzer”页面。
会发现系统已经自动帮我们分析出了所有可以做模糊测试的参数。
点击下面的“Source”按钮添加模糊测试的源。
在弹出的对话框中,给这个源起一个名字比如“ForWeakID”输入到“Description”里面,然后我们使用正则表达式的方式来添加我们需要测试的数据,输入这样的正则表达式:
12267-1449319737[4-5][0-9][0-9],然后点击“Add”按钮。
注意这里我们输入的数据会使WebScarab测试从12267-1449319737400到12267-1449319737599的值,略微有些扩大范围,这是因为WebScarab只支持基本正则表达式,我们略微扩大一点测试的数据范围,可以把这个正则表达式写得简单一点。
然后关闭弹出的对话框,再为Cookie里面的WEAKID选择我们添加的源,就可以点击“Start”按钮开始运行了。
结果的分析还是需要人工进行,我们需要知道输入有效地会话标识之后服务器会返回怎样的数据。
在WebGoat里面我们知道一旦提交了正确的数据给服务器,服务器返回的数据里面会包含“Congratulations”的消息,所以我们只需要检查看哪个请求的返回有包含这样的信息就好。
这时候我们实际上也已经完成这个课程了。
刷新一下课程,就可以看到课程完成的标记。
(2)认证Cookie欺骗(SpoofanAuthenticationCookie)
技术原理(HowItworks)
如果验证cookie正确,一些应用程序会允许一个用户自动登录到他们的网站。
如果能够获得生成cookie的算法,有时cookie的值是可以猜到的。
有时候cookie可能是通过跨站攻击截获的。
在这一课中,我们的目的是了解身份验证cookie的方式,并指导你学习突破这种身份验证cookie的方法。
Cookie存储在客户端,可随时被篡改用于特别用途。
总体目标(GeneralGoals)
本节课程的目标是绕过认证检查。
操作方法(Solutions)
请确认在WebGoat中开启了“ShowCookies”功能。
你需要在WebScarab中禁用"Injectknowcookiesintorequests",否则WebScarab将会一直截获你的旧的cookie,而不是新的截获。
以webgoat/webgoat登录
点击“Refresh”,这会刷新显示我们的AuthCookie。
你现在使用的身份验证是这个cookie,而不是像上面的参数验证。
你会得到“AuthCookie”cookie,值为65432ubphcfx。
然后退出登录,以“aspect\aspect”登录。
点击“Refresh”,显示新的“AuthCookie”。
现在你有一个新的值。
这是一个英文字母的换位。
每个字母都是用户名倒过来,并被替换为它后面的,如T->U,A->B。
因此如果以用户“alice”登录,cookie会将用户名倒转为“ecila”,然后每个字母向后一位,最终结果为“fdjmb”
以用户名alice登录,通过WebScarab截获请求。
在已经存在的JSESSIONID后面添加
“;AuthCookie=65432fdjmb”
结果是没有输入密码,即可以alice进行登录了。
(3)会话固定(SessionFixation)
技术原理(HowItworks)
服务器通过每个用户的唯一的SessionID来确认其合法性。
如果用户已登录,并且授权他不必重新验证授权时,当他重新登录应用系统时,他的SessionID依然是被认为合法的。
在一些程序中,可能会在GET-REQUEST请求中传递SessionID。
这就是攻击的起点。
一个攻击者可以用一个选定的SessionID给受害人发送一个超链接。
例如,这里有一个准备好的邮件,它看起来像是一个从应用程序管理员发来的官方邮件。
如果受害者点击了这个链接,并且该受害者以攻击者指定的ID登录了系统;那么攻击者可以不经授权直接使用与受害者相同的ID访问该页面。
总体目标(GeneralGoals)
本节课程有多个步骤,你需要同时扮演攻击者和受害者两个角色。
完成该课程后,你将理解会话固定的原理;同时也将理解使用GET请求传递SessionID是个很糟糕的主意!
操作方法(Solutions)
第一步:
给Jane发送一封邮件,这个邮件看起来像是GoatHillsFinancial发来的包含一个SessionID的链接。
邮件已经准备好了,你只需要在连接中加入一个SessionID。
你可以通过向链接中加入&SID=WHATEVER.当然WHATEVER可以用其他字符代替。
这个链接可以是这样:
点击确定后提交,第一步完成。
第二步:
现在你是第一步中的收件人Jane。
这一步很简单,你只需要点击“GoatHillsFinancial”。
第三步:
你已经到了“GoatHillsFinancial”的登录界面。
以Jane/tarzan登录。
第四步:
现在你是黑客Joe。
已经有一个准备好的链接,单击后登录到“GoatHillsFinancial”页面,当然在现实中,这会有些不同。
登录后你会在浏览器中看到你的SID是“NOVALIDSESSION”,将这个ID改成“12245”,然后回车。
18Web服务(WebServices)
(1)创建SOAP请求(CreateaSOAPRequest)
技术原理(HowItworks)
SOAP通讯过程中,HTTPContent部分一般是XML内容。
总体目标(GeneralGoals)
尝试用浏览器或者WebService工具连接WSDL。
WebService的URL地址是:
http:
//localhost:
8080/WebGoat/services/SoapRequest
WSDL通常可被视为在web服务请求结束处加入一个WSDL。
点击页面上的“WebGoatWSDL”,或者在上面的请求后面加上“?
WSDL”即可。
http:
//localhost:
8080/WebGoat/services/SoapRequest?
WSDL
发起两种以上的SOAP操作请求以完成本节课程。
操作方法(Solutions)
第一步,我们要得到在WSDL中定义了几个操作。
访问“WebGoatWSDL”的URL查看Webservices描述定义语言文件。
进入WSDL文件页面,可以看到一共有四个。
在页面中输入4,进入下一步。
现在我们需要回答的问题是在“getFirstNameRequest”中“id”的类型是什么。
从图中可以看到,答案是“int”。
输入后进入第三步。
截取请求并调用任何方法,发送一个有效SOAP(简单对象访问协议)请求的有效的账
户。
启动WebScarab,确保“Interceptrequests”“Interceptresponses”被选中
POST改为:
POSThttp:
//localhost:
8080/WebGoat/services/SoapRequestHTTP/1.1
Content-Type改为text/xml
修改HTTPContent代码,最后格式如下:
从SOAPAction头到打开的XML标记之间不能有空格,这一点非常重要,否则会引发一个错误信息。
使用SOAP参数更新HTTPrequest,响应内容是Joe即可。
返回数据包有错,http状态为500,表示服务器内部出错,可能是webgoat文件受损。
理论上重复以上操作,使用新的Operation:
getLastName,即可通关。
(2)WSDL扫描(WSDLScanning)
总体目标(GeneralGoals)
本页面是WebService的API。
查看WSDL文件,并尝试获取客户的其它信息,如:
信用卡号码。
操作方法(Solutions)
启动WebScarab,任意选择后点提交
使用WebScarab截获请求,并将其中的“field=getLastName”改为“field=getCreditCard”
点击“AcceptChanges”后提交数据,返回信息里能够看到getCreditCard字段的信息。
(3)WebServiceSAX注入(WebServiceSAXInjection)
总体目标(GeneralGoals)
有些Web界面在后台使用WebServices。
如果前端所有输入验证都依赖WebServices,那么它可能会破坏Web界面发送数据的XML内容。
本节课程中,你需要修改除了用户101以外的另一个用户的密码。
.
操作方法(Solutions)
SAX解析器会解析任何格式正常的XML文件,例如:
匹配到有效的标记符号及闭合符号即认为正确。
当你向原有的XML文件中添加新的changePAssword元素时,如果id和password等标记都正确,那么解析器将很乐意帮你去修改另一个userid的密码。
在课程页面密码框中输入一个密码,开启WebScarab。
点击“Go!
”按钮提交数据,在WebScarab拦截的请求中修改XML文件,在password
选项中添加如下代码:
test
type='xsd:
int'>102
type='xsd:
string'>qjd
成功为uid为102的用户修改密码为“qjd”
(4)WebServiceSQL注入(WebServiceSQLInjection)
总体目标(GeneralGoals)
查看WSDL文件,并尝试获取多个客户的信用卡帐号。
你在屏幕上无法看到返回数据。
完成该课程后,刷新页面,左侧将创先绿色通过标识。
操作方法(Solutions)
在WebScarab中,你可以从顶部的下拉框中选择WSDL。
WebScarab将解析XML文件,所以你可以选择调用的操作。
然后你可以输入一个调用的参数值。
在“vaule”输入1or1=1,点执行,会弹出一个基本身份验证框,输入用户名guest,密码guest,然后点OK,点“Execute”,即可返回所有结果。
如果没有弹出,可以再WebScarab的“"Tools">"Credentials"”中选择。
你需要选中“Askwhenrequired”。
(需要先打开WSDL文件,就能在WebScarab的WebServices中看到相应的内容了。
)
仍然返回500,服务器内部出错。
理论上双击value,设置数值为1or1=1,点击【execute】按钮提交数据。
幸运的话,你将看到多个客户的信用卡信息,完成本课程。
19挑战(Challenge)
总体目标(GeneralGoals)
你的任务是破坏身份验证方案,从数据库中盗取所有的信用卡信息,然后破坏这个网站。
你需要利用你在其他课程中学到的技术。
要破坏的主页是“webgoat_challenge_guest.jsp”页面。
操作方法(Solutions)
先到localhost:
8080/WebGoat/source?
source=true看源码
找到用户名和口令分别为:
youaretheweakestlink和goodbye
启动Webscarab作为代理,cookie中发现user="eW91YXJldGhld2Vha2VzdGxpbms="是用户名youaretheweakestlink的Base64散列。
这里尝试cookie注入,将youaretheweakestlink’or’1’=’1
装换Base64:
eW91YXJldGhld2Vha2VzdGxpbmsnIG9yICcxJz0nMQ==
提交之后成功获取所有信用卡信息
最后一步,我们需要修改webgoat_challenge_webgoat.jsp文件的内容。
我们可