skip to Main Content
XPath, Un Nou Tip De Atac De Care Trebuie Să Ne Ferim
XPath, un nou tip de atac de care trebuie să ne ferim
Articole recomandate cPanel/WHM

XPath, un nou tip de atac de care trebuie să ne ferim. Acesta poate fi folosit pentru acces neautorizat sau dezvăluirea de informații sensibile.

Introducere

Ca în cazul SQL, atacurile XPath apar atunci când un website construiește o interogare XPath pentru datele XML. Acestea sunt preluate din informațiile furnizate de utilizator. Problemele care apar atunci când utilizați XML pentru stocarea datelor sunt asemănătoare cu cele ale SQL.

Injecția XPath este un tip de atac în care admisia utilizatorilor rău intenționați poate crea mari prejudicii. Acesta poate fi folosit pentru a acorda acces neautorizat sau pentru a dezvălui informații sensibile.

De exemplu, structura și conținutul documentelor XML. Acest stil de atac se realizează prin utilizarea admisiei utilizatorului la construcția șirului de interogare. Atacurile SQL depind de dialectul SQL folosit de baza de date țintă.

În schimb, atacurile XPath sunt mult mai adaptabile și omniprezente, inclusiv în zona de magazine online.

Există două tipuri de atacuri de injecție XML: Boolenization și XML Crawling

Boolenization: atacatorul poate afla dacă expresia XPath dată este adevărată sau falsă. Să presupunem că scopul atacatorului este să vă autentificați în cont. Logarea cu succes ar fi egală cu ”Adevărat” și încercarea de logare eșuată ar fi egală cu ”Fals”.

Doar o porțiune inteligentă a informațiilor este analizată ”caracter” sau numărul. Când atacatorul se concentrează asupra șirului, acesta îl poate dezvălui în întregime. Astfel, acesta verifică fiecare personaj din clasa/raza de caractere din care aparține șirul.

Crawling XML:

Pentru a cunoaște structura documentelor XML, atacatorul poate utiliza:

count(expression)
count(//user/child::node()

Va returna numărul de noduri (în acest caz 2).

stringlength(string)

string-length(//user[position()=1]/child::node()[position()=2])=6

Atacatorul va afla dacă al doilea șir (parola) al primului nod („administrator” al utilizatorului) este format din 6 caractere. Toate acestea se vor realiza prin interogare.

substring(string, number, number)

substring((//user[position()=1]/child::node()[position()=2]),1,1)="a"

Această interogare va confirma (True) sau va nega (False). Se urmărește dacă primul caracter al parolei utilizatorului („admin”) este un caracter ”a”.

Dacă formularul de autentificare ar arăta astfel:

C#:

String FindUser;

FindUser = "//user[login/text()='" + Request("Username") + "' And

      password/text()='" + Request("Password") + "']";

Apoi, atacatorul ar trebui să injecteze următorul cod:

Username: ' or substring((//user[position()=1]/child::node()[position()=2]),1,1)="a" or ''='

Sintaxa XPath poate aminti de atacurile SQL obișnuite. Atacatorul trebuie să ia în considerare faptul că acest limbaj nu permite comentarii pentru restul expresiei. Pentru a omite această limitare, atacatorul ar trebui să folosească expresii OR.

Astfel, acesta poate anula toate expresiile, însă riscă o perturbare a ataculului.

Din cauză de Boolenization, numărul de întrebări, chiar și în cadrul unui document XML mic, poate fi foarte mare.  De aceea, acest atac nu se desfășoară manual.

Cunoscând câteva funcții de bază XPath, atacatorul este capabil să scrie o aplicație într-un timp scurt. Aceasta îi va reconstrui structura documentului și o va completa cu datele de la sine.

Cum să preveniți atacurile XPath

Datorită asemănării cu atacurile SQLi, principalele metode de prevenire sunt, de asemenea, similare. Aceste metode sunt la fel și pentru alte atacuri tipice de injecție de cod.

  • validarea intrării: dezvoltatorul se asigură că aplicația acceptă doar o intrare legitimă;
  • parametrizare: prin această metodă, interogările sunt precompilate. Astfel, trecerea utilizatorilor se realizează ca parametrii în loc de expresii.
Acest Articol are 0 comentarii

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

suntem offline pentru moment