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),因為您修改的對象只是一個副本,而不是實際的響應對象。
WebScarab中文漢化使用教程
推薦文章: