phpmadness
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| phpmadness [2025/10/31 13:34] – mbunic | phpmadness [2025/12/01 11:40] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Zadatak s Hacknite platforme - PHPmadness | + | ==== Zadatak s Hacknite platforme - PHPmadness ==== |
| < | < | ||
| Line 7: | Line 7: | ||
| </ | </ | ||
| - | Uz zadatak | + | Dan je i izvorni kod zadatka. \\ |
| {{ phpmadness: | {{ phpmadness: | ||
| - | Pregledom **Dockerfilea** zadatka, može se vidjeti da se radi o PHP zadatku, te da se flag kopira u putanju | + | Pregledom **Dockerfilea** zadatka, može se vidjeti da se radi o PHP zadatku, te da se flag kopira u direktorij |
| < | < | ||
| Line 17: | Line 17: | ||
| </ | </ | ||
| - | Odlaskom na stranicu zadatka, potrebno je registrirati novi korisnički račun, nakon logina, se prikazuje stranica na kojoj se može pohraniti jedna slika. \\ | + | Odlaskom na stranicu zadatka, potrebno je registrirati novi korisnički račun, nakon logina prikazuje |
| {{ phpmadness: | {{ phpmadness: | ||
| Line 25: | Line 25: | ||
| {{ phpmadness: | {{ phpmadness: | ||
| - | Pregledom koda u datoteci **user.php** može se pronaći kod koji validira da je učitana datoteka zapravo | + | Pregledom koda u datoteci **user.php** može se pronaći kod koji validira da je učitana datoteka zapravo slika. \\ |
| {{ phpmadness: | {{ phpmadness: | ||
| - | Kod se sastoji od tri provjere, prva provjera je samo provjera ekstenzije | + | Kod se sastoji od tri provjere, prva provjera je samo provjera ekstenzije |
| < | < | ||
| Line 35: | Line 35: | ||
| </ | </ | ||
| - | Ovu provjeru je lagano | + | Ovu provjeru |
| < | < | ||
| Line 43: | Line 43: | ||
| U kojem bi slučaju ova provjera uzela samo **.jpg**, nakon čega sprema datoteku bez provjerene ekstenzije, što bi značilo da bi samo druga ekstenzija, **.php**, ostala. | U kojem bi slučaju ova provjera uzela samo **.jpg**, nakon čega sprema datoteku bez provjerene ekstenzije, što bi značilo da bi samo druga ekstenzija, **.php**, ostala. | ||
| - | Druga provjera, provjerava da je mime type poslan u zahtjevu odgovara slici: | + | Druga provjera, provjerava da MIME tip poslan u zahtjevu odgovara slici: |
| < | < | ||
| Line 64: | Line 64: | ||
| Provjerava datoteku na serverskoj strani, čitajući njezin "file signature" | Provjerava datoteku na serverskoj strani, čitajući njezin "file signature" | ||
| - | Ova provjera se može isto lagano | + | I ovu provjeru moguće je jednostavno |
| No postoji problem, čak i da se uploada datoteka s PHP kodom koja zaobilazi sve ove provjere, ona se i dalje ne bi izvršila, zato što će se učitati pod putanjom **/ | No postoji problem, čak i da se uploada datoteka s PHP kodom koja zaobilazi sve ove provjere, ona se i dalje ne bi izvršila, zato što će se učitati pod putanjom **/ | ||
| Line 78: | Line 78: | ||
| Što znači da ako je moguće uploadati **.htaccess** file, koji bi također zaobišao provjere da je uploadana datoteka slika, taj učitani **.htaccess** file bi nadjačao (eng. override) roditeljski **.htaccess** file. Time bi bilo moguće definirati vlastita **.htaccess** pravila u direktoriju pojedinog korisnika. | Što znači da ako je moguće uploadati **.htaccess** file, koji bi također zaobišao provjere da je uploadana datoteka slika, taj učitani **.htaccess** file bi nadjačao (eng. override) roditeljski **.htaccess** file. Time bi bilo moguće definirati vlastita **.htaccess** pravila u direktoriju pojedinog korisnika. | ||
| - | No problem je da svaki korisnik smije imati samo jednu učitanu datoteku po korisničkoj sesiji, i učitavanjem nove datoteke, stara datoteka se briše i samo nova čuva, što je prikazano | + | No problem je da svaki korisnik smije imati samo jednu učitanu datoteku po korisničkoj sesiji, i učitavanjem nove datoteke, stara datoteka se briše i samo nova čuva, što je prikazano |
| {{ phpmadness: | {{ phpmadness: | ||
| Line 190: | Line 190: | ||
| Program se treba kompajlirati i nakon toga se može pokrenuti, prosljeđujući mu username za koji je potrebno naći MD5 hash collision u prvih 6 znakova kao argument. | Program se treba kompajlirati i nakon toga se može pokrenuti, prosljeđujući mu username za koji je potrebno naći MD5 hash collision u prvih 6 znakova kao argument. | ||
| - | Primjer para ovakvih | + | Primjer |
| < | < | ||
| Line 212: | Line 212: | ||
| </ | </ | ||
| - | Sada još ostaje | + | Preostaje |
| .htaccess datoteka koja bi koristila ovaj pristup bi se mogla zvati **.htaccess.jpg**. | .htaccess datoteka koja bi koristila ovaj pristup bi se mogla zvati **.htaccess.jpg**. | ||
| Line 220: | Line 220: | ||
| ==== .wbmp ==== | ==== .wbmp ==== | ||
| - | Prvo se zasniva na činjenici da se pri parsiranju .htaccess datoteke, null byteovi | + | Prvo se zasniva na činjenici da se pri parsiranju .htaccess datoteke, null bajtovi |
| < | < | ||
| - | <4 null byteova><new line (\n ili 0a u hex)> | + | <4 null bajtova><new line (\n ili 0a u hex)> |
| < | < | ||
| Require all granted | Require all granted | ||
| Line 239: | Line 239: | ||
| </ | </ | ||
| - | što uvjerava | + | što prolazi |
| < | < | ||
| Line 280: | Line 280: | ||
| </ | </ | ||
| - | Nakon toga je samo potrebno: | + | Preostali koraci: |
| * s jednim korisnikom učitati prethodno opisanu **.htaccess.jpg** datoteku, \\ | * s jednim korisnikom učitati prethodno opisanu **.htaccess.jpg** datoteku, \\ | ||
| {{ phpmadness: | {{ phpmadness: | ||
| Line 287: | Line 287: | ||
| {{ phpmadness: | {{ phpmadness: | ||
| - | * otići na lokaciju učitane PHP datoteke i posjetiti | + | * otići na lokaciju učitane PHP datoteke i posjetiti |
| {{ phpmadness: | {{ phpmadness: | ||
phpmadness.1761917642.txt.gz · Last modified: 2025/12/01 11:40 (external edit)