/*
        The Lord of the BOF : The Fellowship of the BOF
        - darkknight
        - FPO
*/

#include <stdio.h>
#include <stdlib.h>

void problem_child(char *src)
{
        char buffer[40];
        strncpy(buffer, src, 41);
        printf("%s\n", buffer);
}

main(int argc, char *argv[])
{
        if(argc<2){
                printf("argv error\n");
                exit(0);
        }

        problem_child(argv[1]);
}

 

 

이 문제는 FPO라는 기법을 알아야하는데, 난 아직 설명을 할 만큼 제대로 알지 못하기에 다른 블로그 글을 첨부한다.

https://dokhakdubini.tistory.com/228

 

[Stack] Frame Pointer Overflow, FPO에 대하여

오늘은 FPO, Frame Pointer Overflow에 대해서 알아볼 것입니다. SFP Overflow라고도 불립니다. FPO에 대한 풀이 글들을 보면 계속 leave가 ebp+4에 접근할 수 있다, sfp를 조작했으니 ebp를 조작할 수 있다이런..

dokhakdubini.tistory.com

한번에 이해하더라도 나중에 다시 보면서 곱씹어야할듯

 

일단 단순하게 말하면, 1바이트가 넘치니깐 그걸 buffer시작주소-4의 마지막 바이트를 넣어주면 된다.

왜 그렇냐? 위에 첨부한 글을 한 3번 정독하면 이해가 될 수도 있다.(난 이해했다 싶어도 다음날 다시보면 아리쏭하더라)

 

스택이 어떻게 쌓이는지는 아니깐, problem_child에 leave부분에 중단점 설정하고 코드를 넣어보면, 

buffer의 시작주소는 bffff9e4이다.

밑에 x/12x $esp-8 부분을 보면, 마지막 바이트가 \x00 인것만 확인하면 끝

이 아니라 argv[2]부분의 주소도 알아내야한다. (그래야 거기로 보내지)

nop슬라이드를 태워서 보냈으니깐, 90부분 아무거나 잡자(쉘코드 앞쪽)

'pwnable > LOB' 카테고리의 다른 글

LOB 15번  (0) 2020.08.02
LOB 14번  (0) 2020.08.01
LOB 11번  (0) 2020.07.26
LOB 10번  (0) 2020.07.26
LOB 9번  (0) 2020.07.25

+ Recent posts