W tym poście chciałbym opisać rozwiązanie zadania Bbbbloat z działu Reverse Engineering picoCTF.
Do zadania dołączono plik wykonywalny bbbbloat. Po jego uruchomieniu wyświetla się pytanie:
- What's my favorite number? 1
- Sorry, that's not it!
Plik został skompilowany jako:
- $ file ./bbbbloat
- ./bbbbloat: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=db1dc86836c3e0e4140eb30914db4af5bce7cb18, for GNU/Linux 3.2.0, stripped
W celu uruchomienia tego programu pod Windowsem można użyć np. WSL, bądź VirtualBoxa z linuxem.
Można też użyć terminala dostępnego w picoCTF. Należy pamieć, żeby po pobraniu pliku ustawić mu odpowiednie uprawnienia.
- wget <link do pliku>
- chmod +x bbbbloat
Program pyta o ulubiony numer. Metodą zgadywania raczej nic tutaj nie osiągnę, trzeba uruchomić jakiś program do decompilacji i sprawdzić co uda się otrzymać w taki sposób. Można użyć narzędzia online. Gdzie należy wyszukać ciągów jakie się wyświetlają podczas uruchamiania programów:
Można też użyć np. programu Cutter
Tutaj jest to nie co mniej widoczne, ale też da się odnaleźć.
Jak widać na powyższych przykładach porównanie następuje z liczbą 0x86187 (549255). Więc można założyć, że jeśli warunek zostanie spełniony to nastąpi przejście do dalszej części programu, bądź nawet wyświetlenie flagi.
Teraz po wprowadzeniu tej liczby w terminalu otrzymuje:
- ./bbbbloat
- What's my favorite number? 549255
- picoCTF{<tu_flaga>}