Introducere
vulnerabilitățile de injecție de comandă sunt una dintre cele mai periculoase vulnerabilități web. Mulți testeri de securitate și vânători de recompense își propun să găsească vulnerabilități de injecție de comandă datorită impactului pe care îl pot crea asupra aplicației țintă.
acest articol va oferi o prezentare generală a vulnerabilităților de injecție de comandă, împreună cu o introducere la diferite vulnerabilități care pot duce în cele din urmă la injectarea de comandă.
ce este injecția de comandă?
Command injection este un tip de vulnerabilitate web care permite atacatorilor să execute comenzi arbitrare ale sistemului de operare pe serverul în care rulează aplicația. Vulnerabilitățile de injecție a comenzilor apar atunci când aplicațiile folosesc comenzi shell sau scripturi care execută comenzi shell în fundal.
să luăm în considerare următoarea adresă URL a unei aplicații, care efectuează base64-codificare de intrare de utilizator.
http://target-site.com/encode.php?text=helloworld
această intrare de utilizator este trecut ca un parametru get la encode.fișier php.
următorul este codul sursă al encode.php:
<?php
$input = $_GET;
sistem („echo-n”. $ intrare.”/bază64″);
?>
după cum putem observa din fragmentul de cod precedent, intrarea utilizatorului este transmisă funcției php system (), Care este utilizată pentru a executa comenzi ale sistemului de operare în PHP.
dacă un utilizator adaugă o comandă de sistem la intrare, aceasta va fi executată ca o comandă de sistem de operare, care arată astfel:
http://target-site.com/encode.php?text=test;id
următorul este răspunsul returnat utilizatorului:
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?
clasa de vulnerabilități command injection este considerată una dintre cele mai periculoase vulnerabilități web, deoarece oferă control asupra sistemului de operare subiacent unui atacator. Acest control poate fi utilizat în mai multe moduri diferite, inclusiv mișcarea laterală prin rețeaua internă folosind încrederea pe care serverul țintă O are cu alte sisteme din rețea.
vulnerabilități care pot duce la executarea comenzii
în timp ce vulnerabilitățile de execuție a comenzii apar atunci când aplicația vulnerabilă permite utilizatorului final să extindă funcționalitatea implicită a aplicației și să execute comenzi de sistem, este posibilă și executarea comenzilor prin codul aplicației. Acest lucru este cunoscut sub numele de executarea codului. Chiar și atunci când există o vulnerabilitate de execuție a codului, scopul final este de a executa comenzi de sistem arbitrare prin intermediul acestuia. Având în vedere acest lucru, să discutăm unele dintre vulnerabilitățile care pot duce la executarea comenzii prin injectarea comenzii sau executarea codului.
următoarele sunt câteva dintre vulnerabilitățile care pot duce în cele din urmă la atacuri de injecție de comandă.
injecție de comandă arbitrară
așa cum am discutat în exemplul nostru anterior, este posibil ca aplicațiile să aibă aplicații care primesc comenzi de sistem arbitrare de la utilizator direct și să le execute pe gazda de bază. Acesta este un exemplu de clasă de vulnerabilitate a injecției de comandă.
încărcări de fișiere arbitrare
când aplicațiile permit utilizatorilor să încarce fișiere cu extensii de fișiere arbitrare, poate duce la injectarea comenzii atunci când aceste fișiere încărcate sunt plasate în webroot. Acesta este un alt mod obișnuit în care aplicațiile web pot deveni vulnerabile la injecția de comandă.
serializare nesigură
în afară de vulnerabilitățile standard de injecție a comenzii, executarea arbitrară a comenzii poate fi posibilă și folosind alte vulnerabilități, cum ar fi deserializarea nesigură. Acest lucru profită de faptul că codul de pe server deserializează conținutul serializat trecut de utilizator, fără a-l valida corespunzător. Chiar dacă acest lucru este cunoscut sub numele de clasă de vulnerabilități de serializare nesigură, în cele din urmă duce la injectarea comenzii dacă aplicația țintă îndeplinește anumite cerințe, cum ar fi gadgeturile adecvate disponibile în calea clasei.
server-side template injection
atunci când aplicațiile web folosesc tehnologii de templating server-side, cum ar fi Jinja2 sau crenguță pentru a genera răspunsuri HTML dinamice, este posibil să aibă injecție șablon server-side. Vulnerabilitățile SSTI apar atunci când intrarea utilizatorului este încorporată într-un șablon într-un mod nesigur și are ca rezultat executarea codului la distanță pe server.
XML external entity injection
XML external entity vulnerability este un alt tip de vulnerabilitate, care apare împotriva aplicațiilor care analizează intrarea XML controlată de utilizator folosind un parser XML slab configurat. Vulnerabilitățile XXE duc de obicei la citirea fișierelor arbitrare de pe server și la provocarea atacurilor de tip Denial-of-Service.
cu toate acestea, ele pot duce, de asemenea, la executarea comenzii pe server atunci când sunt îndeplinite anumite condiții. De exemplu, dacă PHP expect:// wrapper este activat pe serverul vulnerabil țintă, este posibil să executați comenzi arbitrare pe server.
vă rugăm să rețineți că aceasta nu este o listă exhaustivă de vulnerabilități care pot duce la injectarea comenzii și există mai multe alte vulnerabilități care pot duce la injectarea comenzii atunci când îndeplinesc anumite condiții.
concluzie
este evident că există mai multe vulnerabilități diferite care pot duce la executarea comenzii pe server. Dezvoltatorii trebuie să fie conștienți de aceste vulnerabilități de injecție de comandă datorită faptului că aceste vulnerabilități au un impact ridicat, deoarece pot oferi control deplin asupra infrastructurii de bază.
în următoarele articole din această serie, vom acoperi mai multe concepte legate de injecția de comandă, cum ar fi identificarea și exploatarea injecției de comandă oarbă.