{"id":31074173,"url":"https://github.com/ordinary-hacker/oh-my-shells","last_synced_at":"2026-05-18T04:38:29.969Z","repository":{"id":312356858,"uuid":"1047241807","full_name":"ordinary-hacker/oh-my-shells","owner":"ordinary-hacker","description":"The offline, CLI-first swiss army knife for shell payloads!","archived":false,"fork":false,"pushed_at":"2025-08-30T03:17:49.000Z","size":85,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"trunk","last_synced_at":"2025-08-30T04:11:13.283Z","etag":null,"topics":["payloads","penetration-testing","pentest","pentesting","red-team","redteam","shell","toml"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ordinary-hacker.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-30T02:01:25.000Z","updated_at":"2025-08-30T03:15:50.000Z","dependencies_parsed_at":"2025-08-30T04:11:15.527Z","dependency_job_id":"12c2e2d5-ae42-4d14-8139-1c3c1d1992a1","html_url":"https://github.com/ordinary-hacker/oh-my-shells","commit_stats":null,"previous_names":["ordinary-hacker/oh-my-shells"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/ordinary-hacker/oh-my-shells","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ordinary-hacker%2Foh-my-shells","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ordinary-hacker%2Foh-my-shells/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ordinary-hacker%2Foh-my-shells/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ordinary-hacker%2Foh-my-shells/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ordinary-hacker","download_url":"https://codeload.github.com/ordinary-hacker/oh-my-shells/tar.gz/refs/heads/trunk","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ordinary-hacker%2Foh-my-shells/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275348511,"owners_count":25448626,"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","status":"online","status_checked_at":"2025-09-16T02:00:10.229Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["payloads","penetration-testing","pentest","pentesting","red-team","redteam","shell","toml"],"created_at":"2025-09-16T02:05:21.525Z","updated_at":"2026-05-18T04:38:29.964Z","avatar_url":"https://github.com/ordinary-hacker.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# 🐚 oh-my-shells\n\nThe offline, CLI-first swiss army knife for shell payloads! 🚀\n\n[![Version](https://img.shields.io/badge/version-v0.0.4-blue.svg)](#)\n[![License](https://img.shields.io/badge/license-MIT-green.svg)](#)\n[![Language](https://img.shields.io/badge/language-C-cyan)](#)\n[![Downloads](https://img.shields.io/github/downloads/ordinary-hacker/oh-my-shells/total.svg)](#)\n\n\u003c/div\u003e\n\n---\n\n## ❓ Why, What, How?\n\nFor a quick overview of what the tool does, how it works, and why it exists, see [this blog post](https://0rd1n4ry.bearblog.dev/oh-my-shells).\n\n---\n\n## ✨ Features\n\n- 🔍 **Search** and filter hundreds of shell payloads by OS, type, protocol, and language\n- 📝 **Generate** ready-to-use payloads and listeners for your target\n- 📋 **Show** detailed info for each shell\n- 🖨️ **Colorful output** (with `--no-color` option for scripts)\n- 🏷️ **Offline**: No internet required\n- 🛠️ **Easy to extend** with your own payloads (just add TOML files!)\n- 🆓 **Open Source** and hackable\n\n---\n\n## 🚦 Usage\n\n```sh\n./oh-my-shell \u003ccommand\u003e [OPTIONS]\n```\n\n### Commands\n\n- `list` (alias: `l`) - List payloads with optional filters\n- `search \u003cterm\u003e` (alias: `sr`) - Search for payloads\n- `show \u003cshell_id\u003e` (alias: `sh`) - Show details about a specific payload\n- `generate \u003cshell_id\u003e` (alias: `g`) - Generate a payload\n\n### Options\n\n- `-i, --id \u003cshell_id\u003e`        Shell identifier\n- `-s, --search \u003cterm\u003e`        Search term\n- `-H, --lhost \u003chost\u003e`         Local host for payload generation\n- `-P, --lport \u003cport\u003e`         Local port (default: 4444)\n- `-S, --shell \u003cshell\u003e`        Shell to use for payloads\n- `-e, --encoding \u003ctype\u003e`      Output encoding (url, base64, etc.)\n- `-l, --listener`             Output only the recommended listener\n- `-p, --payload`              Output only the generated payload\n- `--no-color`                 Disable ANSI color output\n- `--version`                  Show version information\n- `-h, --help`                 Show help message\n\n### Filters (for `list`)\n\n- `--os \u003cos\u003e`                  Filter by OS (bsd, linux, osx, unix, windows)\n- `--type \u003ctype\u003e`              Filter by type (reverse, bind)\n- `--proto \u003cproto\u003e`            Filter by protocol (tcp, udp, http)\n- `--lang \u003clang\u003e`              Filter by language (ruby, go, python, etc.)\n\n---\n\n## 🧑‍💻 Examples\n\n```sh\n./oh-my-shell list --os linux --type reverse\n./oh-my-shell l --os linux --type reverse    # Using alias\n./oh-my-shell search \"netcat\"\n./oh-my-shell sr \"netcat\"                    # Using alias\n./oh-my-shell show bash_read_line\n./oh-my-shell sh bash_read_line              # Using alias\n./oh-my-shell generate bash_i -H 192.168.1.100 -P 4444\n./oh-my-shell g bash_i -H 192.168.1.100 -P 4444  # Using alias\n./oh-my-shell --version\n```\n\n---\n\n## 📦 Adding Your Own Payloads\n\nJust drop a new `.toml` file in the appropriate `shells/` subdirectory. The tool will pick it up automatically!\n\n---\n\n## 🛠️ Building\n\n**Requires**: `make` and any C compiler (e.g. `gcc`, `clang`, `cc`, ...).\n\n```sh\nmake\n```\n\n---\n\n## 📥 Installing \u0026 Updating\n\n### Installer Script\n\nJust run the following command, note you need to have `make` and a C compiler installed:\n\n```sh\ncurl -fsSL https://raw.githubusercontent.com/ordinary-hacker/oh-my-shells/trunk/scripts/install.sh | sudo bash\n```\n\n### Prebuilt Binaries\n\nOr, otherwise you can use one of the precompiled binaries available at `release/builds/` and in the latest release.\nJust make sure you have both the binary and the `shells/` directory in the same folder. The latest release also contains a `.zip` and `.tar.gz` of the `shells/` directory for easier install.\n\n### Verify installation\n\nAfterwards, no matter the method of installation,  you can just run the tool as:\n\n```sh\noh-my-shells -h\n```\n\n---\n\n## 🧪 Testing\n\nThe project includes a full suite of unit, integration, and black-box tests.\n\nThis comprehensive amount of tests is available in `tests/`, all of them using the [Unity Test Framework](https://github.com/ThrowTheSwitch/Unity) at `lib/unity/`.\n\nHere's a look at the structure of tests:\n* **White Box Tests (Unit Tests)**\n  - `test_cli.c`: Tests CLI arguments parsing and command structure initialization\n  - `test_module_loader.c`: Tests module loading, registry management, and TOML parsing\n* **Integration Tests**\n  - `test_integration.c`: Tests complete workflows and component interactions\n* **Black Box Tests**\n  - `test_blackbox.c`: Tests the binary as an external user would, testing all commands and edge cases\n\n### Running Tests\n\nRunning all tests:\n```bash\nmake test\n```\n\nRunning individual test suites:\n```bash\nmake run-test-cli\nmake run-test-module-loader\nmake run-test-integration\nmake run-test-blackbox\n```\n\nBuilding tests without running them:\n```bash\nmake build-tests\n```\n\n### Tests Coverage\n\nThe whole test suite covers:\n- CLI argument parsing and validation\n- Module registry initialization and management\n- TOML file loading and parsing\n- Shell module search and filtering\n- Payload generation functionality\n- All command-line commands (list, search, show, generate)\n- Error handling and edge cases\n- Command aliases and flag combinations\n- Integration between components\n\n### Expected Results\n\nThese tests should always pass with 0 failures. In total the test suite includes:\n- 8 CLI tests\n- 5 Module loader tests\n- 6 Integration tests\n- 13 Black box tests\n\nGiving us a **total of 32 tests**.\n\n---\n\n## ©️ Credits\n\n**Author and maintainer**: [ordinary-hacker](https://github.com/ordinary-hacker)\n\nThis tool depends on and includes a vendored version of [tomlc17](https://github.com/cktan/tomlc17) by [cktan](https://github.com/cktan).\n\nThere's also a vendored version of the [Unity Test Framework](https://github.com/ThrowTheSwitch/Unity) by [ThrowTheSwitch](https://github.com/ThrowTheSwitch) used for testing.\n\n---\n\n## 📝 License\n\nMIT License. See [LICENSE](LICENSE) for details.\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\nMade with ❤️ by hackers, for hackers.\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fordinary-hacker%2Foh-my-shells","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fordinary-hacker%2Foh-my-shells","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fordinary-hacker%2Foh-my-shells/lists"}