Johan gaf in eerste instantie een goede tip. Houd dus rekening met dit soort dingen (potentiële exploits) als je zo'n script gebruikt op een server met meerdere gebruikers waar andere gebruikers dit script ook kunnen uitvoeren...
Om zoiets te voorkomen moet je de invoer controleren (valideren). 1 van de manieren om dit te doen is zoals SeySayux al zei door de invoer te "escapen". Als iemand hier nog kan vertellen hoe je het best de invoer kunt valideren zou dat een mooie toevoeging zijn lijkt me
Ik zeg je, het is onmogelijk om dit te exploiten. Zet misschien even sudo -K op het einde van het script.
als je ./test.sh a; sudo mkdir root doet, dan doe je:
* Voer test.sh uit met parameter a
* test.sh bevat "echo $1". $1 wordt gesubstitueerd door a.
* Dus je doet feitelijk echo a.
* Voer een tweede, nieuw commando uit, namelijk sudo mkdir root.
Dus, niks te exploit. Twee commando's achter elkaar zetten is een feature van bash. Alles achter de ; wordt nog eens niet doorgegeven als parameter. Probeer anders eens
#!/bin/bash
echo $1
sleep 100;
Nu wordt de map pas na 100 seconden gemaakt, wat bewijst dat er geen exploit is en er nooit was. Ok?