introduktion
Kommandoinjektionssårbarheter är en av de farligaste webbsårbarheterna. Många säkerhetstestare och prisjägare syftar till att hitta kommandoinjektionssårbarheter på grund av den inverkan de kan skapa på målapplikationen.
den här artikeln kommer att ge en översikt över kommandoinjektionssårbarheter, tillsammans med en introduktion till olika sårbarheter som så småningom kan leda till kommandoinjektion.
vad är kommandoinjektion?
Kommandoinjektion är en typ av webbsårbarhet som gör det möjligt för angripare att utföra godtyckliga operativsystemkommandon på servern där programmet körs. Kommandoinjektionssårbarheter uppstår när applikationerna använder skalkommandon eller skript som kör skalkommandon i bakgrunden.
låt oss överväga följande URL för en applikation, som utför base64-kodning av användarinmatning.
http://target-site.com/encode.php?text=helloworld
denna användarinmatning skickas som en get-parameter till kodningen.php-fil.
följande är källkoden för koda.php:
<?php
$input=$_GET;
system(”echo-n”. $ingång.”/base64″);
?>
som vi kan märka från föregående kodavsnitt skickas användarinmatningen till php system () – funktionen, som används för att utföra operativsystemkommandon i PHP.
om en användare lägger till ett systemkommando i ingången kommer det att köras som ett operativsystemkommando, vilket ser ut så här:
http://target-site.com/encode.php?text=test;id
följande är svaret som returneras till användaren:
testdWlkPTMzKHd3dy1kYXRhKSBnaWQ9MzMod3d3LWRhdGEpIGdyb3Vwcz0zMyh3d3ctZGF0YSkK
As we can see, the word test is not encoded but there is a long encoded text returned in response. Decoding this text looks like this:
$ echo -n ”dWlkPTMzKHd3dy1kYXRhKSBnaWQ9MzMod3d3LWRhdGEpIGdyb3Vwcz0zMyh3d3ctZGF0YSkK” | base64 -d
uid=33(www-data) gid=33(www-data) groups=33(www-data)
As you can see, the encoded text is the output of the id command passed to the application.
Why are command injection vulnerabilities dangerous?
kommandoinjektionsklassen för sårbarheter anses vara en av de farligaste webbsårbarheterna eftersom de ger kontroll över det underliggande operativsystemet till en angripare. Denna kontroll kan användas på flera olika sätt, inklusive sidorörelse genom det interna nätverket med det förtroende målservern har med andra system i nätverket.
sårbarheter som kan leda till kommandokörning
medan kommandokörningssårbarheter uppstår när det sårbara programmet tillåter slutanvändaren att utöka programmets standardfunktionalitet och utföra systemkommandon, är det också möjligt att utföra kommandon via programmets kod. Detta är allmänt känt som kodkörning. Även när det finns en sårbarhet för kodkörning är slutmålet att utföra godtyckliga systemkommandon genom det. Med tanke på det, låt oss diskutera några av de sårbarheter som kan leda till kommandokörning genom kommandoinjektion eller kodkörning.
följande är några av de sårbarheter som så småningom kan leda till kommandoinjektionsattacker.
godtycklig kommandoinjektion
som vi diskuterade i vårt tidigare exempel är det möjligt för applikationer att ha applikationer som tar emot godtyckliga systemkommandon från användaren direkt och kör dem på den underliggande värden. Detta är ett klassexempel på kommandoinjektionssårbarhet.
godtyckliga filuppladdningar
när applikationer tillåter användare att ladda upp filer med godtyckliga filtillägg kan det leda till kommandoinjektion när dessa uppladdade filer placeras i webroot. Detta är ännu ett vanligt sätt webbapplikationer kan bli sårbara för kommandoinjektion.
osäker serialisering
bortsett från standardkommandoinjektionssårbarheterna kan godtycklig kommandokörning också vara möjlig med andra sårbarheter som osäker deserialisering. Detta drar nytta av det faktum att koden på serversidan deserialiserar det serialiserade innehållet som skickas av användaren utan att validera det korrekt. Även om detta är allmänt känt som osäker serialisering klass av sårbarheter, leder det så småningom till kommandoinjektion om målapplikationen uppfyller vissa krav, till exempel att lämpliga prylar är tillgängliga i klassvägen.
mallinjektion på serversidan
när webbapplikationer använder malltekniker på serversidan som Jinja2 eller Twig för att generera dynamiska HTML-svar är det möjligt att ha mallinjektion på serversidan. Ssti-sårbarheter uppstår när användarinmatning är inbäddad i en mall på ett osäkert sätt och det resulterar i fjärrkörning av kod på servern.
XML external entity injection
XML external entity vulnerability är en annan typ av sårbarhet som uppstår mot applikationer som tolkar användarstyrd XML-inmatning med en svagt konfigurerad XML-parser. XXE-sårbarheter leder vanligtvis till att man läser godtyckliga filer från servern och orsakar överbelastningsattacker.
de kan dock också leda till kommandokörning på servern när vissa villkor är uppfyllda. Till exempel, om PHP expect:// wrapper är aktiverat på den utsatta målservern, är det möjligt att utföra godtyckliga kommandon på servern.
Observera att detta inte är en uttömmande lista över sårbarheter som kan leda till kommandoinjektion och det finns flera andra sårbarheter som kan leda till kommandoinjektion när de uppfyller vissa villkor.
slutsats
det är uppenbart att det finns flera olika sårbarheter som kan leda till kommandokörning på servern. Utvecklare måste vara medvetna om dessa kommandoinjektionssårbarheter på grund av att dessa sårbarheter har stor inverkan, eftersom de kan ge full kontroll över den underliggande infrastrukturen.
i de närmaste artiklarna i denna serie kommer vi att täcka några fler kommandoinjektionsrelaterade begrepp som att identifiera och utnyttja blindkommandoinjektion.