mirror of
https://github.com/yaklang/yaklang-chrome-extension.git
synced 2026-09-27 05:31:53 +08:00
feat(wsc) fuzzer demo
This commit is contained in:
@@ -13,7 +13,10 @@ chrome.runtime.onMessage.addListener(function (msg, sender, sendResponse) {
|
|||||||
console.info("Start to connect websocket")
|
console.info("Start to connect websocket")
|
||||||
const host = msg['host'] || "127.0.0.1"
|
const host = msg['host'] || "127.0.0.1"
|
||||||
const port = msg['port'] || 11212
|
const port = msg['port'] || 11212
|
||||||
websocketManager.connectWebsocket(`ws://${host}:${port}/?token=${"a"}`, port)
|
websocketManager.connectWebsocket(`ws://${host}:${port}/?token=chrome`, port)
|
||||||
|
break;
|
||||||
|
case ActionType.SEND_MESSAGE:
|
||||||
|
websocketManager.sendMessage(msg.message);
|
||||||
break;
|
break;
|
||||||
case ActionType.DISCONNECT:
|
case ActionType.DISCONNECT:
|
||||||
websocketManager.disconnectWebsocket();
|
websocketManager.disconnectWebsocket();
|
||||||
@@ -27,7 +30,9 @@ chrome.runtime.onMessage.addListener(function (msg, sender, sendResponse) {
|
|||||||
scheme: msg.scheme,
|
scheme: msg.scheme,
|
||||||
host: msg.host,
|
host: msg.host,
|
||||||
port: parseInt(`${msg.port}`)
|
port: parseInt(`${msg.port}`)
|
||||||
}
|
},
|
||||||
|
// enable 127.0.0.1 && localhost to mitmproxy
|
||||||
|
bypassList: ["<-loopback>"]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
scope: 'regular',
|
scope: 'regular',
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
break;
|
break;
|
||||||
case 'CONTENT_EVAL_CODE':
|
case 'CONTENT_EVAL_CODE':
|
||||||
const code = event.data.value.code;
|
const code = event.data.value.code;
|
||||||
|
console.log(code)
|
||||||
result = (() => {
|
result = (() => {
|
||||||
try {
|
try {
|
||||||
return eval(code);
|
return eval(code);
|
||||||
|
|||||||
+57
-1
@@ -1,5 +1,6 @@
|
|||||||
export const ActionType = {
|
export const ActionType = {
|
||||||
CONNECT: 'connect',
|
CONNECT: 'connect',
|
||||||
|
SEND_MESSAGE: 'send_message',
|
||||||
DISCONNECT: 'disconnect',
|
DISCONNECT: 'disconnect',
|
||||||
STATUS: 'status',
|
STATUS: 'status',
|
||||||
PROXY_STATUS: 'proxy_status',
|
PROXY_STATUS: 'proxy_status',
|
||||||
@@ -25,6 +26,7 @@ export class WebSocketManager {
|
|||||||
};
|
};
|
||||||
|
|
||||||
this.socket.onmessage = (event) => {
|
this.socket.onmessage = (event) => {
|
||||||
|
console.log("event", event)
|
||||||
this.handleMessage(event.data);
|
this.handleMessage(event.data);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -37,6 +39,18 @@ export class WebSocketManager {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sendMessage(message) {
|
||||||
|
if (this.isConnected()) {
|
||||||
|
try {
|
||||||
|
this.socket.send(JSON.stringify(message));
|
||||||
|
} catch (e) {
|
||||||
|
console.error("Error sending message:", e);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.error("WebSocket is not connected.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
disconnectWebsocket() {
|
disconnectWebsocket() {
|
||||||
if (this.socket) {
|
if (this.socket) {
|
||||||
try {
|
try {
|
||||||
@@ -77,7 +91,49 @@ export class WebSocketManager {
|
|||||||
return this.socket && this.socket.readyState === WebSocket.OPEN;
|
return this.socket && this.socket.readyState === WebSocket.OPEN;
|
||||||
}
|
}
|
||||||
|
|
||||||
handleMessage(message) {
|
async handleMessage(message) {
|
||||||
console.log("message", message)
|
console.log("message", message)
|
||||||
|
message = JSON.parse(message);
|
||||||
|
if (message && message.type === "eval") {
|
||||||
|
console.log("msg ", message)
|
||||||
|
const code = message.code;
|
||||||
|
// try {
|
||||||
|
// const [tab] = await getTab();
|
||||||
|
// chrome.runtime.sendMessage({
|
||||||
|
// action: ActionType.INJECT_SCRIPT, tabId: tab.id, value: {
|
||||||
|
// mode: "CONTENT_EVAL_CODE", code: code,
|
||||||
|
// },
|
||||||
|
// });
|
||||||
|
// } catch (error) {
|
||||||
|
// console.log(error.toString())
|
||||||
|
// }
|
||||||
|
try {
|
||||||
|
const [tab] = await getTab();
|
||||||
|
// 注入 JS 脚本
|
||||||
|
await chrome.scripting.executeScript({
|
||||||
|
target: {tabId: tab.id},
|
||||||
|
files: ['content.js']
|
||||||
|
});
|
||||||
|
|
||||||
|
// 发送消息
|
||||||
|
const response = await chrome.tabs.sendMessage(tab.id, {
|
||||||
|
type: ActionType.INJECT_SCRIPT,
|
||||||
|
value: {
|
||||||
|
mode: "CONTENT_EVAL_CODE", code: code,
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log("response", response);
|
||||||
|
if (response && response.action === ActionType.TO_EXTENSION_PAGE) {
|
||||||
|
await chrome.runtime.sendMessage(response);
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Script or CSS injection failed:', err);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getTab() {
|
||||||
|
return chrome.tabs.query({active: true, lastFocusedWindow: true})
|
||||||
|
}
|
||||||
+1
-1
@@ -15,7 +15,7 @@ function App() {
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<div className="App">
|
<div className="App">
|
||||||
{/*<Contro/>*/}
|
<Contro/>
|
||||||
<Proxifier/>
|
<Proxifier/>
|
||||||
|
|
||||||
<EvalInTab/>
|
<EvalInTab/>
|
||||||
|
|||||||
@@ -13,9 +13,12 @@ export const EvalInTab: React.FC<EvalInTabProps> = () => {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
wsc.onWSCMessage((message) => {
|
wsc.onWSCMessage((message) => {
|
||||||
|
console.log("message from content script:", message)
|
||||||
if (message.action === wsc.ActionType.TO_EXTENSION_PAGE) {
|
if (message.action === wsc.ActionType.TO_EXTENSION_PAGE) {
|
||||||
console.log("res:", message.result);
|
console.log("eval in tab:", message.result);
|
||||||
alert("from content script: " + JSON.stringify(message.result));
|
// alert("from content script: " + JSON.stringify(message.result));
|
||||||
|
// 发送结果
|
||||||
|
wsc.sendMessage({"type": "chrome-extension", res: message.result})
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}, []);
|
}, []);
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
export namespace wsc {
|
export namespace wsc {
|
||||||
export enum ActionType {
|
export enum ActionType {
|
||||||
CONNECT = 'connect',
|
CONNECT = 'connect',
|
||||||
|
SEND_MESSAGE = 'send_message',
|
||||||
|
|
||||||
DISCONNECT = 'disconnect',
|
DISCONNECT = 'disconnect',
|
||||||
STATUS = 'status',
|
STATUS = 'status',
|
||||||
PROXY_STATUS = 'proxy_status',
|
PROXY_STATUS = 'proxy_status',
|
||||||
@@ -19,6 +21,13 @@ export namespace wsc {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function sendMessage(message: any) {
|
||||||
|
chrome.runtime.sendMessage({
|
||||||
|
action: ActionType.SEND_MESSAGE,
|
||||||
|
message: message,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
export function disconnect() {
|
export function disconnect() {
|
||||||
chrome.runtime.sendMessage({
|
chrome.runtime.sendMessage({
|
||||||
action: ActionType.DISCONNECT,
|
action: ActionType.DISCONNECT,
|
||||||
|
|||||||
Reference in New Issue
Block a user