SQL injection

BM-2cXTQRghhnuzGDBcuSNmVpLrfqJ6nxdxa3
May 16 13:52 [raw]

+============================================= |index: +============================================= |0. Disclaimer |1. O czym artykul |2. Co to jest blind sql injection |3. Jak rozpoznawac podatnosc |4. Filtrowanie |5. Komentarze |6. Omijanie filtrowania |7. Co daje sql injection |8. Podsumowanie +============================================= ============================================== 0. Disclaimer. ============================================== Artykul powstal w celach edukacyjny , ukazujac bledy i niedopatrzenia webmasterow , programistow php , cgi etc podczas tworzenie aplikacji sieciowych korzystajacych z zasobow bazy danych. Autor nie namawia czytelnikow do uzywania tych technik niezgodnie z prawem. Autor nie bierze odpowiedzialnosci za to jak czytelnicy wykorzystaja zawarte tu informacje. ============================================== 1. O czym artykul. ============================================== Jedynym sposobem exploracji zasobow serwera jest wyszukanie w uslugach jakie pelni , bledy i niedopatrzenia programistow. Jedna z najprostrzych metod jest 'sql injection'. Metoda ataku polega na odpowiednim spreparowaniu ciagow znakow ktore tworza logiczny ciag zapytania sql do bazy danych. Aby zrozumiec na czym polega blind sql injection , potrzebna jest wiedza o podstawach jezyka sql. Nie bylem w stanie umiescic w jednym artykule tych wszystkich informacji naraz. W rozdziale 10'tym 'Info' zamiescilem niezbedne linki ktore pomoga wszystko zrozumiec. ============================================== 2. Co to jest blind sql injection. ============================================== Jedna z odmian ataku sql injection jest blind sql injection , bardziej zaawansowana technika polegajaca w gruncie rzeczy na tym samym. Jedyna roznica miedzy nimi jest to ze atak przeprowadzamy niemal na slepo, kierujac sie wlasna wiedza do celu. Podczas stosowania tej metody wykorzystuje sie operatory logiczne zapytan sql , ktore sprawiaja bardziej wiarygodne zrodlo informacji o stanie bazy danych jak i jej tabelach. Atak na slepo ? , ale jak ? juz tlumacze. Zwykle zle spreparowane wartosci przekazywane w zmiennych do aplikacji sieciowych powoduja wyswietlenie bledu bazy danych , co sprawia ze latwo jest spreparowac odpowiednie zapytanie. A co jesli programista wkorzysta wyjatki wynikow z bazy danych powodujace ich zamaskowanie ? Luka nadal istnieje , jestesmy w stanie ja wykorzystac lecz rozpoznanie typowego bledu sql juz nie jest takie proste , trzeba przypatrywac sie na dzialanie aplikacji sieciowych pod katem programisty , badac jej zachowanie. ============================================== 3. Jak rozpoznawac podatnosc. ============================================== Mozna rozpoznawac w dwa sposoby , klasyczny i logiczny. (w rzeczywistym swiecie nie ma takiego podzialu , stworzylem go sam aby latwo zobrazowac dwie metody) *Klasyczny (wykorzystywany przy atakach metoda sql injection): Polega na odpowiednim spreparowaniu wartosci zmiennych przekazywanych do aplikacji sieciowych zazwyczaj za pomoca metody GET (ciag umiejscowiony w zwyczajnym adresie url) , jednakze mozna takze szukac bledow za pomoca metody POST (spreparowany ciag w zmiennych przekazywanych przez formularze), co staje sie juz bardziej zaawansowana technika. Aby zorientowac sie czy badana aplikacja sieciowa podatna jest na ataki sql injection metoda klasyczna nalezy odpowiednio spreparowac wartosci zmiennych przekazywanych do serwera. Jesli beda blady w zapytaniu sql ktore nie tworzy logicznej calosci (nie zwraca porzadanego wyniku) , apliakcje sieciowe 'wypluja' odpowiednie logi na badanej stronie (niekiedy w zrodle html w postaci komantarza!). Aby tego dokonac mozna stosowac sie do tych regul: http://adres_url/index.php?id=(wartosc) (wartosc) - moze przybierac rozne wartosci lub takze inny rodzaj zmiennej. przyklad: (-1) //wartosc -1 id klucza tabel bazy danych , zazwyczaj nie ma takiego klucza wiec powinien wyskoczyc blad. (-999999999999) //to samo co wyzej , tylko z ta pewnoscia ze napewno nie ma tak wysokiego klucza o wartosciach ujemnych. (999999999999999999999) //zazwyczaj w bazach danych malych witryn sieciowych nie ma tak duzego klucza w tabeli , powinien wyskoczyc blad. (ssssssssssssssssssssssssssssssss) //powoduje przypisanie do klucza ( zmiennej rodzaju integer ) , zmiennej rodzaju vchar , powinien wyskoczyc blad zapytania sql do bazy danych. (1') //powoduje blad w logicznym zapytaniu sql do bazy danych , jesli zauwarzymy blad wyswietlony na otrzymanej stronie bedziemy pewni ze strona nie posiada odpowiedniego filtrowania znakow , strona jest podatna na sql injection. Analizujac dane posuniecia jestesmy w stanie stwierdzic: -zmienna integer przekazywana do skryptu nie jest filtrowana poprzez wartosc tj: aplikacja nie widzi roznicy miedzy wartosciami 1 a -1 , traktuje je jako wartosc integer , przekazuje do zapytania sql. -ze w tabeli nie ma tak duzego klucza jak: (999999999999999999999) -nie sa filtrowane znaki vchar , sa traktowane jako integer i do tej wartosci przypisywane. swiadczyc to moze o tym ze strona moze nie posiadac zadnego filtrowania wartosci wejsciowych. -jesli (1') zwroci blad to jestesmy przekonani ze skrypt nie posiada najprawdopowdobniej zadnego filtrowania , strona najprawdopodobniej jest calkowicie podatna na ataki sql injection. *logiczny (wykorzystywany podczas atakow blind sql injection) Polega na wykorzystaniu odpowiednich warunkow logicznych w zapytaniach kierowanych do bazy danych. Manipulacja na warunkach logicznych moze pozwolic nam na okreslenie: -czy wartosc badanej zmiennej nie jest filtrowana -nazwy kolumn danej tabeli w bazie danych -nazwy tabel w bazie danych -ilosc kolumn zwracanych w wyniku zapytania sql z bazy -ilosc wierszy zwracanych w wyniku zapytania sql z bazy Jak wczesniej napisalem , wszystko jest robione wedlug okreslonych regul i na slepo , czesto stawiajac na wlasna intuicje i szczescie. Niekiedy programista piszac aplikacje sieciowe zamieszcza odpowiedni kod do wykrywania zauwazonych bledow poprzez analize wynikow bazy danych. Jesli aplikacja 'zauwazy' blad to moze: -zwrocic go na strone glowna (lub jako komentarz w kodzie html) -pozostawic szczegulne znaki w kodzie programu (dodatkowe spacje , nowe linie , znaki ktorych nie bylo podczas zwyklego zapytania) -moze przekierowac na strone bledu (na inna podstrone strony) -moze wyswietlic blad ze 'czegos' nie znalazlo w bazie. http://adres_url/index.php?id=(wartosc) Oryginalna wartosc to np 100 , (wartosc)=100 Teraz spreparowanie odpowiednich warunkow logicznych przyklad: (wartosc)=100 and 1=1 Jesli zauwazymy ten sam wynik strony (tj. te sama tresc strony wynikowej) mozliwe ze strona jest: -odpowiednio filtrowana (z wartosci 100 and 1=1 jest wyciagana tylko pierwsza wartosc integer tj: 100) -podatna na blind sql injection Nastepna czynnosc to: (wartosc)=100 and 1=2 Jesli zauwazymy ten sam wynik strony (tj. te sama tresc strony wynikowej) mozliwe ze strona jest: -odpowiednio filtrowana (z wartosci 100 and 1=2 jest wyciagana tylko pierwsza wartosc integer tj: 100) -nie podatna na sql injection Jesli zauwazymy jakies zmiany w tresci strony wynikowej tj. brak zawartosci strony , przekierowanie na bledna strone , dziwne znaki na stronie lub tez calkowity brak zawartosci strony to znaczy ze strona jest podatna na sql injection , aby jednak dowiedziec sie czegos wiecej o ewentualnym filtrowaniu badz innych udziwien programistow mozna stosowac dalsze czynnosci. Nastepna czynnosc to: (wartosc)=100 and 1=2 or 1=1 Jesli zauwazymy zupelnie inna zawartosc strony (np inny artykul , inny news) swiadczyc to moze ze strona jest calkowicie podatna na sql injection. Nastepna czynnosc to: (wartosc)=100 and 1=2 or id=100 (wartosc)=100 and 1=2 or ids=100 (wartosc)=100 and 1=2 or uid=100 Czynnosci te sluza do wykrywania nazw kolumn w tabeli bazy danych (mozna stosowac rozne popularne nazwy kolumn , czasem polskie , czasem angielskie) do pomocy przychodzi na szczescie nam kod strony , analizujac kod html mozna ustalic jakim programista sieciowym byl autor strony , czy pisal strone szybko , czy wolno i doklanie , jakie nazwy stosowal do opisywania obiektow jak i nazw parametrow w formularzach. Analizujac jego kod mozna postawic sie w jego miejscu , pomyslec o czym myslal piszac dany kod ...). Nastepna czynnosc to: (wartosc)=100 or 1=1 order by id desc/* (wartosc)=100 or 1=1 order by id asc/* Jesli bedziemy widziec inna zawartosc strony wynikowej bedziemy pewni ze strona podatna jest na sql injection. Teraz warto by okreslic ile wierszy jest wyswietlanych na stronie , zazwyczaj jest to jeden , ale moze sie zdarzyc ze wylistowac moze wiecej wierszy. przyklad (wartosc)=100 and 1=2 or 1=1 limit 0,1/* (wartosc)=100 and 1=2 or 1=1 limit 5,10/* itd. ============================================== 4. Filtrowanie. ============================================== Filtrowanie programisty moze polegac na: -zastepowaniu niebezpiecznych znakow \ = \\ * = \* " = \" wartosc|spacja|wartosc = wartosc+wartosc wartosc|spacja|wartosc = wartosc_wartosc -zastepowaniu kluczowych znakow jezyka sql union select insert drop limit where from into -zastepowaniu znakow logicznych and or && || -zastepowaniu wartosci niebezpiecznych (-999999999) wartosciami bezpiecznymi -999999999999999999<1 = 1 9999999999999999>10000 = 1 -analizowaniu wartosci i przypisywaniu tylko tej najbardziej rzeczywistej i odpowiedniej '1 and 1=1' = 1 '2 and 1=1' = 2 Widac ze poczatkowa wartosc jest przypisywana i dopiero po przefiltrowaniu pozostaje zbudowane zapytanie sql i otrzymane na jego podstawie wynik z bazy danych. wiec 'a and 1=1' = ? Nie powinno wogole dojsc do wykonania zapytania sql , jeszcze przed zapytaniem aplikacja sieciowa wykryla by blad i przkierowala na odpowiednia strone o bledzie lub wyswietlila go na oczekiwanej stronie. O filtrowaniu mozna sie wiecej dowiedziec podczas budowania odpowiednich zapytan sql , analizujac zapytanie sql i porownujac jaki powinien byc jego wynik z wynikiem rzeczywistym. ============================================== 5. Komentarze. ============================================== Komentarze sql sa bardzo pomocne przy budowaniu bardziej zlozonych zapytani sql do bazy danych. /* tekst miedzy znacznikami komentarza traktowany jest w zapytaniu sql jako np przerwa (spacja) miedzy wartosciami itd. Warto zauwazyc ze znaczniki takiego komentarza nie sa traktowane jako znaki niebezpieczne i czesto nie sa filtrowane , wiec moga symulowac spacje w kazdym zapytaniu sql */ po zamknieciu znacznika komentarza powinien znajdowac sie kolejne operanty zapytania sql , znak rozpoczecia komentarza wieloliniowego takze mozna stosowac na koncu kazdego zapytania sql , bez potrzeby jego zamkniecia. http://adres_url/index.php?id=100 and 1=2 or 1=1 limit 0,1/* Warto zauwazyc jakie pomocne sa komentarze na powyzszym zapytaniu , powoduja ignorowanie dalszych zaleznosci w klauzuli where zapytania sql. przyklad: select id,title,content,date from news where id=100 limit 0,1; select id,title,content,date from news where id=100 and 1=2 or 1=1 order by id desc limit 0,1/* limit 0,1; select id,title,content,date from news where id=100/**/and/**/1=2/**/or/**/1=1/**/order/**/by/**/id/**/desc/**/limit 0,1/* limit 0,1; przyklad: select id,title,content,date from news where date=4325512 order by date desc; select id,title,content,date from news where date=4325512 and 1=2 or 1=1 order by id desc/* order by date desc; select id,title,content,date from news where date=4325512/**/and/**/1=2/**/or/**/1=1/**/order/**/by/**/id/**/desc/* order by date desc; Istnieja rowniez komentarze jednoliniowe tj. ignorowane sa znaki zapytania sql do konca lini. -- # przyklad: select id,title,content,date from news where id=100 limit 0,1; select id,title,content,date from news where id=100 and 1=2 or 1=1 order by id desc limit 0,1-- limit 0,1; ============================================== 6. Omijanie filtrowania. ============================================== Waznym trikiem jest takze omijanie zabezpieczenia filtowania , jesli oczywiscie jest taka mozliwosc. Trik polega na odnajdywaniu na koncie strony skryptow lub klas ktore sa np wywolywane przez: -include -eval -include_once -require -require_once Zaluzmy ze strona posiada glowny index , ktory zajmuje sie rola typowego firewall , fitruje parametry i includuje odpowiednie skrypty. Mozna probowac znajdowac skrypty odpowiedzialne za poszczegulne funkcje serwisu , wykonywac je bezposrednio z odpowiednimi wartosciami parametrow. Technika bardzo zaawansowana lecz kiedy programista umiescil zabezpieczenie tylko w glownym indexie to dalsze skrypty nie posiadaja zadnego fitrowania i mozna sie do nich bezposrednio odwolac. Metoda polega na odgadywaniu nazw skryptow i paramterow. Paramtery to zazwyczaj klucze (id) , lub zmienne o tych samych nazwach ktore sa dolaczane go indexu strony. przyklad: http://adres_url/index.php?p=aktualnosci&id=120 http://adres_url/index.php?page=aktualnosci&id=120 http://adres_url/index.php?mode=aktualnosci&id=120 http://adres_url/index.php?str=aktualnosci&id=120 http://adres_url/index.php?use=aktualnosci&id=120 http://adres_url/index.php?view=aktualnosci&id=120 http://adres_url/aktualnosci_102_0.htm http://adres_url/aktualnosci.php?id=120 http://adres_url/aktualnosci.php4?id=120 http://adres_url/include/aktualnosci.php?id=120 http://adres_url/inc/aktualnosci.php?id=120 http://adres_url/class/aktualnosci.php?id=120 http://adres_url/page/aktualnosci.php?id=120 itd. ============================================== 7. Co daje sql injection. ============================================== Duzo osob sie pyta co daje sql injection. Wstrzykniecie kodu do zapytania bazy danych moze: -powodowac ze atakujacy zdobedzie dane uzytkownikow serwisu , administratora. Wykorzystujac je moze przejac konto ftp strony , poczte email , panel administracyjny zarzadzajacy skryptami strony , dostep do bazy danych -pozwolic dodac newsa na stronie a w nim odpowiednio spreparowany globalny kod xss , pozwalajac na zaawansowany atak na uzytkownikow strony -pozwolic dodac newsa na stronie a w nim odpowiednio spreparowany kod html (lub javascript), powodujacy wyswietlenie nieoczekiwanej strony (strona owned) -pozwolic na dokonanie operacji za posrednictwem php , wgrywanie shell'a ktory jest wykonywany po stronie serwera. -pozwolic na calkowite zawieszenie bazy danych , strona offline. ============================================== 8. Podsumowanie. ============================================== Jak widac za pomoca sql injection mozna dokonac bardzo duzo rzeczy, to czyni ten rodzaj bledow w aplikacjach sieciowych na bardzo wysokim poziomie. Zwracam sie do administratorow sieciowych z prosba o zadbanie o swoje serwisy , niechlujna prace nalezy dokonczyc i odpowiednio ja zabezpieczyc [...]

[chan] po_polsku
BM-2cX9uTshtCbunGLKok9MiFMhXmLhS4D47Y

Subject Last Count
JAK SKW - OBCIAGA KUTASA . :) Jan 20 16:05 81
W tym działaniu każdy z Was musi być dla siebie dowódcą Jan 20 08:19 1
Anaktam Pastam Paspasim Dionsim Jan 19 22:12 1
Mity o sieci I2P Jan 19 21:17 4
JEBAĆ KURWE - POLICJE Jan 19 20:25 23
Pomysł na zabawe - zamach terorystyczny ? Jan 19 19:33 23
wiele dodatkowych eksperymentów Jan 19 19:12 1
RE: Zapraszamy na polskie forum wywrotowe Jan 19 14:32 1
Bardzo aktywizują się roszczeniowe środowiska żydowskie Jan 19 14:27 1
OPERACJA Jan 19 14:27 1
DZIAŁANIE Jan 19 14:23 1
chetni do podsieci Jan 19 14:00 2
EFEKT Jan 19 09:52 1
PROCES Jan 19 09:52 1
Barbara Nowacka i jej mikroskopijna organizacja Jan 19 08:21 1
zniknął nieoczekiwanie temat imigracji Jan 19 08:21 1
Czy jesteśmy Polakami … Jan 19 08:05 1
knownnodes Jan 19 07:21 5
дезинформация Jan 19 00:49 1
Dear polish bitmessage users on Android, help me please ! Jan 19 00:38 3
czy jest jeszcze w sieci takie forum jak była Cebulka Jan 18 22:08 65
Kto go odwiedzał spoza zakładu karnego na tzw. widzeniach ? Jan 18 21:26 2
Przeciwko PiS protestują żałosne pijaczki Jan 18 20:12 1
rzygać się chce od tej cebuli Jan 18 20:11 10
czy to spotkanie rzeczywiście ktoś zainspirował Jan 18 12:58 1
Zaostrzenie cenzury Jan 18 12:33 2
Kiedy pojawiły się pierwsze doniesienia medialne o tragedii? Jan 18 09:42 3
spacer Jan 18 09:30 8
Lecha nie ma, ale został ten drugi Jan 18 07:48 2
Odśmiecanie Facebooka z dezinformacji Jan 17 18:18 1
pedałki w rządzie Jan 17 16:18 2
FUN Jan 17 14:49 1
Szpiegowska siatka Chin w Polsce Jan 17 14:33 1
Pracują grupy operacyjne, złożone z pracowników Ministerstwa Jan 17 14:28 1
Ruscy i Szwaby próbują poróżnić Polskę i Ukrainę Jan 17 11:49 1
Możecie przetestować anonimowość swoich VPNów i Torka, dziubki :) Jan 17 11:46 1
Dziękujemy wam, debile antyszczepionkowcy! Jan 16 19:25 1
JAK SKW OBCIAGA KUTASA :) Jan 16 17:58 66
temat kiboli Jan 16 13:39 1
Polska Rzeczpospolita Bananowa im. Adamowicza Jan 16 12:11 1
Rząd powinien zrezygnować z Huawei Jan 15 19:02 1
Ponad połowa Rosjan chce dymisji rządu Jan 15 16:57 1
Paweł "Santo Subito" Adamowicz i jego brudne sprawki Jan 15 15:31 1
Ty chamie, polski chamie! Jan 15 15:31 1
B.L.O.S. Jan 15 15:11 1
Remington 760 sprzedany Jan 15 13:27 1
Gangsterskie porachunki w Gdańsku: złodziej wsadził kosę złodziejowi Jan 15 13:20 5
Sprzątanie Polski z chińskich gówien z backdoorami Jan 14 19:32 1
Dobre wiadomości dla Polski i Gdańska! Jan 14 15:49 4
Tak naprawdę to PRL nigdy się nie skończył Jan 14 15:21 1
Czy tamte zastrzelone dziki były gorsze? Jan 14 15:16 1
Brudziński grozi internautom. Pokażmy mu kto jest silniejszy! Jan 14 12:35 1
Polski rząd rozważa rezygnację z urządzeń mobilnych chińskich marek Jan 14 12:35 1
Obecność w Polsce bazy wojsk USA wzmocni bezpieczeństwo w całym regionie Jan 14 12:20 1
Pijani piloci, brzoza i „Pierwszy Pasażer” Jan 13 18:53 1
Ludzie odchodzą, środowisko pozostaje. Jan 13 18:49 1
Zsowietyzowane Szwaby wzięte za mordy przez USA Jan 13 17:24 1
Huawei is a Chinese intelligence front Jan 13 14:47 1
Niemieckie służby atakują Michała Rachonia Jan 13 11:36 1
Sprzedam Remington 760 Jan 13 10:42 1
Za wszelką cenę chcą zablokować polską inwestycję Jan 13 10:37 1
Firma Huawei powinna zostać wykluczona z polskiego rynku Jan 13 01:49 2
UWAGA: Wrogowie Polski próbują wymusić wprowadzenie euro! Jan 13 01:49 2
Brudasy gwałcą dziewczynki Jan 12 23:21 1
Ataki nożowników są w Niemczech coraz częstsze. Jan 12 23:21 1
Ruska dziwka Krzysztof Bosak chciałby szkody dla Polski Jan 12 20:57 1
PISowskie debile łatwe do manipulacji Jan 12 16:34 5
Komisja Burdenki i kłamstwo katyńskie Jan 12 09:28 1
W momencie zagrożenia życia należy zadzwonić Jan 11 21:39 3
Czym jest UE? Jan 11 21:39 1
Ruska agentura szczeka na Andruszkiewicza Jan 11 20:51 1
Monaro router kovri (i2p) Jan 11 19:46 1
Nowe materiały ws. zabójstwa ks. Jerzego Popiełuszki Jan 11 19:34 1
Zapraszamy na polskie forum wywrotowe Jan 11 19:10 4
Nie cierpię propagandy Jan 11 18:56 2
gowno p2p Jan 11 18:37 8
Uprawiałam seks z Murzynem Jan 11 17:35 1
Pijaczek Kukiz i dziadunio Korwin Jan 11 17:35 1
Kelebija-Tompa i Horgosz-Roeszke Jan 11 17:21 1
Ruskie zielone ludzki a Afryce Jan 10 18:50 1
Zboczeńcy zagrażają naszym dzieciom Jan 10 18:44 1
sprawdzony kod Jan 10 17:00 6
Elysium is back! Jan 10 12:19 3
UWAGA: Osłabienie Tora na życzenie służb dodane w najnowszej wersji! Jan 9 15:30 1
polityczne akty zgonu Jan 9 14:49 1
kto zawiadamia o przestępstwie, wiedząc, że przestępstwa nie popełniono, podlega karze od grzywny do dwóch lat więzienia Jan 9 14:49 1
Porywacze domagają się 9 mln euro w wirtualnej kryptowalucie monero Jan 9 14:43 1
Jak bezpiecznie publikować materiały? Jak zacząć sprzedawać materiały? Jan 9 11:50 4
Akasha Project Jan 9 11:44 1
JEBAC - KURWE POLICJE Jan 9 10:28 22
Jaki offshoreowy VPN polecacie ? Jan 9 00:40 1
sleep 2019 Jan 9 00:13 11
cisza na kanale Jan 9 00:13 3
Tak testowano na nich szczepionki Jan 9 00:10 2
Trwa na mnie nagonka Jan 8 23:47 2
Podwyżek cen prądu nie będzie Jan 7 17:02 1
brednie o „upaińcach” i „usraelu” Jan 7 16:59 1
Ocena relacji polsko-żydowskich Jan 7 15:46 1
JEŚLI NIE CHCECIE STRACIĆ OJCZYZNY NA ZAWSZE, WSPIERAJCIE DOBRĄ ZMIANĘ. DRUGIEJ SZANSY NIE BĘDZIE. Jan 7 15:28 1
JEBAĆ KURWE - POLICJE Jan 7 13:11 1