<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    WebScarab如何修改代理會話

    目標

    對通過代理的請求或響應(或兩者)進行重復修改

    方法

    編寫一個腳本,根據需要進行修改。腳本可以在代理->BeanShell插件中編寫,或者附加到ScriptManager接口中的Hooks上。根據您的選擇,腳本本身會有一些變化。

    存在哪些方法來操作請求和響應?

    請求和響應分別是請求和響應類的實例。這兩個類都擴展了Message類,Message類為這兩個類提供了共同的功能。

    Message類提供了以下方法,這些方法對請求類和響應類都很常見:

      String[] getHeaderNames()
      String getHeader(String name)
      void setHeader(String name, String value)
      void addHeader(String name, String value)
      void deleteHeader(String name)
      NamedValue[] getHeaders()
      void setheaders(NamedValue[] headers)
      byte[] getContent()
      void setContent(byte[] content)

    Request類添加了以下方法:

      String getMethod()
      void setMethod(String method)
      HttpUrl getURL()
      void setURL(HttpUrl url)
      void setURL(String url) throws MalformedURLException
      String getVersion()
      void setVersion(String version)

    Response類添加了以下方法:

      String getVersion();
      void setVersion(String version);
      String getStatus();
      void setStatus(String status);
      String getMessage();
      void setMessage(String message);
      String getStatusLine();

    使用代理->BeanShell插件

    提供了代理->BeanShell插件和一個非常簡單的腳本,用于向您展示如何訪問請求和響應對象。不幸的是,對于如何從那里繼續前進,它并沒有提供多少幫助。這里有一個例子,告訴你如何拒絕所有Flash內容的請求:

      import org.owasp.webscarab.model.HttpUrl;
      import org.owasp.webscarab.model.Request;
      import org.owasp.webscarab.model.Response;
      import org.owasp.webscarab.httpclient.HTTPClient;
      import java.io.IOException;
    
      public Response fetchResponse(HTTPClient nextPlugin, Request request) throws IOException {
         HttpUrl url = request.getURL();
         if (url.toString().endsWith(".swf"))
             throw new IOException("No flash content allowed");
         response = nextPlugin.fetchResponse(request);
         return response;
      }

    下面的例子展示了如何在JavaScript響應中替換特定的字符串:

      import org.owasp.webscarab.model.Request;
      import org.owasp.webscarab.model.Response;
      import org.owasp.webscarab.httpclient.HTTPClient;
      import java.io.IOException;
    
      public Response fetchResponse(HTTPClient nextPlugin, Request request) throws IOException {
         response = nextPlugin.fetchResponse(request);
         String cType = response.getHeader("Content-Type");
         if (cType != null && cType.endsWith("javascript")) {
            byte[] bytes = response.getContent();
            if (bytes != null) {
               String content = new String(bytes);
               content = content.replace("my search string", "my replacement");
               response.setContent(content.getBytes());
            }
         }
         return response;
      }

    那么,ScriptManager是什么呢?

    ScriptManager旨在為整個WebScarab的腳本編寫提供一個更通用的接口。每個插件都可以提供帶有附加腳本的hooks。每個hook都提供了如何使用它的簡要說明。代理提供了3個hooks:

    • 允許連接

      當從瀏覽器接收到一個新連接時調用connection. getaddress()和connection. closeconnection()來決定并做出反應

    在WebScarab允許從非本地主機接口進行連接的安裝中,此hook旨在提供一種安全性措施。下面是它的用法示例:

      import java.net.InetAddress;
    
      InetAddress from = connection.getAddress();
      if (! from.getHostAddress().startsWith("192.168.1.")) 
         connection.closeConnection();

    此腳本拒絕來自192.168.1子網以外主機的所有連接。

    • 攔截請求
      使用connection.getRequest()和connection.setRequest(request)在瀏覽器提交新請求時調用,以執行更改

    下面是一個例子,與上面的例子相對應:

      import org.owasp.webscarab.model.Request;
      import org.owasp.webscarab.model.HttpUrl;
    
      Request request = connection.getRequest();
      HttpUrl url = request.getURL();
      if (url.toString().endsWith(".swf"))
          throw new IOException("No flash content allowed");
    • 攔截的反應
      當請求被提交到服務器并收到響應時調用。使用connection.getResponse()和connection.setResponse(response)執行更改

    下面是一個例子,同樣與上面的例子相對應:

      import org.owasp.webscarab.model.Response;
    
      Response response = connection.getResponse();
      String cType = response.getHeader("Content-Type");
      if (cType != null && cType.endsWith("javascript")) {
         byte[] bytes = response.getContent();
         if (bytes != null) {
            String content = new String(bytes);
            content = content.replace("my search string", "my replacement");
            response.setContent(content.getBytes());
            connection.setResponse(response);
         }
      }

    注意,要使您的更改實際生效,您必須調用setResponse(response),因為您修改的對象只是一個副本,而不是實際的響應對象。

    本文章首發在 網安wangan.com 網站上。

    上一篇 下一篇
    討論數量: 0
    只看當前版本


    暫無話題~
    亚洲 欧美 自拍 唯美 另类