WebGoat系列实验Buffer Overflows & Code Quality & Concurrency
WebGoat系列实验Buffer Overflows & Code Quality & Concurrency
Off-by-One Overflows
- 实验需要访问OWASP Hotel页面,找出VIP客户的房间号。
- Step 1中需要登记用户的First Name,Last Name以及Room Number,随意填入数据,点击Submit提交即可。
- Step 2中需要确认住宿的时间。查看网页源代码,发现在Step 1中输入的3个参数是hidden input方式。
- 选择$9.99 - 24hours选项,点击Accept Terms按钮。
- 此时使用Burp拦截GET请求报文。
- 将GET请求报文发送到intruder中,设置Attack type为Sniper,分别将last_name,first_name和room_no设置为payload的位置,Payload type选择Character blocks模式(也可以使用Numbers模式填充房间号,但是位数的增长比较慢...),Payload选项随意选择了一个字符9,最小长度为1,最大长度为10000,步长设置为1000。
- exploit后发现使用房间号room_no可以使得程序发生Buffer Overflow错误,从而获取VIP的房间信息。
- 分析payload数据发现,程序大约从room_no为5000个9开始发生Buffer Overflow错误,当room_no超过约7000个9的时候,服务器返回400的错误信息。表明此时发出的GET请求报文已经不合法。
- 返回Step 1,将获取到的VIP房间信息填写到输入框中,点击Submit通过实验。
Discover Clues in the HTML
- 寻找登录的线索。
- 查看源代码发现遗留的用户名与密码。
- 成功登录。
Shopping Cart Concurrency Flaw
- 需要攻击网页的并发缺陷,用更低的价格购买商品。
- 将每件商品的数目设定为2,点击Update Cart按钮。
- 使用Burp截取GET请求报文,发现更新内容是对4件商品数目的更新。
- 在另外一个标签页中打开购物界面,将所有商品的数目设定为1,点击Purchase按钮,出现Confirm按钮与Cancel按钮。
- 使用Burp截取的GET请求报文表明,此时仍向服务器发送商品的数目。
- 点击Confirm按钮,使用Burp拦截,发现此时已经没有在报文中发送商品价格,推测商品的价格保存在服务器端(?),然后丢弃该报文。
- 在前一个标签页中点击Update Cart按钮更新价格,在第二个标签页中点击Confirm按钮,通过实验。
Thread Safety Problems
- Web应用程序可以同时处理很多http请求。开发人员经常使用的变量不是线程安全的。线程安全是指一个对象或类的领域在多线程同时使用的时候总是保持有效的状态。它往往可以利用并发错误,精确地在同一时间同一个页面加载另一个用户。
- 同时打开两个标签页,一个填写jeff,另一个填写dave,快速的点击两个标签页的Submit按钮,就会出现两个标签页显示的用户都是同一个的错误。