diff --git a/js/script.js b/js/script.js index cd245f0..da2d761 100644 --- a/js/script.js +++ b/js/script.js @@ -1,464 +1,464 @@ - // Element selectors - const ipInput = document.querySelector("#ip"); - const portInput = document.querySelector("#port"); - const listenerSelect = document.querySelector("#listener-selection"); - const shellSelect = document.querySelector("#shell"); - // const autoCopySwitch = document.querySelector("#auto-copy-switch"); - const encodingSelect = document.querySelector('#encoding'); - const listenerCommand = document.querySelector("#listener-command"); - const reverseShellCommand = document.querySelector("#reverse-shell-command"); - const bindShellCommand = document.querySelector("#bind-shell-command"); - const msfVenomCommand = document.querySelector("#msfvenom-command"); +// Element selectors +const ipInput = document.querySelector("#ip"); +const portInput = document.querySelector("#port"); +const listenerSelect = document.querySelector("#listener-selection"); +const shellSelect = document.querySelector("#shell"); +// const autoCopySwitch = document.querySelector("#auto-copy-switch"); +const encodingSelect = document.querySelector('#encoding'); +const listenerCommand = document.querySelector("#listener-command"); +const reverseShellCommand = document.querySelector("#reverse-shell-command"); +const bindShellCommand = document.querySelector("#bind-shell-command"); +const msfVenomCommand = document.querySelector("#msfvenom-command"); - const FilterType = { - 'All': 'all', - 'Windows': 'windows', - 'Linux': 'linux', - 'Mac': 'mac' - }; +const FilterType = { + 'All': 'all', + 'Windows': 'windows', + 'Linux': 'linux', + 'Mac': 'mac' +}; - document.querySelector("#os-options").addEventListener("change", (event) => { - const selectedOS = event.target.value; - rsg.setState({ - filter: selectedOS, - }); - }); +document.querySelector("#os-options").addEventListener("change", (event) => { + const selectedOS = event.target.value; + rsg.setState({ + filter: selectedOS, + }); +}); - document.querySelector("#reverse-tab").addEventListener("click", () => { - rsg.setState({ - commandType: CommandType.ReverseShell, - }); - }) +document.querySelector("#reverse-tab").addEventListener("click", () => { + rsg.setState({ + commandType: CommandType.ReverseShell, + }); +}) - document.querySelector("#bind-tab").addEventListener("click", () => { - rsg.setState({ - commandType: CommandType.BindShell, - encoding: "None" - }); - }) +document.querySelector("#bind-tab").addEventListener("click", () => { + rsg.setState({ + commandType: CommandType.BindShell, + encoding: "None" +}); +}) - document.querySelector("#bind-tab").addEventListener("click", () => { - document.querySelector("#bind-shell-selection").innerHTML = ""; - rsg.setState({ - commandType: CommandType.BindShell +document.querySelector("#bind-tab").addEventListener("click", () => { + document.querySelector("#bind-shell-selection").innerHTML = ""; + rsg.setState({ + commandType: CommandType.BindShell - }); - }) + }); +}) - document.querySelector("#msfvenom-tab").addEventListener("click", () => { - document.querySelector("#msfvenom-selection").innerHTML = ""; - rsg.setState({ - commandType: CommandType.MSFVenom, - encoding: "None" - }); - }); +document.querySelector("#msfvenom-tab").addEventListener("click", () => { + document.querySelector("#msfvenom-selection").innerHTML = ""; + rsg.setState({ + commandType: CommandType.MSFVenom, +encoding: "None" + }); +}); - var rawLinkButtons = document.querySelectorAll('.raw-listener'); - for (const button of rawLinkButtons) { - button.addEventListener("click", () => { - const rawLink = RawLink.generate(rsg); - window.location = rawLink; - }); - } - - document.querySelector(".download-listener").addEventListener("click", () => { - var element = document.createElement('a'); - const rawLink = RawLink.generate(rsg); - element.setAttribute('href', rawLink); - element.setAttribute('download', rsg.getSelectedCommandName() + '.txt'); - document.body.appendChild(element); - element.click(); - document.body.removeChild(element); - }) +var rawLinkButtons = document.querySelectorAll('.raw-listener'); +for (const button of rawLinkButtons) { + button.addEventListener("click", () => { + const rawLink = RawLink.generate(rsg); + window.location = rawLink; + }); +} - const filterCommandData = function (data, { commandType, filter }) { - return data.filter(item => { - if (!item.meta.includes(commandType)) { - return false; - } +document.querySelector(".download-listener").addEventListener("click", () => { + var element = document.createElement('a'); + const rawLink = RawLink.generate(rsg); + element.setAttribute('href', rawLink); + element.setAttribute('download', rsg.getSelectedCommandName() + '.txt'); + document.body.appendChild(element); + element.click(); + document.body.removeChild(element); +}) - if (!filter) { - return true; - } - - if (filter === FilterType.All) { - return true; - } - - return item.meta.includes(filter); - }); +const filterCommandData = function (data, { commandType, filter }) { + return data.filter(item => { + if (!item.meta.includes(commandType)) { + return false; } - const query = new URLSearchParams(location.hash.substring(1)); + if (!filter) { + return true; + } - const rsg = { - ip: query.get('ip') || localStorage.getItem('ip') || '10.10.10.10', - port: query.get('port') || localStorage.getItem('port') || 9001, - payload: query.get('payload') || localStorage.getItem('payload') || 'windows/x64/meterpreter/reverse_tcp', - shell: query.get('shell') || localStorage.getItem('shell') || rsgData.shells[0], - listener: query.get('listener') || localStorage.getItem('listener') || rsgData.listenerCommands[0][1], - encoding: query.get('encoding') || localStorage.getItem('encoding') || 'None', - selectedValues: { - [CommandType.ReverseShell]: filterCommandData(rsgData.reverseShellCommands, { commandType: CommandType.ReverseShell })[0].name, - [CommandType.BindShell]: filterCommandData(rsgData.reverseShellCommands, { commandType: CommandType.BindShell })[0].name, - [CommandType.MSFVenom]: filterCommandData(rsgData.reverseShellCommands, { commandType: CommandType.MSFVenom })[0].name, - }, - commandType: CommandType.ReverseShell, - filter: FilterType.All, + if (filter === FilterType.All) { + return true; + } - uiElements: { - [CommandType.ReverseShell]: { - listSelection: '#reverse-shell-selection', - command: '#reverse-shell-command' - }, - [CommandType.BindShell]: { - listSelection: '#bind-shell-selection', - command: '#bind-shell-command', - }, - [CommandType.MSFVenom]: { - listSelection: '#msfvenom-selection', - command: '#msfvenom-command' - } - }, + return item.meta.includes(filter); + }); +} - copyToClipboard: (text) => { - if (navigator ?.clipboard ?.writeText) { - navigator.clipboard.writeText(text) - $('#clipboard-toast').toast('show') - } else if (window ?.clipboardData ?.setData) { - window.clipboardData.setData('Text', text); - $('#clipboard-toast').toast('show') - } else { - $('#clipboard-failure-toast').toast('show') - } - }, +const query = new URLSearchParams(location.hash.substring(1)); - escapeHTML: (text) => String(text).replace(/&/g, '&').replace(//g, '>'), +const rsg = { + ip: query.get('ip') || localStorage.getItem('ip') || '10.10.10.10', + port: query.get('port') || localStorage.getItem('port') || 9001, + payload: query.get('payload') || localStorage.getItem('payload') || 'windows/x64/meterpreter/reverse_tcp', + shell: query.get('shell') || localStorage.getItem('shell') || rsgData.shells[0], + listener: query.get('listener') || localStorage.getItem('listener') || rsgData.listenerCommands[0][1], + encoding: query.get('encoding') || localStorage.getItem('encoding') || 'None', + selectedValues: { + [CommandType.ReverseShell]: filterCommandData(rsgData.reverseShellCommands, { commandType: CommandType.ReverseShell })[0].name, + [CommandType.BindShell]: filterCommandData(rsgData.reverseShellCommands, { commandType: CommandType.BindShell })[0].name, + [CommandType.MSFVenom]: filterCommandData(rsgData.reverseShellCommands, { commandType: CommandType.MSFVenom })[0].name, + }, + commandType: CommandType.ReverseShell, + filter: FilterType.All, - getIP: () => rsg.ip, + uiElements: { + [CommandType.ReverseShell]: { + listSelection: '#reverse-shell-selection', + command: '#reverse-shell-command' + }, + [CommandType.BindShell]: { + listSelection: '#bind-shell-selection', + command: '#bind-shell-command', + }, + [CommandType.MSFVenom]: { + listSelection: '#msfvenom-selection', + command: '#msfvenom-command' + } + }, - getPort: () => Number(rsg.port), + copyToClipboard: (text) => { + if (navigator ?.clipboard ?.writeText) { + navigator.clipboard.writeText(text) + $('#clipboard-toast').toast('show') + } else if (window ?.clipboardData ?.setData) { + window.clipboardData.setData('Text', text); + $('#clipboard-toast').toast('show') + } else { + $('#clipboard-failure-toast').toast('show') + } + }, - getShell: () => rsg.shell, + escapeHTML: (text) => String(text).replace(/&/g, '&').replace(//g, '>'), - getEncoding: () => rsg.encoding, + getIP: () => rsg.ip, - getSelectedCommandName: () => { - return rsg.selectedValues[rsg.commandType]; - }, + getPort: () => Number(rsg.port), - getReverseShellCommand: () => { - const reverseShellData = rsgData.reverseShellCommands.find((item) => item.name === rsg.getSelectedCommandName()); - return reverseShellData.command; - }, + getShell: () => rsg.shell, - getPayload: () => { - if (rsg.commandType === 'MSFVenom') { - let cmd = rsg.getReverseShellCommand(); - // msfvenom -p windows/x64/meterpreter_reverse_tcp ... - let regex = /\s+-p\s+(?[a-zA-Z0-9/_]+)/; - let match = regex.exec(cmd); - if (match) { - return match.groups.payload; - } - } + getEncoding: () => rsg.encoding, - return 'windows/x64/meterpreter/reverse_tcp' + getSelectedCommandName: () => { + return rsg.selectedValues[rsg.commandType]; + }, - }, + getReverseShellCommand: () => { + const reverseShellData = rsgData.reverseShellCommands.find((item) => item.name === rsg.getSelectedCommandName()); + return reverseShellData.command; + }, - generateReverseShellCommand: () => { - let command - - if (rsg.getSelectedCommandName() === 'PowerShell #3 (Base64)') { - const encoder = (text) => text; - const payload = rsg.insertParameters(rsgData.specialCommands['PowerShell payload'], encoder) - command = "powershell -e " + btoa(toBinary(payload)) - function toBinary(string) { - const codeUnits = new Uint16Array(string.length); - for (let i = 0; i < codeUnits.length; i++) { - codeUnits[i] = string.charCodeAt(i); - } - const charCodes = new Uint8Array(codeUnits.buffer); - let result = ''; - for (let i = 0; i < charCodes.byteLength; i++) { - result += String.fromCharCode(charCodes[i]); - } - return result; - } - } else { - command = rsg.getReverseShellCommand() - } - - const encoding = rsg.getEncoding(); - if (encoding === 'Base64') { - command = rsg.insertParameters(command, (text) => text) - command = btoa(command) - } else { - function encoder(string) { - return (encoding === 'encodeURI' || encoding === 'encodeURIComponent') ? window[ - encoding](string) : string - } - - command = rsg.escapeHTML(command); - command = rsg.insertParameters( - rsg.highlightParameters( - encoder(command), encoder), - encoder - ) - } - - return command; - }, - - highlightParameters: (text, encoder) => { - const parameters = ['{ip}', '{port}', '{shell}', encodeURI('{ip}'), encodeURI('{port}'), - encodeURI('{shell}') - ]; - - parameters.forEach((param) => { - if (encoder) param = encoder(param) - text = text.replace(param, `${param}`) - }) - return text - }, - - init: () => { - rsg.initListenerSelection() - rsg.initShells() - }, - - initListenerSelection: () => { - rsgData.listenerCommands.forEach((listenerData, i) => { - const type = listenerData[0]; - const command = listenerData[1]; - - const option = document.createElement("option"); - - option.value = command; - option.selected = rsg.listener === option.value; - option.classList.add("listener-option"); - option.innerText = type; - - listenerSelect.appendChild(option); - }) - }, - - initShells: () => { - rsgData.shells.forEach((shell, i) => { - const option = document.createElement("option"); - - option.selected = rsg.shell === shell; - option.classList.add("shell-option"); - option.innerText = shell; - - shellSelect.appendChild(option); - }) - }, - - // Updates the rsg state, and forces a re-render - setState: (newState = {}) => { - Object.keys(newState).forEach((key) => { - const value = newState[key]; - rsg[key] = value; - localStorage.setItem(key, value) - }); - Object.assign(rsg, newState); - - rsg.update(); - }, - - insertParameters: (command, encoder) => { - return command - .replaceAll(encoder('{ip}'), encoder(rsg.getIP())) - .replaceAll(encoder('{port}'), encoder(String(rsg.getPort()))) - .replaceAll(encoder('{shell}'), encoder(rsg.getShell())) - }, - - update: () => { - rsg.updateListenerCommand() - rsg.updateTabList() - rsg.updateReverseShellCommand() - rsg.updateValues() - }, - - updateValues: () => { - const listenerOptions = listenerSelect.querySelectorAll(".listener-option"); - listenerOptions.forEach((option) => { - option.selected = rsg.listener === option.value; - }); - - const shellOptions = shellSelect.querySelectorAll(".shell-option"); - shellOptions.forEach((option) => { - option.selected = rsg.shell === option.value; - }); - - const encodingOptions = encodingSelect.querySelectorAll("option"); - encodingOptions.forEach((option) => { - option.selected = rsg.encoding === option.value; - }); - - ipInput.value = rsg.ip; - portInput.value = rsg.port; - }, - - updateTabList: () => { - const data = rsgData.reverseShellCommands; - const filteredItems = filterCommandData( - data, - { - filter: rsg.filter, - commandType: rsg.commandType - } - ); - - const documentFragment = document.createDocumentFragment() - filteredItems.forEach((item, index) => { - const { - name, - command - } = item; - - const selectionButton = document.createElement("button"); - - if (rsg.getSelectedCommandName() === item.name) { - selectionButton.classList.add("active"); - } - - const clickEvent = () => { - rsg.selectedValues[rsg.commandType] = name; - rsg.update(); - - // if (document.querySelector('#auto-copy-switch').checked) { - // rsg.copyToClipboard(reverseShellCommand.innerText) - // } - } - - selectionButton.innerText = name; - selectionButton.classList.add("list-group-item", "list-group-item-action"); - selectionButton.addEventListener("click", clickEvent); - - documentFragment.appendChild(selectionButton); - }) - - const listSelectionSelector = rsg.uiElements[rsg.commandType].listSelection; - document.querySelector(listSelectionSelector).replaceChildren(documentFragment) - }, - - updateListenerCommand: () => { - const privilegeWarning = document.querySelector("#port-privileges-warning"); - let command = listenerSelect.value; - command = rsg.highlightParameters(command) - command = command.replace('{port}', rsg.getPort()) - command = command.replace('{ip}', rsg.getIP()) - command = command.replace('{payload}', rsg.getPayload()) - - if (rsg.getPort() < 1024) { - privilegeWarning.style.visibility = "visible"; - command = `sudo ${command}` - } else { - privilegeWarning.style.visibility = "hidden"; - } - - listenerCommand.innerHTML = command; - }, - - updateReverseShellSelection: () => { - document.querySelector(".list-group-item.active") ?.classList.remove("active"); - const elements = Array.from(document.querySelectorAll(".list-group-item")); - const selectedElement = elements.find((item) => item.innerText === rsg.currentCommandName); - selectedElement?.classList.add("active"); - }, - - updateReverseShellCommand: () => { - const command = rsg.generateReverseShellCommand(); - const commandSelector = rsg.uiElements[rsg.commandType].command; - document.querySelector(commandSelector).innerHTML = command; - }, - - updateSwitchStates: () => { - $('#listener-advanced').collapse($('#listener-advanced-switch').prop('checked') ? 'show' : - 'hide') - $('#revshell-advanced').collapse($('#revshell-advanced-switch').prop('checked') ? 'show' : - 'hide') + getPayload: () => { + if (rsg.commandType === 'MSFVenom') { + let cmd = rsg.getReverseShellCommand(); + // msfvenom -p windows/x64/meterpreter_reverse_tcp ... + let regex = /\s+-p\s+(?[a-zA-Z0-9/_]+)/; + let match = regex.exec(cmd); + if (match) { + return match.groups.payload; } } - /* - * Init - */ - rsg.init(); + return 'windows/x64/meterpreter/reverse_tcp' + + }, + + generateReverseShellCommand: () => { + let command + + if (rsg.getSelectedCommandName() === 'PowerShell #3 (Base64)') { + const encoder = (text) => text; + const payload = rsg.insertParameters(rsgData.specialCommands['PowerShell payload'], encoder) + command = "powershell -e " + btoa(toBinary(payload)) + function toBinary(string) { + const codeUnits = new Uint16Array(string.length); + for (let i = 0; i < codeUnits.length; i++) { + codeUnits[i] = string.charCodeAt(i); + } + const charCodes = new Uint8Array(codeUnits.buffer); + let result = ''; + for (let i = 0; i < charCodes.byteLength; i++) { + result += String.fromCharCode(charCodes[i]); + } + return result; + } + } else { + command = rsg.getReverseShellCommand() + } + + const encoding = rsg.getEncoding(); + if (encoding === 'Base64') { + command = rsg.insertParameters(command, (text) => text) + command = btoa(command) + } else { + function encoder(string) { + return (encoding === 'encodeURI' || encoding === 'encodeURIComponent') ? window[ + encoding](string) : string + } + + command = rsg.escapeHTML(command); + command = rsg.insertParameters( + rsg.highlightParameters( + encoder(command), encoder), + encoder + ) + } + + return command; + }, + + highlightParameters: (text, encoder) => { + const parameters = ['{ip}', '{port}', '{shell}', encodeURI('{ip}'), encodeURI('{port}'), + encodeURI('{shell}') + ]; + + parameters.forEach((param) => { + if (encoder) param = encoder(param) + text = text.replace(param, `${param}`) + }) + return text + }, + + init: () => { + rsg.initListenerSelection() + rsg.initShells() + }, + + initListenerSelection: () => { + rsgData.listenerCommands.forEach((listenerData, i) => { + const type = listenerData[0]; + const command = listenerData[1]; + + const option = document.createElement("option"); + + option.value = command; + option.selected = rsg.listener === option.value; + option.classList.add("listener-option"); + option.innerText = type; + + listenerSelect.appendChild(option); + }) + }, + + initShells: () => { + rsgData.shells.forEach((shell, i) => { + const option = document.createElement("option"); + + option.selected = rsg.shell === shell; + option.classList.add("shell-option"); + option.innerText = shell; + + shellSelect.appendChild(option); + }) + }, + + // Updates the rsg state, and forces a re-render + setState: (newState = {}) => { + Object.keys(newState).forEach((key) => { + const value = newState[key]; + rsg[key] = value; + localStorage.setItem(key, value) + }); + Object.assign(rsg, newState); + rsg.update(); + }, - /* - * Event handlers/functions - */ - ipInput.addEventListener("input", (e) => { - rsg.setState({ - ip: e.target.value - }) + insertParameters: (command, encoder) => { + return command + .replaceAll(encoder('{ip}'), encoder(rsg.getIP())) + .replaceAll(encoder('{port}'), encoder(String(rsg.getPort()))) + .replaceAll(encoder('{shell}'), encoder(rsg.getShell())) + }, + + update: () => { + rsg.updateListenerCommand() + rsg.updateTabList() + rsg.updateReverseShellCommand() + rsg.updateValues() + }, + + updateValues: () => { + const listenerOptions = listenerSelect.querySelectorAll(".listener-option"); + listenerOptions.forEach((option) => { + option.selected = rsg.listener === option.value; }); - portInput.addEventListener("input", (e) => { - rsg.setState({ - port: Number(e.target.value) - }) + const shellOptions = shellSelect.querySelectorAll(".shell-option"); + shellOptions.forEach((option) => { + option.selected = rsg.shell === option.value; }); - listenerSelect.addEventListener("change", (e) => { - rsg.setState({ - listener: e.target.value - }) + const encodingOptions = encodingSelect.querySelectorAll("option"); + encodingOptions.forEach((option) => { + option.selected = rsg.encoding === option.value; }); - shellSelect.addEventListener("change", (e) => { - rsg.setState({ - shell: e.target.value - }) - }); + ipInput.value = rsg.ip; + portInput.value = rsg.port; + }, - encodingSelect.addEventListener("change", (e) => { - rsg.setState({ - encoding: e.target.value - }) - }); + updateTabList: () => { + const data = rsgData.reverseShellCommands; + const filteredItems = filterCommandData( + data, + { + filter: rsg.filter, + commandType: rsg.commandType + } + ); - document.querySelector('#inc-port').addEventListener('click', () => { - rsg.setState({ - port: rsg.getPort() + 1 - }) + const documentFragment = document.createDocumentFragment() + filteredItems.forEach((item, index) => { + const { + name, + command + } = item; + + const selectionButton = document.createElement("button"); + + if (rsg.getSelectedCommandName() === item.name) { + selectionButton.classList.add("active"); + } + + const clickEvent = () => { + rsg.selectedValues[rsg.commandType] = name; + rsg.update(); + + // if (document.querySelector('#auto-copy-switch').checked) { + // rsg.copyToClipboard(reverseShellCommand.innerText) + // } + } + + selectionButton.innerText = name; + selectionButton.classList.add("list-group-item", "list-group-item-action"); + selectionButton.addEventListener("click", clickEvent); + + documentFragment.appendChild(selectionButton); }) - document.querySelector('#listener-advanced-switch').addEventListener('change', rsg.updateSwitchStates); - document.querySelector('#revshell-advanced-switch').addEventListener('change', rsg.updateSwitchStates); + const listSelectionSelector = rsg.uiElements[rsg.commandType].listSelection; + document.querySelector(listSelectionSelector).replaceChildren(documentFragment) + }, - setInterval(rsg.updateSwitchStates, 500) // fix switch changes in rapid succession + updateListenerCommand: () => { + const privilegeWarning = document.querySelector("#port-privileges-warning"); + let command = listenerSelect.value; + command = rsg.highlightParameters(command) + command = command.replace('{port}', rsg.getPort()) + command = command.replace('{ip}', rsg.getIP()) + command = command.replace('{payload}', rsg.getPayload()) - document.querySelector('#copy-listener').addEventListener('click', () => { - rsg.copyToClipboard(listenerCommand.innerText) + if (rsg.getPort() < 1024) { + privilegeWarning.style.visibility = "visible"; + command = `sudo ${command}` + } else { + privilegeWarning.style.visibility = "hidden"; + } + + listenerCommand.innerHTML = command; + }, + + updateReverseShellSelection: () => { + document.querySelector(".list-group-item.active") ?.classList.remove("active"); + const elements = Array.from(document.querySelectorAll(".list-group-item")); + const selectedElement = elements.find((item) => item.innerText === rsg.currentCommandName); + selectedElement?.classList.add("active"); + }, + + updateReverseShellCommand: () => { + const command = rsg.generateReverseShellCommand(); + const commandSelector = rsg.uiElements[rsg.commandType].command; + document.querySelector(commandSelector).innerHTML = command; + }, + + updateSwitchStates: () => { + $('#listener-advanced').collapse($('#listener-advanced-switch').prop('checked') ? 'show' : + 'hide') + $('#revshell-advanced').collapse($('#revshell-advanced-switch').prop('checked') ? 'show' : + 'hide') + } +} + +/* + * Init + */ +rsg.init(); +rsg.update(); + +/* + * Event handlers/functions + */ +ipInput.addEventListener("input", (e) => { + rsg.setState({ + ip: e.target.value }) +}); - document.querySelector('#copy-reverse-shell-command').addEventListener('click', () => { - rsg.copyToClipboard(reverseShellCommand.innerText) - }) +portInput.addEventListener("input", (e) => { + rsg.setState({ + port: Number(e.target.value) + }) +}); - document.querySelector('#copy-bind-shell-command').addEventListener('click', () => { - rsg.copyToClipboard(bindShellCommand.innerText) - }) +listenerSelect.addEventListener("change", (e) => { + rsg.setState({ + listener: e.target.value + }) +}); - document.querySelector('#copy-msfvenom-command').addEventListener('click', () => { - rsg.copyToClipboard(msfVenomCommand.innerText) - }) +shellSelect.addEventListener("change", (e) => { + rsg.setState({ + shell: e.target.value + }) +}); - // autoCopySwitch.addEventListener("change", () => { - // setLocalStorage(autoCopySwitch, "auto-copy", "checked"); - // }); +encodingSelect.addEventListener("change", (e) => { + rsg.setState({ + encoding: e.target.value + }) +}); - // Popper tooltips - $(function () { - $('[data-toggle="tooltip"]').tooltip() - }); +document.querySelector('#inc-port').addEventListener('click', () => { + rsg.setState({ + port: rsg.getPort() + 1 + }) +}) - // TODO: add a random fifo for netcat mkfifo - //let randomId = Math.random().toString(36).substring(2, 4); +document.querySelector('#listener-advanced-switch').addEventListener('change', rsg.updateSwitchStates); +document.querySelector('#revshell-advanced-switch').addEventListener('change', rsg.updateSwitchStates); + +setInterval(rsg.updateSwitchStates, 500) // fix switch changes in rapid succession + +document.querySelector('#copy-listener').addEventListener('click', () => { + rsg.copyToClipboard(listenerCommand.innerText) +}) + +document.querySelector('#copy-reverse-shell-command').addEventListener('click', () => { + rsg.copyToClipboard(reverseShellCommand.innerText) +}) + +document.querySelector('#copy-bind-shell-command').addEventListener('click', () => { + rsg.copyToClipboard(bindShellCommand.innerText) +}) + +document.querySelector('#copy-msfvenom-command').addEventListener('click', () => { + rsg.copyToClipboard(msfVenomCommand.innerText) +}) + +// autoCopySwitch.addEventListener("change", () => { +// setLocalStorage(autoCopySwitch, "auto-copy", "checked"); +// }); + +// Popper tooltips +$(function () { + $('[data-toggle="tooltip"]').tooltip() +}); + +// TODO: add a random fifo for netcat mkfifo +//let randomId = Math.random().toString(36).substring(2, 4);