Webgoat学习笔记1

注:

使用为webgoat5-2版本,在我的下载

webscarab为webscarab-selfcontained-20070504-1631.jar,直接在官网下也可以,github上好像是

【Access Control Flaws】

 

Using an Access Control Matrix(权限控制矩阵)

题目翻译就是:基于角色控制的访问机制,如果设置不得当,呵呵,就会导致没有admin权限的人,访问到admin才知道的东西。。

题目要求:用不是admin的用户,登录【Account Manager】。。

答案就是:用 Larry 和 Account Manager访问。。

Bypass a Path Based Access Control Scheme(绕过一个基于路径的访问控制方案)

题目翻译:基于路径访问,那么我们可以通过路径改变访问到不属于我们可以访问的文件

题目要求:读出tomcat-users.xml文件

答案:使用Webscarab截取包,把要访问的文件名改成“../../../conf/tomcat-users.xml”

LAB: Role Based Access Control(基于角色的访问控制)

state1:要求在Tom的身份下,实现admin才有的删除操作,John就是个admin,所有用户的密码为首个单词。很简单,又没做身份验证,所以只要把deleteprofile时候的表单复制到viewprofile操作,做做修改就可以啦。

image

state3和state1相似

state2和state4是修改源码使得漏洞被修复,我用的不是developer版本,做不了,有时间补

 

Remote Admin Access

这个确实出的有点扯。。

就是要用admin访问一些东西,毕竟我们在guest的用户下,做题关键在下面的Admin Function上。。

在访问的时候,加上 admin=true传递参数过去;我估计这道题出题点是这样考虑的,一般我们在发送网页的时候,发送的到底是admin还是普通用户请求,就是靠一些变量来标识的,所以猜测这个网页的标识是admin,通过get赋值覆盖,使得呈现的内容是admin的。

所以你看,就会得到:

image

访问的时候要注意,每次都要admin=true加上去。

【AJAX Security】

AJAX即“Asynchronous JavaScript and XML”(异步javascript和XML),AJAX并非缩写词,而是由Jesse James Gaiiett创造的名词,是指一种创建交互式网页应用的网页开发技术

AJAX 指异步 JavaScript 及 XML(Asynchronous JavaScript And XML)。

LAB: DOM-Based cross-site scripting

根据提示,连代码都不用改,最后一个stage5是要手动修改文件抵御攻击。

image

关于escapeHTML,看看这个http://directwebremoting.org/dwr/documentation/browser/util/escapeHtml.html

LAB: Client Side Filtering

题目要求:以低身份查看你的boss Neville Bartholomew的信息,然后输入她的薪金,就过了第一个stage

解答:你截取包看看它的返回,我一开始误以为提交不同的userId,然后就能得到结果,就用webscarab做了一个fuzz测试,测试了id从100-129的返回,发现返回都是:

image

这才明白,原来这道题,是把所有人员的信息都down到了本地,所以用Firebug也是可以查到的。

stage2呢就是修改文件,使得攻击不成功。也就是提供条件过滤,题目提示用XPath,不过我真的没学过。。查了一下资料,发现大家都是这么改的:

image

所以,一定要做过滤啊啊啊啊啊,一定要做权限检查啊啊啊啊啊

Same Origin Policy Protection

你点击两个网址就过关了。

其实这道题是帮助理解题,SOP使得不同源的访问被拒绝。这个实验写得比较好的是,SEEDLabs的

DOM Injection

怎么说,这题我目前也不太懂出题点,似乎是模仿了一般软件的激活证明。好像是,只有激活码对了才能将【Activate!】按钮激活的意思?

反正就去查了源码,发现了脚本:

  1 <script>
  2 function validate() {
  3 var keyField = document.getElementById('key');
  4 var url = 'attack?Screen=63&menu=400&from=ajax&key=' + encodeURIComponent(keyField.value);
  5 if (typeof XMLHttpRequest != 'undefined') {
  6 req = new XMLHttpRequest();
  7 } else if (window.ActiveXObject) {
  8 req = new ActiveXObject('Microsoft.XMLHTTP');
  9    }
 10    req.open('GET', url, true);
 11    req.onreadystatechange = callback;
 12    req.send(null);
 13 }
 14 function callback() {
 15     if (req.readyState == 4) { 
 16         if (req.status == 200) { 
 17             var message = req.responseText;
 18    var result = req.responseXML.getElementsByTagName('reward');
 19     var messageDiv = document.getElementById('MessageDiv');
 20   try {
 21 			 eval(message);
 22     
 23         messageDiv.innerHTML = 'Correct licence Key.' 
 24       }
 25   catch(err)
 26   { 
 27     messageDiv.innerHTML = 'Wrong license key.'
 28 } 
 29     }}}
 30 </script>
DOM Injection

第4行代码,是提交的url,然后用XMLHTTPRequest对象发包。最后应该是用callback()函数做了验证。再看24行,eval()会执行message的信息,估摸着这里面应该要有激活【Activate!】按钮的语句,所以我们截取response,往里面加一句激活语句,试试看。

最好加在body末尾

<script>document.form.SUBMIT.disabled = false;</script>

然后按钮被激活!

ps:其实吧,你把里面disabled属性去掉更快。。

<input disabled value='Activate!' name='SUBMIT' type='SUBMIT'>

XML Injection

AJAX用xml和用户交互,但是又不做检查,这道题就是想我们用100分买2000分3000分的东西,就试着先买20分的咯,发现它有一个参数checkin1001

image

买第二件,改成了check1002..所以,猜想,买第四第五件,就是check1004 check1005咯,一修改,就好了。当然,网上还有的做法是,在输入ID后,修改response:

修改代码,在<root></root>中添加以下代码,修改后保存: 
<reward>WebGoat Core Duo Laptop 2000 Pts</reward>
<reward>WebGoat Hawaii Cruise 3000 Pts</reward>

这样,选择框里就会多出我们要的几项。

这道题就是告诉我们,一定要做检查啊啊啊啊啊

【JSON Injection】

用便宜的票价买贵的机票。

image

查看一下发送的包,发现传回去的数据参数如下:

travelFrom=BOS&travelTo=SEA&radio1=on&SUBMIT=Submit&price2Submit=%24300

把它改成radio0试试。。

所以,一定要检查,尽量不要信任用户输入。。

Slient Transactions Attacks(默默汇钱,哈哈哈哈)

模仿银行的汇款操作,要求跳过客户端的验证,查看源码,发现onClick=‘processData()’,这是一个验证程序,所以我们要跳过它,两个方法:

1 在加载这个页面的时候,截取response,把OnClick的值直接改成‘submitData()’,然后页面上填写账号和转账额,提交。

2 在浏览器里输入,javascript: submitData(12345567,11111000) 好嘛,居然直接调用函数,我服。。

Dangerous Use of Eval

题目要我们alert出cookie。

Eval可以直接执行里面的语句,运行一遍,发现居然它alert了卡号和三位数字码,我们看这道题的源码

<input type='BUTTON' onclick="purchase('lessons/Ajax/eval.jsp');" value='Purchase'>
 

题目又说了是eval的问题,所以估计是添加语句。修改最后一个输入框,123');alert(document.cookie);('

之所以用单引号,我觉得,是试出来的。。

Insecure Client Storage(不安全的客户存储

事实证明,东西放在客户端是多么。。

stage1:要你,找到一个优惠码(coupon code)

image

这个优惠码,额,好奇怪的,所以我就查了源码,

image

然后就在这个函数出加断点,如图:

image

发现了一个解密后的有效码:PLATINUM

image

到Stage2:

image

firebug审查元素,其实也可以在webscarab提交的时候,再修改,这里为了熟悉firebug的使用,所以才用的:

image

原文地址:https://www.cnblogs.com/puluotiya/p/5321444.html