/*
        The Lord of the BOF : The Fellowship of the BOF
        - assassin
        - no stack, no RTL
*/

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

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

        if(argc < 2){
                printf("argv error\n");
                exit(0);
        }

        if(argv[1][47] == '\xbf')
        {
                printf("stack retbayed you!\n");
                exit(0);
        }

        if(argv[1][47] == '\x40')
        {
                printf("library retbayed you, too!!\n");
                exit(0);
        }

        strcpy(buffer, argv[1]);
        printf("%s\n", buffer);

        // buffer+sfp hunter
        memset(buffer, 0, 44);
}


이 문제는 RET sled로 문제를 풀었다. 

RET Sled란 ASCII Armor가 적용된 프로그램을 뚫을때 이용하는 기법인데

return address가 있어야하는 주소에 RET 가젯을 넣는다. 

RET가젯이란 아래 보이는 것처럼 프로그램의 RET의 주소를 return address에 넣는 것을 말한다.


많이 넣으면 RET가젯을 넣은 만큼 esp+4가 계속 되어 esp를 원하는 주소까지 올릴 수 있다.

ret에서 RET가젯을 실행하고 나면 esp가 ret+4가 되는데 이를 이용해 문제를 풀면 된다.


ret sled를 이용해 rtl도 가능하다.


ret에 RET가젯을 넣고 system()[4] + dummy or exit()[4] + /bin/sh[4] 를 하면 끝


'Wargame > lord of bufferoverflow' 카테고리의 다른 글

Lord of bufferoverflow zombie_assassin  (0) 2017.09.07
Lord of bufferoverflow assassin  (0) 2017.08.26
Lord of bufferoverflow bugbear  (0) 2017.08.22
Lord of bufferoverflow darkknight  (0) 2017.08.22
Lord of bufferoverflow golem  (0) 2017.08.21

+ Recent posts