[DreamHack] [Pwnable] basic_exploitation_000

image.png

분석부터 진행하겠다.

image.png

보안없다.

스택에 그냥 쉘코드 올리면 될 것 같다.

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

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

    char buf[0x80];

    initialize();
    
    printf("buf = (%p)\\n", buf);
    scanf("%141s", buf);

    return 0;
}

nm, string 결과상 read_flagcat flag, /bin/sh등 직접 호출/문자열이 전혀 없다.

또한 system() 도 PLT에 없기 때문에, ret2plt(system)도 불가능하다.

libc 주소 누출 경로도 없기 때문에, ret2libc도 불가능하다.

따라서 단순 쉘코드 업로드가 제일 좋을 것 같다. 그러라고 buf 시작 주소도 알려주는 것 같다.

image.png

메인 함수 확인해보면, buf 128가 정직하게 선언된다.

[ 낮은 주소 → 높은 주소 ]

buf[128]           ← 로컬 버퍼 (0x80 바이트)
saved EBP (SFP)    ← 함수 진입 시 push ebp 한 값
saved EIP (RET)    ← 함수 리턴 시 복귀할 주소

예상으로는 이런식으로 선언되있다고 보면 될 것 같다.

한번 cyclic을 이용해 계산해보겠다.

image.png