Przepatrujac internet w poszukiwaniu informacji na temat bezpieczenstwa systemow informatycznych, natrafilem ostatnio na bardzo ciekawa wzmianke dotyczaca znanej aplikacji internetowej.
Oscommerce, bo o nim mowa to aplikacja, ktora w ramach dobrodziejstw zwiazanych z Open Source pozwala na zalozenie sklepu internetowego prawie za darmo, oraz na w miare bezbolesne zarzadzanie nim.
W bazie danych sklepu znajda sie z czasem informacje nie tylko na temat produktow oraz ich cen, ale rowniez klientow ktorzy od nas dany towar zakupili. Informacje na temat kilientow przechowywane sa w tabeli "customers". Znajdziemy tam miedzy innymmi takie informacje jak: customers_email_address, customers_first_name, customers_last_name, customers_password.
Nie bylo by w tym nic dziwnego ani ciekawego, bo przeciez wiele jest aplikacji internetowych polaczonych z bazami danych, gdyby nie fakt, ze w pewnych konkretnych okolicznosciach osoba calkowicie do tego nieuprawniona (malicious hacker) moze miec wglad w dane klientow, ich imiona, nazwiska, hasla. Jednym slowem hacking pelna geba i to bez zbytniego wysilania sie.
Okazuje sie, ze pewna wersja wspomnianej aplikacji ma dziure w zabezpieczeniach. Blad polega na tym, ze aplikacja pozwala na takie zmodyfikowanie adresu strony aby ten stal sie rozbudowanym zapytaniem SQL.
Google hacking
Jesli jestes wlascicielem sklepu interenteoewgo to na pewno w tym momencie zjerzyl ci sie wlos na glowie. A jesli nie to powinien, bo gdy twoi klienci zorientuja sie ze udostepniasz ich dane w sieci, to mozesz spodziewac sie problemow. Jesli hakerzy zorientuja sie, ze udostepniasz takie dane w sieci to rowniez mozesz spodziewac sie problemow. A jesli ktoremus przyjdzie do glowy uzyc kart kredytowych twoich klientow to... tak jest: mozesz spodziewac sie problemow!
Zaraz zaraz...
Mialem przeciez pisac na temat hackingu z Google i do tego w polaczeniu z Oscommerce. W sieci jest tysiace sklepow internetowych, wiekszosc z nich jest dobrze zabezpieczona, wiec z pewnoscia mozemy czuc sie bezpiecznie, odetchnac z ulga i isc ogladac dobranocke.
Niestety! Nic z tego! Albowiem jesli jestes hakerem i myslisz jak haker to wiesz jakiego narzedzia nalezy uzyc aby z gaszczu informacji wydobyc tylko te, ktore naprowadza cie na luki w zabezpieczeniach systemow. Okazuje sie, ze poczciwy Google moze byc doskonalym narzedziem hakera.
Przyklad: Otwieramy google.com i wpisujemy: allinurl: customer_testimonials.php
Jako rezultat otrzymujemy liste sklepow internetwoych podatnych na wstrzykniecie SQL. Zadnych tam super hiper odlotowych programow z hakerskiego podziemia tylko Google, ktory jest dostepny, legalny, szybki i niezawodny.
Trzeba tu nadmienic, ze Google zdaje sobie sprawe z faktu, iz ich serwis jest uzywany jako narzedzie do namierzania "dziurawych" stron. Dlatego jako wynik zaptania mozemy otrzymac rowniez calkiem pokazna ilosc stron z zakresu bezpieczenstwa systemow informatycznych, ale jesli dysponujemy wolnym czasem i odrobina uporu oraz jestesmy jednostka zdyscyplinowana i zorientowana na osiagniecie celu to znalezienie tego o co nam chodzi nie jest naprawde zadna sztuka. A kiedy juz to znajdziemy .... ratuj sie kto moze.
Zastrzyk z SQL'a
Przygotowanie zastrzyku - skladniki:
Wstrzykniecie:
Adres twojej strony zwykle wyglada jakos tak:
http://www.stronadozhackowania.pl/
Adres sklepu podatnego na SQL Injection bedzie wygladac mniej wiecej tak :
http://www.stronadozhackowania.pl/customer_testimonials.php?=testimonial_id=99999
Juz spiesze z wyjasnieniem:
Jesli widzisz w adresie swojej strony .php? to to, co nastepuje po znaku zapytania jest najprawdopodobniej zakonczeniem kwerendy SQL, ktorej reszta jest ukryta w zrodle strony.
Zeby zobaczyc kwerende wystarczy zmusic przegladarke do przekazania bledu, ktory wurzuca serwer MySQL gdy otrzyma zle skonstruowana kwerende. Mowiac po ludzku do odresu strony wystarczy dopisac cos kompletnie bez sensu: . / -- #
Efekt:
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
select * FROM customer_testimonials WHERE testimonials_id = 99999
Widzimy wiec, ze testimonials_id = 99999 jest czescia kwerendy SQL, ktora zwykle pozostaje niewidoczna. Jeden dziecinnie prosty trick pozwolil nam zebrac kilka waznych inormacji, ktorych administrator sklepu nie powinien nam udostepniec. Dowiedzielismy sie mianowicie, ze server bazy danych to MySQL, ze w bazie danych istnieje tabela customer_testimonials oraz pole o nazwie testimonials_id.
Teraz dopiero przechodzimy do prawdziwego ataku.
Mysle, ze kazdy kto choc troche zna SQL wie o komendzie UNION. Komenda ta pozwala na sklejenie dwoch zapytan w jedno. To wlasnie UNION umozliwia nam na wstrzykniecie NOWEGO zapytania SQL.
Przyklad:
http://www.stronadozhackowania.pl/customer_testimonials.php=testimonial_id=99999+UNION+SELECT+1,2,customers_id,3,4,5,6,7,8+from+customers
No dobrze, ale skad wiemy, ze powinnismy szukac w tabeli "customers" ? Skad wiemy, ze tabela "customers" w ogole istnieje w naszej bazie danych? Odpwiedz jest jasna dla tych, ktorzy znaja strukture serwera MySQL.
Kazdy serwer MySQL posiada dwie bazy danych, w ktorych przechowywane sa informacje o tabelech, bazach danych, polach i uzytkownikach systemu. Jedna z nich jest INFORMATION_SCHEMA. Gdybysmy mogli "odpytac" INFORMATION_SCHEMA atakowanego serwera dowiedzielibysmy sie jakie bazy danych i jakie tabele wystepuja w danym serwerze.
Przyklad:
+union+select+1,2,table_name,4,5,6,7,8+from+information_schema.tables
Powyzszy przyklad wyrzuca na ekran wszytkie tabele z odpytywanego serwera i otwiera swiat nowych mozliwosci dla wielu mlodych i utalentowanych adeptow sztuki hakerskiej.
Mysle, ze to co napisalem powinno dac do myslenia administratorom serwerow, developmerom oraz tym, ktorzy chca miec (lub juz maja) sklep internetowy za 200 zl. Powyzszy atak byl mozliwy, poniewaz developer nie zadal sobie trudu sprawdzenia, czy kwerenda pochodzaca ze strony ma wlasciwy format i czy nie zawiera zakazanych slow kluczowych takich jak UNION. Administrator nie zadal sobie trudu ograniczenia uprawnien uzytkownika do tylko i wylacznie jednej tabeli, dlatego wlasnie mozliwe bylo wyslanie zapytania do tabeli "customers", jak rowniez do bazy danych INFORMATION _SCHEMA.
Jesli zaskakuje Cie trywialnosc ataku oraz ilosc danych, ktore przy jego pomocy uzyskano to wiedz, ze jest mozliwe o wiele wiecej: Jak na przyklad download plikow z haslami uzytkownikow servera przy pomocy komendy CHAR() i ciagu znakow hex. Oraz, ze jest wielu takich, ktorzy jedza, spia i zyja przed ekranem komputera i mysla tylko o tym jakby tu sie rozerwac.
Rady:
1. Wykonuj czeste "securty updates" lub zmuszaj do tego swojego admina.
2. Jesli jestes wlascicielem sklepu domagaj sie zainstalowania nowej jego wersji.
3. Jesli tworzysz aplikacje internetowa dokonaj validacji przekazywanych argumentow.
4. Jesli jestes adminem zadbaj o odpowiednio niskie uprawnienia twojego uzytkownika.
Na koniec, poniewaz nie mam doktoratu z prawa chce zaznaczyc, ze to co napisalem ma sluzyc tylko i wylacznie celom edukacyjnym. Aby podniesc choc odrobine swiadomosc w dziedzinie bezpieczenstwa systemow informatycznych, ktora IMHO w naszym pieknym kraju dynda na koncu lancucha pokarmowego.
Jesli masz zamiar wykorzystac informacje zawarte w powyzszym artykule w sposob inny niz edukacyjny to pamietaj:
"Miłuj bliźniego swego, jak siebie samego"
W bazie danych sklepu znajda sie z czasem informacje nie tylko na temat produktow oraz ich cen, ale rowniez klientow ktorzy od nas dany towar zakupili. Informacje na temat kilientow przechowywane sa w tabeli "customers". Znajdziemy tam miedzy innymmi takie informacje jak: customers_email_address, customers_first_name, customers_last_name, customers_password.
Nie bylo by w tym nic dziwnego ani ciekawego, bo przeciez wiele jest aplikacji internetowych polaczonych z bazami danych, gdyby nie fakt, ze w pewnych konkretnych okolicznosciach osoba calkowicie do tego nieuprawniona (malicious hacker) moze miec wglad w dane klientow, ich imiona, nazwiska, hasla. Jednym slowem hacking pelna geba i to bez zbytniego wysilania sie.
Okazuje sie, ze pewna wersja wspomnianej aplikacji ma dziure w zabezpieczeniach. Blad polega na tym, ze aplikacja pozwala na takie zmodyfikowanie adresu strony aby ten stal sie rozbudowanym zapytaniem SQL.
Google hacking
Jesli jestes wlascicielem sklepu interenteoewgo to na pewno w tym momencie zjerzyl ci sie wlos na glowie. A jesli nie to powinien, bo gdy twoi klienci zorientuja sie ze udostepniasz ich dane w sieci, to mozesz spodziewac sie problemow. Jesli hakerzy zorientuja sie, ze udostepniasz takie dane w sieci to rowniez mozesz spodziewac sie problemow. A jesli ktoremus przyjdzie do glowy uzyc kart kredytowych twoich klientow to... tak jest: mozesz spodziewac sie problemow!
Zaraz zaraz...
Mialem przeciez pisac na temat hackingu z Google i do tego w polaczeniu z Oscommerce. W sieci jest tysiace sklepow internetowych, wiekszosc z nich jest dobrze zabezpieczona, wiec z pewnoscia mozemy czuc sie bezpiecznie, odetchnac z ulga i isc ogladac dobranocke.
Niestety! Nic z tego! Albowiem jesli jestes hakerem i myslisz jak haker to wiesz jakiego narzedzia nalezy uzyc aby z gaszczu informacji wydobyc tylko te, ktore naprowadza cie na luki w zabezpieczeniach systemow. Okazuje sie, ze poczciwy Google moze byc doskonalym narzedziem hakera.
Przyklad: Otwieramy google.com i wpisujemy: allinurl: customer_testimonials.php
Jako rezultat otrzymujemy liste sklepow internetwoych podatnych na wstrzykniecie SQL. Zadnych tam super hiper odlotowych programow z hakerskiego podziemia tylko Google, ktory jest dostepny, legalny, szybki i niezawodny.
Trzeba tu nadmienic, ze Google zdaje sobie sprawe z faktu, iz ich serwis jest uzywany jako narzedzie do namierzania "dziurawych" stron. Dlatego jako wynik zaptania mozemy otrzymac rowniez calkiem pokazna ilosc stron z zakresu bezpieczenstwa systemow informatycznych, ale jesli dysponujemy wolnym czasem i odrobina uporu oraz jestesmy jednostka zdyscyplinowana i zorientowana na osiagniecie celu to znalezienie tego o co nam chodzi nie jest naprawde zadna sztuka. A kiedy juz to znajdziemy .... ratuj sie kto moze.
Zastrzyk z SQL'a
Przygotowanie zastrzyku - skladniki:
- Wiedza z zakresu jezyka zapytan SQL - poziom: mierny.
- Wiedza z zakreu zarzadzaia serwerem MySQL - poziom: mierny
- Wiedza z zakreu PHP- poziom: nieomal-zerowy
- Wiedza z zakresu funkcjonowania Internetu: Umiec wpisac ciag znakow w pasek adresu przegladarki.
- Wiedza z zakresu kodeksu karnego - poziom: Zaawansowany (wskazany doktorat)
Wstrzykniecie:
Adres twojej strony zwykle wyglada jakos tak:
http://www.stronadozhackowania.pl/
Adres sklepu podatnego na SQL Injection bedzie wygladac mniej wiecej tak :
http://www.stronadozhackowania.pl/customer_testimonials.php?=testimonial_id=99999
Juz spiesze z wyjasnieniem:
Jesli widzisz w adresie swojej strony .php? to to, co nastepuje po znaku zapytania jest najprawdopodobniej zakonczeniem kwerendy SQL, ktorej reszta jest ukryta w zrodle strony.
Zeby zobaczyc kwerende wystarczy zmusic przegladarke do przekazania bledu, ktory wurzuca serwer MySQL gdy otrzyma zle skonstruowana kwerende. Mowiac po ludzku do odresu strony wystarczy dopisac cos kompletnie bez sensu: . / -- #
Efekt:
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
select * FROM customer_testimonials WHERE testimonials_id = 99999
Widzimy wiec, ze testimonials_id = 99999 jest czescia kwerendy SQL, ktora zwykle pozostaje niewidoczna. Jeden dziecinnie prosty trick pozwolil nam zebrac kilka waznych inormacji, ktorych administrator sklepu nie powinien nam udostepniec. Dowiedzielismy sie mianowicie, ze server bazy danych to MySQL, ze w bazie danych istnieje tabela customer_testimonials oraz pole o nazwie testimonials_id.
Teraz dopiero przechodzimy do prawdziwego ataku.
Mysle, ze kazdy kto choc troche zna SQL wie o komendzie UNION. Komenda ta pozwala na sklejenie dwoch zapytan w jedno. To wlasnie UNION umozliwia nam na wstrzykniecie NOWEGO zapytania SQL.
Przyklad:
http://www.stronadozhackowania.pl/customer_testimonials.php=testimonial_id=99999+UNION+SELECT+1,2,customers_id,3,4,5,6,7,8+from+customers
No dobrze, ale skad wiemy, ze powinnismy szukac w tabeli "customers" ? Skad wiemy, ze tabela "customers" w ogole istnieje w naszej bazie danych? Odpwiedz jest jasna dla tych, ktorzy znaja strukture serwera MySQL.
Kazdy serwer MySQL posiada dwie bazy danych, w ktorych przechowywane sa informacje o tabelech, bazach danych, polach i uzytkownikach systemu. Jedna z nich jest INFORMATION_SCHEMA. Gdybysmy mogli "odpytac" INFORMATION_SCHEMA atakowanego serwera dowiedzielibysmy sie jakie bazy danych i jakie tabele wystepuja w danym serwerze.
Przyklad:
+union+select+1,2,table_name,4,5,6,7,8+from+information_schema.tables
Powyzszy przyklad wyrzuca na ekran wszytkie tabele z odpytywanego serwera i otwiera swiat nowych mozliwosci dla wielu mlodych i utalentowanych adeptow sztuki hakerskiej.
Mysle, ze to co napisalem powinno dac do myslenia administratorom serwerow, developmerom oraz tym, ktorzy chca miec (lub juz maja) sklep internetowy za 200 zl. Powyzszy atak byl mozliwy, poniewaz developer nie zadal sobie trudu sprawdzenia, czy kwerenda pochodzaca ze strony ma wlasciwy format i czy nie zawiera zakazanych slow kluczowych takich jak UNION. Administrator nie zadal sobie trudu ograniczenia uprawnien uzytkownika do tylko i wylacznie jednej tabeli, dlatego wlasnie mozliwe bylo wyslanie zapytania do tabeli "customers", jak rowniez do bazy danych INFORMATION _SCHEMA.
Jesli zaskakuje Cie trywialnosc ataku oraz ilosc danych, ktore przy jego pomocy uzyskano to wiedz, ze jest mozliwe o wiele wiecej: Jak na przyklad download plikow z haslami uzytkownikow servera przy pomocy komendy CHAR() i ciagu znakow hex. Oraz, ze jest wielu takich, ktorzy jedza, spia i zyja przed ekranem komputera i mysla tylko o tym jakby tu sie rozerwac.
Rady:
1. Wykonuj czeste "securty updates" lub zmuszaj do tego swojego admina.
2. Jesli jestes wlascicielem sklepu domagaj sie zainstalowania nowej jego wersji.
3. Jesli tworzysz aplikacje internetowa dokonaj validacji przekazywanych argumentow.
4. Jesli jestes adminem zadbaj o odpowiednio niskie uprawnienia twojego uzytkownika.
Na koniec, poniewaz nie mam doktoratu z prawa chce zaznaczyc, ze to co napisalem ma sluzyc tylko i wylacznie celom edukacyjnym. Aby podniesc choc odrobine swiadomosc w dziedzinie bezpieczenstwa systemow informatycznych, ktora IMHO w naszym pieknym kraju dynda na koncu lancucha pokarmowego.
Jesli masz zamiar wykorzystac informacje zawarte w powyzszym artykule w sposob inny niz edukacyjny to pamietaj:
"Miłuj bliźniego swego, jak siebie samego"
