촉촉한초코칩

[Dreamhack] addition-quiz 본문

Study/MISC

[Dreamhack] addition-quiz

햄친구베이컨 2024. 9. 11. 12:15

 

코드 

// Name: chall.c
// Compile Option: gcc chall.c -o chall -fno-stack-protector

#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <time.h>

#define FLAG_SIZE 0x45

void alarm_handler() {
    puts("TIME OUT");
    exit(1);
}

void initialize() {
    setvbuf(stdin, NULL, _IONBF, 0);
    setvbuf(stdout, NULL, _IONBF, 0);

    signal(SIGALRM, alarm_handler);
}

int main(void) {
    int fd;
    char *flag;

    initialize();
    srand(time(NULL)); 

    flag = (char *)malloc(FLAG_SIZE);
    fd = open("./flag", O_RDONLY);
    read(fd, flag, FLAG_SIZE);
    close(fd);

    int num1 = 0;
    int num2 = 0;
    int inpt = 0; 

    for (int i = 0; i < 50; i++){
        alarm(1);
        num1 = rand() % 10000;
        num2 = rand() % 10000;
        printf("%d+%d=?\n", num1, num2);
        scanf("%d", &inpt);

        if(inpt != num1 + num2){
            printf("Wrong...\n");
            return 0;
        }
    } 
    
    puts("Nice!");
    puts(flag);

    return 0;
}

 

i는 0부터 49까지 증가되고 num1와 num2는 랜덤으로 생성된다. 이 두 값을 더하고, 만약 입력한 값이 더한 값과 같아야 flag가 출력된다. 

 

공격

314번에서 두 값을 비교하고 틀리면 340으로, 맞으면 flag가 출력된다. 

여기에 break를 걸고 실행해본다.

cmp에 오면 edx에 두 값을 합한 값이 들어있다. 이 값에 맞게 eax의 값을 바꿔준다. 

그리고 여기서 rbp-4와 49를 비교한다. 

이때 rbp의 값은 0x7fffffffde40이며 4를 빼면 7FFF FFFF DE3C이 나온다. 
이 값이 0x31과 같아야 하므로 dword ptr의 값은 0x00000031이 되어야 한다. 

그래서 값을 넣었는데 n을 눌러도 여기서 멈춰서 진행이 안된다.. → backtrace 

그러면 이렇게 50을 계속 반복해야 하는건가..? 검색해보았다. 

 

코드

파이썬 코드를 작성해서 하더라,,ㅎㅎ

from pwn import *

host = remote('host(num).dreamhack.games', (port))

for i in range(50):
    equation = host.recvline(1024)
    num = str(equation).split("'")[1][0:-4].split("+")
    host.sendline(str(int(num[0]) + int(num[1])))

print(host.recv(1024))

출처: https://hyungin0505.tistory.com/77 [간디의 세상:티스토리]

50번을 반복해서 두 숫자를 가져오고 정답을 보낸다. 

 

일단 성공.. 

'Study > MISC' 카테고리의 다른 글

[Dreamhack] Robot Only  (1) 2024.09.17
[Dreamhack] Snowing!  (0) 2024.09.17
[Dreamhack] littlevsbig  (0) 2024.09.04
[Dreamhack] broken-png  (0) 2024.09.04
[Dreamhack] **Exercise: Docker  (0) 2024.08.20