- Klient
- Ukázková firma s.r.o. (jméno a kontakt anonymizovány)
- Předmět
- Veřejná strana: web na WordPressu + hlavní server (VPS)
- V rozsahu
- ukazkova-firma.cz · www · server 203.0.113.10 (souhlas vlastníka ✓)
- Mimo
- Cokoliv mimo tuto doménu, e-mailový hosting třetí strany, CDN
- Pravidla
- Black-box zvenčí z jedné ohlášené IP · throttling na produkci · hesla se brute-forcem netestují · pasivní indicie se ověřují
Cesta útoku · nejpříměji zneužitelná
Vstup
REST API prozrazuje admin účet
/wp-json/wp/v2/users vrací jméno „admin“ — výchozí, nejhádanější.
→
Pivot
Otevřený wp-login (200)
Bez limitu pokusů, bez 2FA. Známé jméno + otevřený login = cílené hádání hesla.
→
Dopad
Správa webu → server
Admin WordPressu umí nahrát kód; z webu je pak krok k datům na serveru.
Heslo jsme záměrně nezkoušeli — report ukazuje, že cesta existuje, ne že jsme jí prošli. Náprava: přejmenovat účet, 2FA, limit pokusů, skrýt user-enum.
Odhad náročnosti kompromitace
| Cíl | Náročnost | Hlavní cesta |
| ukazkova-firma.cz | Středníhodiny–dny | Hádání hesla na otevřený login se známým jménem |
| 203.0.113.10 | Vysokádny+ | Jen přes přihlašovací údaje (FTP) nebo webshell z webu |
„Vysoká náročnost“ = pro útočníka těžké, dobře pro vás. Odolnost celku stojí a padá se silou hesel a 2FA.
Nálezy · výběr
PotvrzenoNeověřenoVyvráceno
Vysoká
Zastaralý plugin slideru s veřejně známou zranitelností (čtení souborů)
Potvrzeno
Verze pluginu je o dvě vydání za opravou. Zneužití vyžaduje účet s právem přispěvatele — řetěz je tedy podmíněný, ale po získání účtu vede k přečtení wp-config.php a tím k databázi.
wpscan --plugins-version-detection aggressive
[!] slider-plugin · verze 6.7.1 · Latest: 6.7.3
| Title: Authenticated (Contributor+) Arbitrary File Read
Náprava: aktualizovat plugin (placený plugin potřebuje purchase code), do té doby vypnout; ověřit, že registrace uživatelů je zavřená.
Střední
REST API prozrazuje jméno admin účtu + otevřený přihlašovací formulář
Potvrzeno
Endpoint /wp-json/wp/v2/users je dostupný nepřihlášeným a vrací účet „admin“. wp-login.php odpovídá 200 bez omezení pokusů.
GET /wp-json/wp/v2/users → 200 [{"id":1,"slug":"admin",…}]
GET /wp-login.php → 200 (bez rate-limitu, bez 2FA)
Náprava: přejmenovat účet, zapnout 2FA, limit pokusů, skrýt user-enum (REST i ?author=) pro nepřihlášené.
Střední
FTP na serveru přenáší hesla nešifrovaně
Potvrzeno
Port 21 otevřený, server nabízí plaintext přihlášení. Kdokoliv na cestě (veřejná Wi-Fi) může heslo odposlechnout.
nmap -sV 203.0.113.10
21/tcp open ftp vsftpd 3.0.x (AUTH TLS nenabízeno)
22/tcp filtered ssh (geo-blok + fail2ban ✓)
Náprava: FTP vypnout, nahradit SFTP; nebo vynutit FTPS a omezit na allowlist IP.
Nízká
Chybějící bezpečnostní hlavičky
Potvrzeno
Odpověď obsahuje jen X-Content-Type-Options. Chybí HSTS, Content-Security-Policy, X-Frame-Options a Referrer-Policy — možný clickjacking, bez ochrany při prvním připojení.
Náprava: doplnit hlavičky v nginx (add_header), HSTS zapnout až po ověření, že vše jede přes HTTPS.
Nízká
xmlrpc.php — pasivní indicie „otevřeno“
Vyvráceno
Aktivní test vrací 403 na úrovni nginx. Endpoint je blokovaný, zesílení brute-force přes pingback není možné — nález vyřazen, nic se neopravuje naslepo.
Info
TLS konfigurace A+ (pozitivní)
Potvrzeno
Jen TLS 1.2/1.3, forward secrecy, AEAD šifry, platný certifikát. Doklad dobře nastavené transportní vrstvy — do reportu patří i to, co je v pořádku.