Skip to content

Commit c2a6970

Browse files
author
isayan
committed
WebSocket Logging Tool対応
1 parent 5b83e24 commit c2a6970

File tree

9 files changed

+140
-79
lines changed

9 files changed

+140
-79
lines changed

Readme-ja.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Burp suite 拡張 YaguraExtender
1+
Burp suite 拡張 YaguraExtension
22
=============
33

44
Language/[English](Readme.md)
@@ -46,13 +46,13 @@ gradlew release
4646
* v2023.1.2以上 (http://www.portswigger.net/burp/)
4747

4848
### 開発環境
49-
* NetBeans 20 (https://netbeans.apache.org/)
49+
* NetBeans 22 (https://netbeans.apache.org/)
5050
* Gradle 7.6 (https://gradle.org/)
5151
* asciidoc (http://asciidoc.org/)
5252

5353
## 必須ライブラリ
5454
ビルドには別途 [BurpExtensionCommons](https://github.com/raise-isayan/BurpExtensionCommons) のライブラリを必要とします。
55-
* BurpExtensionCommons v3.0.x
55+
* BurpExtensionCommons v3.2.x
5656

5757
### 利用ライブラリ
5858

Readme.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Burp suite Extension YaguraExtender
1+
Burp suite Extension YaguraExtension
22
=============
33

44
Language/[日本語](Readme-ja.md)
@@ -46,13 +46,13 @@ gradlew release
4646
* v2023.1.2 or higher (http://www.portswigger.net/burp/)
4747

4848
### Development environment
49-
* NetBeans 20 (https://netbeans.apache.org/)
49+
* NetBeans 22 (https://netbeans.apache.org/)
5050
* Gradle 7.6 (https://gradle.org/)
5151
* asciidoc (http://asciidoc.org/)
5252

5353
## Required library
5454
Building requires a [BurpExtensionCommons](https://github.com/raise-isayan/BurpExtensionCommons) library.
55-
* BurpExtensionCommons v3.0.x
55+
* BurpExtensionCommons v3.2.x
5656

5757
## Use Library
5858
* Apache common codec (https://commons.apache.org/proper/commons-codec/)

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
netbeans.org-netbeans-modules-javascript2-requirejs.enabled=true
22
release_version_major=3.1
3-
release_version_minor=3.2
3+
release_version_minor=3.3
44
netbeans.license=mit

release/YaguraExtension-v3.1.jar

1.58 KB
Binary file not shown.

src/main/java/burp/BurpExtension.java

Lines changed: 62 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,14 @@
4141
import burp.api.montoya.proxy.websocket.ProxyWebSocketCreationHandler;
4242
import burp.api.montoya.ui.editor.extension.ExtensionProvidedWebSocketMessageEditor;
4343
import burp.api.montoya.ui.editor.extension.WebSocketMessageEditorProvider;
44+
import burp.api.montoya.websocket.BinaryMessage;
45+
import burp.api.montoya.websocket.BinaryMessageAction;
46+
import burp.api.montoya.websocket.Direction;
47+
import burp.api.montoya.websocket.MessageHandler;
48+
import burp.api.montoya.websocket.TextMessage;
49+
import burp.api.montoya.websocket.TextMessageAction;
50+
import burp.api.montoya.websocket.WebSocketCreated;
51+
import burp.api.montoya.websocket.WebSocketCreatedHandler;
4452
import java.awt.Component;
4553
import java.awt.event.MouseAdapter;
4654
import java.awt.event.MouseEvent;
@@ -1825,27 +1833,65 @@ private HttpMessage replaceProxyMessage(
18251833

18261834
}
18271835

1828-
protected final class WebSocketCreationHander implements ProxyWebSocketCreationHandler {
1836+
protected final class WebSocketCreationHander implements ProxyWebSocketCreationHandler, WebSocketCreatedHandler {
18291837

18301838
private final MontoyaApi api;
18311839

18321840
public WebSocketCreationHander(MontoyaApi api) {
18331841
this.api = api;
18341842
api.proxy().registerWebSocketCreationHandler(this);
1843+
api.websockets().registerWebSocketCreatedHandler(this);
18351844
}
18361845

18371846
@Override
18381847
public void handleWebSocketCreation(ProxyWebSocketCreation proxyWebSocketCreation) {
1839-
proxyWebSocketCreation.proxyWebSocket().registerProxyMessageHandler(new WebSocktHander(api, proxyWebSocketCreation));
1848+
proxyWebSocketCreation.proxyWebSocket().registerProxyMessageHandler(new WebSocktProxyMessageHander(api, proxyWebSocketCreation));
1849+
}
1850+
1851+
@Override
1852+
public void handleWebSocketCreated(WebSocketCreated webSocketCreated) {
1853+
webSocketCreated.webSocket().registerMessageHandler(new WebSocktMessageHander(api, webSocketCreated));
18401854
}
18411855

18421856
}
18431857

1844-
protected final class WebSocktHander implements ProxyMessageHandler {
1858+
protected final class WebSocktMessageHander implements MessageHandler {
1859+
private final MontoyaApi api;
1860+
private final WebSocketCreated webSocketCreated;
1861+
1862+
public WebSocktMessageHander(MontoyaApi api, WebSocketCreated webSocketCreated) {
1863+
this.api = api;
1864+
this.webSocketCreated = webSocketCreated;
1865+
}
1866+
1867+
@Override
1868+
public TextMessageAction handleTextMessage(TextMessage textMessage) {
1869+
// WebSockt 出力
1870+
if (getProperty().getLoggingProperty().isAutoLogging() && getProperty().getLoggingProperty().isWebSocketLog()) {
1871+
ToolSource toolSource = webSocketCreated.toolSource();
1872+
logging.writeWebSocketToolMessage(toolSource.toolType(), webSocketCreated, textMessage);
1873+
}
1874+
return TextMessageAction.continueWith(textMessage);
1875+
}
1876+
1877+
@Override
1878+
public BinaryMessageAction handleBinaryMessage(BinaryMessage binaryMessage) {
1879+
// WebSockt 出力
1880+
if (getProperty().getLoggingProperty().isAutoLogging() && getProperty().getLoggingProperty().isWebSocketLog()) {
1881+
ToolSource toolSource = webSocketCreated.toolSource();
1882+
logging.writeWebSocektToolMessage(toolSource.toolType(), webSocketCreated, binaryMessage);
1883+
}
1884+
return BinaryMessageAction.continueWith(binaryMessage);
1885+
}
1886+
1887+
}
1888+
1889+
1890+
protected final class WebSocktProxyMessageHander implements ProxyMessageHandler {
18451891
private final MontoyaApi api;
18461892
private final ProxyWebSocketCreation proxyWebSocketCreation;
18471893

1848-
public WebSocktHander(MontoyaApi api, ProxyWebSocketCreation proxyWebSocketCreation) {
1894+
public WebSocktProxyMessageHander(MontoyaApi api, ProxyWebSocketCreation proxyWebSocketCreation) {
18491895
this.api = api;
18501896
this.proxyWebSocketCreation = proxyWebSocketCreation;
18511897
proxyWebSocketCreation.proxyWebSocket().registerProxyMessageHandler(this);
@@ -1854,35 +1900,39 @@ public WebSocktHander(MontoyaApi api, ProxyWebSocketCreation proxyWebSocketCreat
18541900
@Override
18551901
public TextMessageReceivedAction handleTextMessageReceived(InterceptedTextMessage interceptedTextMessage) {
18561902
// WebSockt 出力
1857-
if (getProperty().getLoggingProperty().isAutoLogging() && getProperty().getLoggingProperty().isWebSocketLog()) {
1858-
logging.writeWebSocktFinalMessage(proxyWebSocketCreation, interceptedTextMessage);
1903+
if (getProperty().getLoggingProperty().isAutoLogging() && getProperty().getLoggingProperty().isWebSocketLog() &&
1904+
interceptedTextMessage.direction() == Direction.SERVER_TO_CLIENT) {
1905+
logging.writeWebSocketFinalMessage(this.proxyWebSocketCreation, interceptedTextMessage);
18591906
}
18601907
return TextMessageReceivedAction.continueWith(interceptedTextMessage);
18611908
}
18621909

18631910
@Override
18641911
public TextMessageToBeSentAction handleTextMessageToBeSent(InterceptedTextMessage interceptedTextMessage) {
18651912
// WebSockt 出力
1866-
if (getProperty().getLoggingProperty().isAutoLogging() && getProperty().getLoggingProperty().isWebSocketLog()) {
1867-
logging.writeWebSocktFinalMessage(proxyWebSocketCreation, interceptedTextMessage);
1913+
if (getProperty().getLoggingProperty().isAutoLogging() && getProperty().getLoggingProperty().isWebSocketLog() &&
1914+
interceptedTextMessage.direction() == Direction.CLIENT_TO_SERVER) {
1915+
logging.writeWebSocketFinalMessage(proxyWebSocketCreation, interceptedTextMessage);
18681916
}
18691917
return TextMessageToBeSentAction.continueWith(interceptedTextMessage);
18701918
}
18711919

18721920
@Override
18731921
public BinaryMessageReceivedAction handleBinaryMessageReceived(InterceptedBinaryMessage interceptedBinaryMessage) {
18741922
// WebSockt 出力
1875-
if (getProperty().getLoggingProperty().isAutoLogging() && getProperty().getLoggingProperty().isWebSocketLog()) {
1876-
logging.writeWebSocktFinalMessage(proxyWebSocketCreation, interceptedBinaryMessage);
1923+
if (getProperty().getLoggingProperty().isAutoLogging() && getProperty().getLoggingProperty().isWebSocketLog() &&
1924+
interceptedBinaryMessage.direction() == Direction.SERVER_TO_CLIENT) {
1925+
logging.writeWebSocketFinalMessage(proxyWebSocketCreation, interceptedBinaryMessage);
18771926
}
18781927
return BinaryMessageReceivedAction.continueWith(interceptedBinaryMessage);
18791928
}
18801929

18811930
@Override
18821931
public BinaryMessageToBeSentAction handleBinaryMessageToBeSent(InterceptedBinaryMessage interceptedBinaryMessage) {
18831932
// WebSockt 出力
1884-
if (getProperty().getLoggingProperty().isAutoLogging() && getProperty().getLoggingProperty().isWebSocketLog()) {
1885-
logging.writeWebSocktFinalMessage(proxyWebSocketCreation, interceptedBinaryMessage);
1933+
if (getProperty().getLoggingProperty().isAutoLogging() && getProperty().getLoggingProperty().isWebSocketLog() &&
1934+
interceptedBinaryMessage.direction() == Direction.CLIENT_TO_SERVER) {
1935+
logging.writeWebSocketFinalMessage(proxyWebSocketCreation, interceptedBinaryMessage);
18861936
}
18871937
return BinaryMessageToBeSentAction.continueWith(interceptedBinaryMessage);
18881938
}

src/main/java/yagura/Config.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,20 @@ public static String getProxyLogMessageName() {
3636
return "proxy-message.log";
3737
}
3838

39-
public static String getWebSocketLogMessageName() {
40-
return "websocket-message.log";
39+
public static String getToolLogName(String toolName) {
40+
return String.format("burp_tool_%s.log", toolName);
4141
}
4242

43-
public static String getWebSocketLogFinalMessageName() {
44-
return "websocket-final-message.log";
43+
public static String getWebSocketToolLogName(String toolName) {
44+
return String.format("websocket_tool_%s.log", toolName);
4545
}
4646

47-
public static String getToolLogName(String toolName) {
48-
return String.format("burp_tool_%s.log", toolName);
47+
// public static String getWebSocketLogMessageName() {
48+
// return "websocket-message.log";
49+
// }
50+
51+
public static String getWebSocketLogFinalMessageName() {
52+
return "websocket-final-message.log";
4953
}
5054

5155
}

0 commit comments

Comments
 (0)