【小標】WebScarab簡介
WebScarab是一個用來分析「使用HTTP和HTTPS傳輸協定的應用程式」的框架(framework)。它使用Java開發,因此可以適用於多種作業系統。WebScarab有多種作業模式,藉由多個plugin來完成實做。
在大部分的使用情境裡,WebScarab作用為「攔截代理程式(intercepting
proxy)」,可以在使用者將請求(request)資料由瀏覽器送出至伺服器的過程中,予以攔截並修改;也可以攔截並修改伺服器對瀏覽器的回應(response)資料,藉此來測試網站的安全性設計。參考資料如下。
1. WebScarab為OWASP的子專案:https://www.owasp.org/index.php/Category:OWASP_WebScarab_Project
下載與安裝方式:
2. 下載「webscarab-installer-20070504-1631.jar」並點擊檔案,將可指定路徑進行解壓縮。
3. 點選解壓後路徑裡的「webscarab.jar」,即可執行。
圖7-05
webscarab-installer-20070504-1631.jar解壓縮後資料夾
【小標】使用WebScarab攔截並修改request
WebScarab功能強大,以下介紹攔截並修改request的步驟:
【STEP01】預設使用「lite
interface」,即簡易版的功能介面,只有2個功能頁籤;在「Intercept」頁籤可以勾選是否攔截request和response:
圖7-06 簡易版的功能介面
【STEP02】視需要切換為「full-featured
interface」:
圖7-07 預備切換為完整版功能介面
【STEP03】點選「Proxy」頁籤,再點選「Manual
Edit」頁籤,可以勾選是否攔截request和response:
圖7-08 完整版功能介面
【STEP04】勾選攔截「Intercept
request」,之後瀏覽器送出的request都將被WebScarab攔截:
圖7-09 設定攔截request/response對象
【STEP05】同步調整瀏覽器Proxy設定,填入位址「localhost」與連接埠「8008」:
圖7-10 修改瀏覽器Proxy設定
【STEP06】開啟IE,以WebGoat進行測試:http://localhost.:8080/WebGoat。注意在localhost後面加一個點「.」,讓IE使用設定的proxy:
圖7-11
http://localhost.:8080/WebGoat
【STEP07】瀏覽器送出的連結會被WebScarab攔截,並彈出以下視窗:
圖7-12
WebScarab攔截http://localhost.:8080/WebGoat
【STEP08】在瀏覽器輸入帳號jim123、密碼jim123後送出,WebScarab將攔截其request。除非WebScarab放行,否則帳密無法傳送至主機:
圖7-13
WebScarab攔截送至網站的request中的參數username與password
【STEP09】WebScarab攔截其request後,可以修改username後再點擊「Accept
changes」送出:
圖7-14 WebScarab可修改請求參數
【STEP10】因為帳號被修改而登入WebGoat失敗:
圖7-15
WebGoat登入失敗
【小標】修改關鍵參數
ToBuyPage.java
@WebServlet("/ToBuyPage") public class ToBuyPage extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setAttribute("unitPrice", 10000); RequestDispatcher rd = request.getRequestDispatcher("/webScarab/buy.jsp"); rd.forward(request, response); } }Buy.java
@WebServlet("/Buy") public class Buy extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int unitPrice = Integer.valueOf(request.getParameter("unitPrice")); int quantity = Integer.valueOf(request.getParameter("quantity")); response.getWriter().append("Total Price: " + unitPrice * quantity); } }buy.jsp
<%@ page contentType="text/html;charset=UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <html> <head> <title>shopping</title> </head> <body> <form action='<c:url value="/Buy"/>' method='POST'> <input type='hidden' name='unitPrice' value='${unitPrice}' /> Buy Computer: <br /><hr> Quantity: <input type='text' name='quantity' /> <br /> <br /> <input type='submit' value='Buy' /> </form> </body> </html>
問題:
1. 如何竄改表單參數【unitPrice】?
2. 如何避免表單參數【unitPrice】被竄改?