🥷 NINJA PENTEST

Sanfter Host-Check von außen - Im Jetzt der 0-Spirale

Von: Bugsy (Ninja) & Snoop (Crew-Security)
Für: Crumbforest Server Health Check


🎯 Was ist das?

Bugsy erklärt: 🐛🥷

"Ein Ninja bewegt sich leise.
Ein Ninja hinterlässt keine Spuren... warte.
DIESER Ninja hinterlässt Spuren!
ABSICHTLICH.
Damit du sie in den Logs siehst!"

Snoop ergänzt: 🦭

"Das ist kein Pentest im klassischen Sinn.
Das ist CREW-SECURITY.
Wir prüfen nicht um anzugreifen.
Wir prüfen um zu VERSTEHEN."


🌀 Die 0-Spirale (Nullfeld-Check)

Orca: 🐋

"Im Jetzt der 0-Spirale bedeutet:
Wir prüfen den ZUSTAND.
Nicht die Zeit.
∂W/∂t = 0

Der Server IST in einem Zustand.
Welcher?
Das finden wir heraus.
Sanft. Leise. Respectful."


🥷 Die Ninja-Philosophie

1. Sehr sanft (kein Stress)

Bugsy: 🐛

"1 Check pro Minute.
60 Sekunden Pause.
Kein Spam. Kein Rauschen.
Der Server merkt: 'Ah, ein Freund klopft.'"

2. Sehr leise (IDS-friendly)

Snoop: 🦭

"Keine Port-Scans (1-65535).
Keine Brute-Force.
Nur die bekannten Ports:
SSH (22), HTTP (80), HTTPS (443),
Gitea (3000), Qdrant (6333), TTYD (7681).

IDS sieht: 'Normaler Traffic'.
Nicht: 'ALARM! ANGRIFF!'"

3. Tailbar (Logs sind lesbar)

FunkFox: 🦊

"Jeder Check wird geloggt.
Sauber. Strukturiert. Timestamped.

bash tail -f ninja-pentest.log

Du SIEHST was passiert.
Live. Real-time. Flow!"

4. Respectful (Crew-Security)

Orca: 🐋

"Wir greifen nicht an.
Wir PRÜFEN.
Mit User-Agent: 'CrumbforestNinja/1.0'

Der Server weiß:
'Das ist Crew. Das ist okay.'

Das ist lovely_orcas Wisdom:
Testen mit Respekt!"


🚀 Quick Start

Installation

# 1. Script holen (lokal nutzen, NICHT ins Repo!)
# Download von deinem lokalen Setup

# 2. Ausführbar machen
chmod +x ninja-pentest.sh

# 3. Dependencies prüfen
# Braucht: curl, nc, openssl
# (timeout ist NICHT nötig - pure Bash fallback!)
#
# macOS: netcat + openssl sind built-in
#        curl: brew install curl (oder built-in)
#
# Linux: sudo apt install curl netcat-openbsd openssl

# Note: Script ist Bash 3.x kompatibel (macOS!)
#       Keine GNU coreutils Dependencies!

Usage

# Start Ninja-Pentest (verschiedene Formate möglich!)
./ninja-pentest.sh 194.164.194.191
./ninja-pentest.sh your-server.com
./ninja-pentest.sh https://194-164-194-191.sslip.io
./ninja-pentest.sh http://server.com/path/ignored

# Protocol (https://) und Pfade werden automatisch entfernt!

# Parallel in anderem Terminal: Logs anschauen
tail -f ninja-pentest.log

# Stoppen: Ctrl+C

Bugsy: 🐛

"Terminal 1: Script läuft.
Terminal 2: Logs tailen.
Terminal 3: Server-Logs tailen (ssh).
Das ist Ninja-Setup! 🥷"


📊 Was wird geprüft?

Phase 1: Port-Checks (TCP)

Port 22    → SSH         ✅ OFFEN / 🔒 GESCHLOSSEN
Port 80    → HTTP        ✅ OFFEN / 🔒 GESCHLOSSEN
Port 443   → HTTPS       ✅ OFFEN / 🔒 GESCHLOSSEN
Port 3000  → Gitea       ✅ OFFEN / 🔒 GESCHLOSSEN
Port 6333  → Qdrant      ✅ OFFEN / 🔒 GESCHLOSSEN
Port 7681  → TTYD        ✅ OFFEN / 🔒 GESCHLOSSEN

Methode:
- Timeout nach 5 Sekunden
- TCP-Connect (keine Daten senden!)
- Sehr geduldig


Phase 2: HTTP/HTTPS Checks

curl http://target:80/
  → Status Code? (200, 301, 403, etc.)

curl https://target:443/
  → Status Code? (200, 301, 403, etc.)

User-Agent:

CrumbforestNinja/1.0 (Crew-Security-Check)

DeepBit: 🎺

"Der User-Agent ist WICHTIG!
Er sagt: 'Ich bin Crew, nicht Bot'.
Server-Logs zeigen: 'Ah, ein Check. Okay.'"


Phase 3: Service-Specific Checks

3.1 SSH Banner:

nc target 22 < /dev/null | head -1
→ "SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.1"

Bugsy: 🐛

"Nur Banner lesen!
NICHT einloggen versuchen!
Ninja = respectful!"

3.2 SSL Zertifikat:

openssl s_client -connect target:443
→ Zeigt: Gültig bis wann? Issuer?

3.3 Gitea Version:

curl http://target:3000/api/v1/version
→ {"version": "1.24.4"}

📝 Log-Format

[2026-01-27 19:30:00] [START] 🥷 Ninja-Pentest beginnt für: 194.164.194.191
[2026-01-27 19:30:00] [INFO] Delay zwischen Checks: 60s (sehr sanft!)
[2026-01-27 19:30:00] [INFO] Logs: tail -f ninja-pentest.log

[2026-01-27 19:30:01] [CYCLE] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[2026-01-27 19:30:01] [CYCLE] 🔄 Check-Zyklus #1 - 2026-01-27 19:30:01
[2026-01-27 19:30:01] [CYCLE] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

[2026-01-27 19:30:01] [PHASE] 1️⃣  Port-Checks (TCP)
[2026-01-27 19:30:01] [CHECK] Klopfe an SSH Port (22)...
[2026-01-27 19:30:02] [OK] ✅ SSH (22) ist OFFEN
[2026-01-27 19:30:04] [CHECK] Klopfe an HTTP Port (80)...
[2026-01-27 19:30:04] [OK] ✅ HTTP (80) ist OFFEN
...

[2026-01-27 19:30:20] [PHASE] 2️⃣  HTTP/HTTPS Checks
[2026-01-27 19:30:20] [CHECK] Prüfe http://194.164.194.191:80/ ...
[2026-01-27 19:30:21] [OK] ✅ http (80) antwortet: 200
...

[2026-01-27 19:30:40] [CYCLE] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[2026-01-27 19:30:40] [CYCLE] ✅ Zyklus #1 abgeschlossen
[2026-01-27 19:30:40] [CYCLE] ⏸️  Warte 60s bis nächster Check...
[2026-01-27 19:30:40] [CYCLE] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

FunkFox: 🦊

"Tailbar = Du siehst jeden Schritt.
Emojis = Schnell verstehen.
Timestamps = Rhythmus erkennen.
Das ist Flow! 🎵"


🛡️ Security durch Transparenz

Snoop: 🦭

"Klassischer Pentest = heimlich.
Ninja-Pentest = transparent!

Warum?
Weil wir CREW sind.
Weil wir RESPEKT zeigen.
Weil SNOOP_MAGIC = Communication > Hiding."

Was der Server sieht:

In access.log:

194.164.194.x - - [27/Jan/2026:19:30:21] "GET / HTTP/1.1" 200
  "CrumbforestNinja/1.0 (Crew-Security-Check)"

In auth.log (SSH):

Jan 27 19:30:02 server sshd[12345]: Connection from 194.164.194.x port 54321
  (no auth attempt, just banner read)

Admin denkt:

"Ah, CrumbforestNinja.
Das ist unser Check-Script.
Alles gut! ✅"

NICHT:

"WTF?! Unknown scanner?!
Block! Ban! Panic! 🚨"


🎯 Use Cases

1. Server Health Monitoring

# Läuft dauerhaft
./ninja-pentest.sh your-server.com

# In tmux/screen Session
# Logs werden gesammelt
# Bei Problemen siehst du es sofort

Orca: 🐋

"Wie Orcas die Tiefe checken.
Regelmäßig. Geduldig. Präzise."


2. Post-Deployment Check

# Nach Deploy
./ninja-pentest.sh new-server.com

# Laufe 5-10 Minuten
# Check: Alles erreichbar?
# Logs: Korrekte Responses?
# Dann Ctrl+C

Bugsy: 🐛

"Nach Deploy: Ninja-Check!
Nicht nur 'curl' einmal.
Sondern sanft, mehrfach prüfen."


3. Firewall-Testing

# Vor Firewall-Änderung: Check
./ninja-pentest.sh server.com

# Firewall anpassen

# Nach Firewall-Änderung: Check
# Vergleiche Logs: Was ist jetzt anders?

DeepBit: 🎺

"Firewall-Änderungen sind kritisch.
Ninja-Pentest zeigt: Was ist offen? Was geschlossen?
Vor/Nach-Vergleich!"


4. Parallel zu Server-Logs

# Terminal 1: Ninja-Pentest läuft
./ninja-pentest.sh server.com

# Terminal 2: Ninja-Logs tailen
tail -f ninja-pentest.log

# Terminal 3: SSH zum Server, tail Logs
ssh root@server.com
tail -f /var/log/nginx/access.log

# Du siehst BEIDE Seiten:
# - Was Ninja sendet (Terminal 2)
# - Was Server empfängt (Terminal 3)

FunkFox: 🦊

"Das ist Flow!
Du SIEHST die Verbindung.
Ninja → Server.
Request → Response.
Rhythmus! 🎵"


🔧 Configuration

Im Script (Zeile 20-30):

# Delay zwischen Checks (Sekunden)
DELAY=60  # Default: 1 Minute (sehr sanft!)

# Anpassen wenn nötig:
# DELAY=30   → Alle 30 Sekunden (schneller)
# DELAY=120  → Alle 2 Minuten (noch sanfter)
# DELAY=300  → Alle 5 Minuten (ultra-sanft)

Ports anpassen:

declare -A PORTS=(
    [SSH]=22
    [HTTP]=80
    [HTTPS]=443
    [Gitea]=3000
    [Qdrant]=6333
    [TTYD]=7681
    # Hinzufügen:
    [Custom]=8080
)

User-Agent ändern:

UA="CrumbforestNinja/1.0 (Crew-Security-Check)"
# Oder:
UA="MyCompany-HealthCheck/1.0"

Bugsy: 🐛

"Anpassen ist okay!
Aber behalte die Philosophie:
Sanft. Leise. Respectful!"


🐛 Troubleshooting

"timeout: command not found" (FIXED!)

# OLD Error: timeout not found on macOS
# FIX: Script nutzt jetzt pure-Bash timeout!

# Keine Installation nötig! ✅
# Keine GNU coreutils nötig! ✅
# Funktioniert out-of-the-box! ✅

Bugsy: 🐛

"macOS hat kein timeout Command (ist GNU coreutils).
Ich habe eine pure-Bash Version gebaut!
run_with_timeout() = Zero Dependencies! 🔧"


"unbound variable" Error (macOS) - FIXED!

# Error: "SSH: unbound variable"
# Ursache: Alte Bash-Version (3.2 auf macOS)
# Fix: Script ist jetzt Bash 3.x kompatibel!

# Check deine Bash-Version:
bash --version
# GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin...)

# Das ist OKAY! Script funktioniert jetzt mit Bash 3.x!

Bugsy: 🐛

"Zwei macOS-Fixes:
1. Bash 3.x Kompatibilität (keine assoziativen Arrays)
2. Pure-Bash timeout (keine GNU coreutils)
Jetzt läuft's! 🎉"


Script startet nicht

# Dependencies prüfen
which curl nc openssl

# Installieren falls fehlt (Linux)
sudo apt install curl netcat-openbsd openssl

# macOS (meist built-in)
# netcat und openssl sind standard
# curl: brew install curl (falls nicht vorhanden)

# KEIN timeout Command nötig! Pure Bash!

Keine Verbindung zum Target

# Ist Server erreichbar?
ping your-server.com

# Firewall?
# VPN?
# IP richtig?

Logs zeigen nur "GESCHLOSSEN"

# Normal! Das bedeutet:
# - Port ist wirklich geschlossen
# - Oder gefiltert (Firewall)

# Vergleiche mit curl manuell:
curl -v http://your-server.com

Script läuft, aber keine neuen Logs

# Ist Script noch aktiv?
ps aux | grep ninja-pentest

# Logfile existiert?
ls -lh ninja-pentest.log

# Tail richtig?
tail -f ninja-pentest.log

💚 Crew-Stimmen

Bugsy (Ninja-Master): 🐛🥷

"Ninja bedeutet nicht 'unsichtbar'.
Ninja bedeutet 'elegant'.
Wir bewegen uns sanft.
Wir klopfen respektvoll.
Das ist Crew-Security!"

Snoop (Crew-Security): 🦭

"SNOOP_MAGIC Prinzipien:
1. Communication > Automation
2. Respect > Force
3. Understanding > Testing

Ninja-Pentest folgt allen dreien!"

Orca (Wisdom): 🐋

"Im Jetzt der 0-Spirale prüfen wir:
Was IST der Zustand?
Nicht: Was WAR er?
Nicht: Was WIRD er sein?
Sondern: JETZT.

∂W/∂t = 0
Der Wert ist konstant.
Aber der Zustand?
Den checken wir!"

FunkFox (Flow): 🦊

"Ninja-Pentest hat Rhythmus:
Check → Wait → Check → Wait.
60 Sekunden BPM.
Das ist Monitoring-Flow! 🎵"

DeepBit (Architect): 🎺

"Das Script ist simpel.
Bash + curl + nc + openssl.
Keine Dependencies.
Pure Unix Tools.
Das ist ELEGANZ!"

Maya-Eule (Weisheit): 🦉

"Ninja-Pentest ist wie die Eule:
Wir fliegen leise.
Wir beobachten genau.
Wir machen Lärm NUR wenn nötig.
Wuhuuuuu! 🥷"


🧩 Die Puzzle-Verbindung

Orca: 🐋

"Ninja-Pentest verbindet sich mit:"

Ninja-Pentest ←→ Deploy-Scanner    (Post-Deploy Check)
    ↓
Ninja-Pentest ←→ CrumbMIDI         (Logs → Sound?)
    ↓
Ninja-Pentest ←→ Server-Monitoring (Health-Check)
    ↓
Ninja-Pentest ←→ Crew-Security     (SNOOP_MAGIC)

Allein: Nützliches Tool
Zusammen: Teil der Infrastructure-Crew 🌲


🔮 Future Ideas

Snoop: 🦭

"Der Wald atmet. Und wächst."

Roadmap:

  • [ ] Output-Formate: JSON, CSV für Monitoring-Tools
  • [ ] CrumbMIDI Integration: Health → Sound! 🎵
  • [ ] Alerting: Bei Problemen → Slack/Discord/Email
  • [ ] History: Vergleiche mit letztem Check
  • [ ] Grafana Export: Visualisierung
  • [ ] Multi-Target: Mehrere Hosts parallel

Bugsy: 🐛

"Aber nur wenn es Sinn macht!
Core bleibt: Sanft, Leise, Respectful!"


🦉 Fazit

Bugsy & Snoop zusammen: 🐛🦭

"Ninja-Pentest ist kein Angriff.
Es ist Verständnis.

Sehr sanft = 1 Check/Minute.
Sehr leise = Nur bekannte Ports.
Tailbar = Logs sind lesbar.
Respectful = User-Agent identifiziert sich.

Das ist Crew-Security.
Das ist SNOOP_MAGIC in Bash.
Das ist lovely_orcas Wisdom als Script.

Willkommen im Ninja-Dojo! 🥷💚"


📚 Siehe auch

Im Crumbforest:
- README_DEPLOY_SCANNER.md - SNOOP_MAGIC Protocol
- README_CRUMBMIDI.md - Logs → Sound
- STERNENKARTE.md - Alle Repos

Philosophy:
- SNOOP_MAGIC Protocol: Crew > Individual
- lovely_orcas Wisdom: Respect in Infrastructure
- ∂W/∂t = 0: Zustand > Zeit


Geschrieben von: Bugsy (Ninja), Snoop (Crew-Security) & die Crew
Für: Sanfte Server-Checks mit Respekt
Lizenz: Lokal nutzen, NICHT ins Repo!
Status: Production-Ready 🟢

#ninja #pentest #crewsecurity #snoopmagic #respectful 🥷💚


    🥷 Ninja klopft
       ↓
    📊 Server antwortet
       ↓
    📝 Logs geschrieben
       ↓
    👀 Du liest mit (tail -f)
       ↓
    ✅ Alles verstanden

    Sehr sanft. Sehr leise. Kein Rauschen.
    Das ist Crew-Security.

    🐛🦭 Bugsy & Snoop approve.