Capture the Flag

Capture the Flag

by invalid

Ini adalah writeup singkat dari soal kategori Hide and Seek pada Beginner Malware Reversing Challenges yang terdapat pada situs MalwareTech. Kategori soal ini sangat mudah untuk dikerjakan dan cocok untuk pemula.

MalwareTech ReverseMe: String1


Soal yang diberikan adalah sebuah file executable. Pertama, kita periksa tipe filenya:

% file strings1.exe_
strings1.exe_: PE32 executable (GUI) Intel 80386, for MS Windows

Jalankan file tersebut menggunakan wine, maka akan muncul pesan berupa MD5 hash 4c827c4ca62781d707cd049da13539ee. Itu adalah hash dari flag yang valid. Sekarang kita akan melihat string yang ada pada executable tersebut:

% strings strings1.exe_
!This program cannot be run in DOS mode.
Rich
.text
`.rdata
@.data
.CRT
@.rsrc
@.reloc
...
FLAG{THE-DEPICTED-THE-IMPORTANT-THE}
FLAG{INCLUDES-COLLECTIVE-AND-SOCIALIST-INQUIRY}
FLAG{LAW-IDEOLOGICAL-INTO-THE-THE}
FLAG{COMPETENCE-ISSUE-PERSONAL-THE-LAW}
FLAG{MATTERS-POLITICAL-DETERMINATION-ITS-SOCIALIST}
FLAG{BODIES-PROMOTE-NATIONWIDE-COLLECTIVE-SOVIET}
...

Ternyata ada banyak sekali string yang berupa flag. Kita akan mencari flag yang valid dengan menggunakan perintah seperti ini:

% for f in $(strings strings1.exe_ | grep 'FLAG'); do echo -n $f | md5sum | cut -d' ' -f1 | grep '4c827c4ca62781d707cd049da13539ee' && echo $f; done

Hasil dari perintah di atas adalah:

4c827c4ca62781d707cd049da13539ee
FLAG{CAN-I-MAKE-IT-ANYMORE-OBVIOUS}

Jadi flag yang benar adalah: FLAG{CAN-I-MAKE-IT-ANYMORE-OBVIOUS}

MalwareTech ReverseMe: String2


Soal yang diberikan adalah sebuah file executable. Pertama, kita periksa tipe filenya:

% file strings2.exe_
strings2.exe_: PE32 executable (GUI) Intel 80386, for MS Windows

Jalankan file tersebut menggunakan wine, maka akan muncul pesan berupa MD5 hash e41509c99d1462fa384ee99f350593fc. Itu adalah MD5 hash dari flag yang benar. Selanjutnya kita periksa string yang ada pada executable tersebut:

% strings strings2.exe_
!This program cannot be run in DOS mode.
Rich
...
We've been compromised!
%02x
ExitProcess
KERNEL32.dll
memset
memcpy
sprintf
ntdll.dll
MessageBoxA
USER32.dll
plaintext2.exe
...
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>PAPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPAD
2X3d3l3z3

Tampaknya flagnya tidak menggunakan encoding yang normal. Coba kita periksa string yang berupa karakter 8 bit pada file tersebut:

% strings -eS strings2.exe_
...
]U(EFELEAEGE{ESETEAECEKE-ESETEREIENEGESE-EAEREEE-EBEEESETE-ESETEREIENEGESE}EPA
...

Bisa terlihat, bahwa output dari perintah strings tersebut cukup mencurigakan. Coba kita hilangkan semua karakter E dari string tersebut.

% echo 'EFELEAEGE{ESETEAECEKE-ESETEREIENEGESE-EAEREEE-EBEEESETE-ESETEREIENEGESE}' | tr -d 'E'
FLAG{STACK-STRINGS-AR-BST-STRINGS}

Ada beberapa huruf E yang ikut hilang dari perintah tersebut. Flag yang benar adalah FLAG{STACK-STRINGS-ARE-BEST-STRINGS}

MalwareTech ReverseMe: String3


Sama seperti pada soal sebelumnya, file yang diberikan adalah windows executable:

% file strings3.exe_
strings3.exe_: PE32 executable (GUI) Intel 80386, for MS Windows

Jika executable tersebut dijalankan, maka akan muncul pesan yang berisi MD5 hash 1011cafbd736cdf2ae90964613c911fe yang merupakan MD5 hash dari flag yang valid. Sama seperti soal sebelumnya, kali ini encoding yang digunakan bukan 7bit ASCII, melainkan 16bit. Gunakan perintah strings dengan opsi -el seperti ini:

% strings -el strings3.exe_
2FLAG{WHATSOEVER-PRODUCT-INCIDENTAL-APPLICABLE-NOT}'FLAG{COPY-YOU-PROVISION-DISCLAIMER-ARE}&FLAG{THE-LICENSED-WITHIN-SERVICES-LAW}
...
)FLAG{RESOURCES-SHARING-INCURRED-LACK-THE}$FLAG{MICROSOFT-LICENSE-THIS-THE-ANY}

Ternyata ada banyak sekali string berupa flag. Kumpulan string tersebut mempunyai pola yang sama, yaitu ada 1 karakter diantara } dan F pada kata FLAG. Kita akan menggunakan perintah berikut ini untuk mencari flag yang benar:

% for f in $(strings -el strings3.exe_ | grep -oP 'FLAG{(.*?)}'); do echo -n $f | md5sum | cut -d' ' -f 1 | grep '1011cafbd736cdf2ae90964613c911fe' && echo $f ; done

Hasil dari perintah di atas adalah:

1011cafbd736cdf2ae90964613c911fe
FLAG{RESOURCES-ARE-POPULAR-FOR-MALWARE}

Jadi flag yang valid adalah FLAG{RESOURCES-ARE-POPULAR-FOR-MALWARE}.

Penutup


Sekian tutorial singkat kali ini, semoga bermanfaat. Terima kasih kepada Tuhan Yang Maha Esa, dan Anda yang telah membaca tutorial ini.

bagus mas tutorialnya, sangat bermanfaat :sip, tapi kalau yang lagi belajar gak pake UNIX gak bisa mengikuti ini

Nanti saya buatin versi windowsnya om. :D

mantap mas !

Baru sempat nulis. [Writeup] MalwareTech: Hide and Seek (Windows Version)