WebGoat系列实验Buffer Overflows & Code Quality & Concurrency

Off-by-One Overflows

  1. 实验需要访问OWASP Hotel页面,找出VIP客户的房间号。
  2. Step 1中需要登记用户的First Name,Last Name以及Room Number,随意填入数据,点击Submit提交即可。
  3. Step 2中需要确认住宿的时间。查看网页源代码,发现在Step 1中输入的3个参数是hidden input方式。
  4. 选择$9.99 - 24hours选项,点击Accept Terms按钮。
  5. 此时使用Burp拦截GET请求报文。
  6. 将GET请求报文发送到intruder中,设置Attack type为Sniper,分别将last_name,first_name和room_no设置为payload的位置,Payload type选择Character blocks模式(也可以使用Numbers模式填充房间号,但是位数的增长比较慢...),Payload选项随意选择了一个字符9,最小长度为1,最大长度为10000,步长设置为1000。
  7. exploit后发现使用房间号room_no可以使得程序发生Buffer Overflow错误,从而获取VIP的房间信息。
  8. 分析payload数据发现,程序大约从room_no为5000个9开始发生Buffer Overflow错误,当room_no超过约7000个9的时候,服务器返回400的错误信息。表明此时发出的GET请求报文已经不合法。
  9. 返回Step 1,将获取到的VIP房间信息填写到输入框中,点击Submit通过实验。

Discover Clues in the HTML

  1. 寻找登录的线索。
  2. 查看源代码发现遗留的用户名与密码。
  3. 成功登录。

Shopping Cart Concurrency Flaw

  1. 需要攻击网页的并发缺陷,用更低的价格购买商品。
  2. 将每件商品的数目设定为2,点击Update Cart按钮。
  3. 使用Burp截取GET请求报文,发现更新内容是对4件商品数目的更新。
  4. 在另外一个标签页中打开购物界面,将所有商品的数目设定为1,点击Purchase按钮,出现Confirm按钮与Cancel按钮。
  5. 使用Burp截取的GET请求报文表明,此时仍向服务器发送商品的数目。
  6. 点击Confirm按钮,使用Burp拦截,发现此时已经没有在报文中发送商品价格,推测商品的价格保存在服务器端(?),然后丢弃该报文。
  7. 在前一个标签页中点击Update Cart按钮更新价格,在第二个标签页中点击Confirm按钮,通过实验。

Thread Safety Problems

  1. Web应用程序可以同时处理很多http请求。开发人员经常使用的变量不是线程安全的。线程安全是指一个对象或类的领域在多线程同时使用的时候总是保持有效的状态。它往往可以利用并发错误,精确地在同一时间同一个页面加载另一个用户。
  2. 同时打开两个标签页,一个填写jeff,另一个填写dave,快速的点击两个标签页的Submit按钮,就会出现两个标签页显示的用户都是同一个的错误。

WebGoat系列实验Buffer Overflows & Code Quality & Concurrency的更多相关文章

  1. WebGoat系列实验Cross-Site Scripting (XSS)

    WebGoat系列实验Cross-Site Scripting (XSS) PhishingTitle 本次实验是在一个已知存在XSS漏洞的页面进行钓鱼攻击.通过使用XSS与HTML注入,在页面中注入 ...

  2. WebGoat系列实验AJAX Security

    WebGoat系列实验AJAX Security DOM Injiction 实验对象是一个接受激活密钥后允许你访问的系统,实验目标是尝试将激活按钮变得可以点击. 直接修改页面代码激活按钮,Chrom ...

  3. WebGoat系列实验Injection Flaws

    WebGoat系列实验Injection Flaws Numeric SQL Injection 下列表单允许用户查看天气信息,尝试注入SQL语句显示所有天气信息. 选择一个位置的天气,如Columb ...

  4. WebGoat系列实验Denial of Service & Insecure Communication

    WebGoat系列实验Denial of Service & Insecure Communication ZipBomb 服务器仅接收ZIP文件,将上传的文件解压,进行操作之后删除.已知服务 ...

  5. WebGoat系列实验Authentication Flaws

    WebGoat系列实验Authentication Flaws Forgot Password Web应用经常给用户提供取回密码的功能,但是许多应用的实现策略实现的很差,用于验证用户的信息非常简单. ...

  6. WebGoat系列实验Access Control Flaws

    WebGoat系列实验Access Control Flaws Using an Access Control Matrix 在基于角色的访问控制策略中,每个角色都代表了一个访问权限的集合.一个用户可 ...

  7. 16.翻译系列:EF 6 Code -First中使用存储过程【EF 6 Code-First系列】

    原文链接:https://www.entityframeworktutorial.net/entityframework6/code-first-insert-update-delete-stored ...

  8. Mininet 系列实验(六)

    写在前面 这次实验遇到了非常多问题,非常非常多,花了很多时间去解决,还是有一些小问题没有解决,但是基本上能完成实验.建议先看完全文再开始做实验. 实验内容 先看一下本次实验的拓扑图: 在该环境下,假设 ...

  9. Mininet 系列实验(四)

    实验内容 本次实验拓扑图: 在该环境下,h0 向 h1 发送数据包,由于在 mininet 脚本中设置了连接损耗率,在传输过程中会丢失一些包,本次实验的目的是展示如何通过控制器计算路径损耗速率(h0- ...

随机推荐

  1. LeetCode 293. Flip Game

    原题链接在这里:https://leetcode.com/problems/flip-game/description/ 题目: You are playing the following Flip ...

  2. 了解Unity中的多线程及使用多线程

    http://blog.csdn.net/hany3000/article/details/16917571 如果你想在游戏中使用多线程,你应该看看这篇文章,线程是一个相当复杂的话题,但如果你掌握了它 ...

  3. python list和元祖

    一,元祖 在python中元祖是只能查询和读取的一组数据,在()内的赋值就是元祖,只有查询和读取的功能: 1.len()方法:查询元祖有多少个元素 s = (') print(len(s)) 结果: ...

  4. 微信无法跳转appstore总结--应用宝微下载申请

    以前是有方法,可以实现微信下跳转appstore的. 大概就是把url改为:http://mp.weixin.qq.com/mp/redirect?url="跳转url"(可编码也 ...

  5. dijstra+输出路径总结

    #include<iostream> #include<math.h> #include<memory.h> using namespace std; #defin ...

  6. DAY11-MYSQL多表查询

    一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 准备表 #建表 create table department( id int, name ) ); create table employ ...

  7. 查看hdfs各目录分别占用多少空间

    之前在网上搜索到的全部单位好像都是byte的,看起来很麻烦,然后自己看了下 hadoop fs -help [hadoop@slave3 java]$ hadoop fs -help Usage: h ...

  8. xftp permission is not allowed

    上传文件时出现此项错误: permission is not allowed, 原因: 1.可能vsfptd没有配置好 写权限没有开启 2.可能是当前的目录权限,上传的用户不具有: 比如:用户hado ...

  9. re 模块 常用正则表达式符号 最常用的匹配语法

      常用正则表达式符号1 '.'     默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行 '^'     匹配字符开头,若指定flags MULTILINE, ...

  10. js对象排序&&倒序

    按照对象的值大小排序对象 function sortObj(obj) { var arr = []; for (var i in obj) { arr.push([obj[i],i]); }; arr ...