zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    多任务异步操作在爬虫中的应用
    selenium怎样避免被服务器检测
    python查看文件夹下所有文件
    使用selenium实现站长素材图片采集
    云打码接口
    django的请求生命周期
    django中间件
    Python之Hello World的条件输出实例
    项目要部署到远程的服务器:
    饭侠main.js
  • 原文地址:https://www.cnblogs.com/puluotiya/p/5321444.html
Copyright © 2011-2022 走看看