# 🥷 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

```bash
# 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

```bash
# 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

```bash
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:**
```bash
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:**
```bash
openssl s_client -connect target:443
→ Zeigt: Gültig bis wann? Issuer?
```

**3.3 Gitea Version:**
```bash
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

```bash
# 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

```bash
# 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

```bash
# 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

```bash
# 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):**

```bash
# 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:**

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

**User-Agent ändern:**

```bash
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!)

```bash
# 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!

```bash
# 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

```bash
# 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

```bash
# Ist Server erreichbar?
ping your-server.com

# Firewall?
# VPN?
# IP richtig?
```

---

### Logs zeigen nur "GESCHLOSSEN"

```bash
# 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

```bash
# 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](./README_DEPLOY_SCANNER.md) - SNOOP_MAGIC Protocol
- [README_CRUMBMIDI.md](./README_CRUMBMIDI.md) - Logs → Sound
- [STERNENKARTE.md](./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.
```
