Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book
Czym jest XPATH injection?
O XPATH (XML Path Language) pisaliśmy niedawno temu w kontekście jego możliwego wykorzystania w niektórych przypadkach podatności SQL injection.
Podatność XPATH injection jest pewnym stopniu podobna do SQL injection:
- w podobny sposób wygląda testowanie na obecność luki (oczywiście trzeba pamiętać, że mamy tu do czynienia ze składnią XPATH – a nie z SQL),
- dzięki wykorzystaniu podatności również można uzyskać nieautoryzowany dostęp do całej „bazy danych” (w tym przypadku jest to plik XML),
- w końcu – również mamy tu warunki (odpowiednik WHERE z SQL-a) oraz często wykorzystywany w SQLi operator „UNION” (w XPATH jest to znak: | – czyli pipe).
Jeśli chodzi o różnice – XPATH injection występuje znacznie rzadziej od SQL injection (XPATH to jednak dość niszowy mechanizm), nie da się tutaj uzyskać uprawnień na poziomie systemu operacyjnego czy uzyskać dostęp w trybie „zapisu” do pliku. Jak już wspomniałem – w porównaniu z SQL-em mamy również inną składnię samych zapytań.
Ewentualne testy z wykorzystaniem zamieszczonych tu informacji należy realizować jedynie na systemach, których bezpieczeństwo możemy oficjalnie sprawdzać.
Zapytania XPATH
Małe przypomnienie czym jest XPATH. Otóż jest to mechanizm umożliwiający pobieranie z pliku XML wybranego fragmentu. Zobaczmy przykładowe zapytanie XPATH, które w swoim tutorialu prezentuje w3schools (zapytanie widoczne jest w prawym górnym rogu na zrzucie poniżej):
Jak widzimy, rozpoczyna się ono znakiem / (slash), warunki (odpowiednik WHERE z SQL) – można znaleźć w nawiasach kwadratowych, z kolei ostatni element po slashu to wskazanie jakie konkretne dane chcemy pobrać z XML-a (w przykładzie powyżej są to tytuły książek). Zapytanie powyżej zwraca zatem ciąg będący tytułami dwóch książek, których cena jest większa od 35:
XQuery Kick Start Learning XML
XPATH, poza prostymi zapytaniami jak powyżej, umożliwia użycie w zapytaniu funkcji realizujących:
- operacje matematyczne (np. round, abs)
- operacje na ciągach znakowych (np. substr, string-length)
- operacje na strukturze XML-a (np. funkcja name(.) zwraca nazwę tzw. bieżącego węzła)
- itd.
Przykład zapytania z funkcją:
Pobierze ono ceny wszystkich książek – ponieważ warunek w nawiasach kwadratowych jest zawsze prawdziwy:
- fragment title=’test’ jest zawsze fałszywy (nie mamy książki o takim tytule)
- fragment name(.)=’book’ jest zawsze prawdziwy – nazwa bieżącego węzła w XML jest zawsze w tym kontekście równa book
Jeszcze innym przydatnym operatorem w XPATH jest | (pipe). Działa on podobnie do operatora UNION z SQL – tj. łączy sumuje zapytań XPATH. Przykład:
Takie zapytanie po prostu wyświetli wszystkie zawartości tagów <year> oraz <title> z pliku XML widocznego na wcześniejszym zrzucie.
W porządku, zobaczmy więc jak wygląda przykładowe wstrzyknięcie XPATH:
Można je też zobaczyć „na żywo” w tym miejscu.
Czas na hackme
Nasze zadania:
- Poinformuj znajomych o naszych hackme :-) Więcej uczestników to dla nas większa motywacja do tworzenia nowych odcinków. Użycie maila, facebooka czy twittera niewiele kosztuje ;-)
- Wyświetl wszystkie podsystemy statku tutaj.
- Pobierz kod aktywujący backdoor na statku kosmicznym.
- Pobierz całą strukturę XMLa, w którym przechowywane są informacje o sybsystemach statku.
- Wyniki prześlij na sekurak@sekurak.pl z tytułem „hackme xpathi”.
Miłej zabawy :-)
PS
Swoją drogą, jest to jedno z wielu ćwiczeń, które realizują uczestnicy mojego szkolenia z bezpieczeństwa aplikacji www (przy okazji – zapraszam:)
–michal.sajdak<at>securitum.pl
Kolejne ciekawe hackme i kolejna porcja nabytej wiedzy.
Dzięki! :)
P.S.: A swoją drogą to te zaadania z prędkością karabinu wypuszczacie – co bardzo mnie cieszy :D.
Cieszę się że hackme się podoba :)
Co do szybkości, to akurat teraz będzie mała przerwa z zadaniami – w końcu są wakacje ;-p
–ms
Fajne byłoby też takie większe hackme: jedna porządniejsza aplikacja najeżona różnego rodzaju błędami – kto jako pierwszy znalazłby wszystkie (lub kto znalazłby najwięcej w określonym czasie), ten wygrywa :)
Michał: dobry pomysł, choć trzeba na to trochę czasu… pewnie następne hackme w okolicach połowy sierpnia ;-)
–ms
Po wpisaniu 'or’1’=’1′ w http://training.securitum.com/4/details.php?id=1
otrzymałem :
„Warning: SimpleXMLElement::xpath(): Invalid predicate in /var/www/4/details.php on line 114
Warning: SimpleXMLElement::xpath(): xmlXPathEval: evaluation failed in /var/www/4/details.php on line 114
Not found :-/ ”
LOL
Fajnie wytłumaczone. Dzięki :)
Fajne oby tak dalej!!!