본문 바로가기

해커스쿨 LOB ( cobolt -> goblin ) by ORANG LOB_cobolt [cobolt@localhost cobolt]$ bash2[cobolt@localhost cobolt]$ cat goblin.c/* The Lord of the BOF : The Fellowship of the BOF - goblin - small buffer + stdin*/ int main(){ char buffer[16]; gets(buffer); printf("%s\n", buffer);} bash2 띄우고~ 소스를 보겠습니다! 힌트는 small buffer + stdin 입니다.이전 문제와 크게 다른것 같지 않군요, 이전 문제는 인자를 넘겨받아 strcpy로 buffer에 저장했다면이번엔 gets함수로 바로 buffer에 저장하네요ㅎㅎ역시 환경변수를 이용하거나, 음.. 어떤 .. 더보기
해커스쿨 LOB ( gremlin -> cobolt ) by ORANG ​LOB_gremlin [gremlin@localhost gremlin]$ bash2[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);} bash2 띄워주고~ 소스를 보겠습니다!! 힌트는 small buffer 군요buffer의 사이즈가 16밖에 안되네요ㅠㅠ음.. 환경변수를 이용한 방법.. 더보기
해커스쿨 LOB ( gate -> gremlin ) by ORANG LOB_gate 이번엔 LOB 문제풀이를 하겠습니다ㅎㅎ해커스쿨 FTZ보다 난이도 있는 BOF 문제들로 이루어진 것 같네요열심히 풀어봅시다!! [gate@localhost gate]$ bash2[gate@localhost gate]$ cat gremlin.c/* The Lord of the BOF : The Fellowship of the BOF - gremlin - simple BOF*/ int main(int argc, char *argv[]){ char buffer[256]; if(argc < 2){ printf("argv error\n"); exit(0); } strcpy(buffer, argv[1]); printf("%s\n", buffer);}[gate@localhost gate]$ ls -l .. 더보기
해커스쿨 FTZ 문제풀이 최종본 pdf by ORANG 몇일간 틈틈이 작성한건데.. 다 쓰고나니 뿌듯하네요ㅎㅎ이제와서 생각해보니 설명이 부족했던 부분이 많았던 것 같기도 하네요ㅠㅠ제가 생각하는 것들을 그대로 글로 표현한다는게 생각보다 너무 어려운 것 같습니다...읽다가 궁금한 부분이나, 잘못 설명된 부분 발견하신 분은 댓글 달아주시면 감사하겠습니다!!다른 공부와 같이 하느라.. LOB 문제풀이는 틈틈이 시간날 때마다 작성하겠습니다!! 모두들 열공하시길ㅎㅎ!! 더보기
해커스쿨 FTZ ( level20 -> clear ) + 포맷스트링버그의 이해 by ORANG FTZ_level20 마지막 문제네요ㅎㅎ level20은 포맷스트링 문제입니다지금까지 풀어온 BOF와는 다른 방법을 이용해야하죠먼저 포맷스트링버그( FSB : Format String Bug )에 대한 개념부터 가볍게 잡겠습니다. 음.. 포맷스트링은 c언어 printf 에서 사용하는 %d, %x, %f 같은 문자 입니다. %c 단일 문자 %d 부호 있는 10진 정수 %i 부호 있는 10진 정수, %d 와 같음 %f 부호 있는 10진 실수 %s 문자열 %o 부호 없는 8진수 %u 부호 없는 10진수 %x 부호 없는 16진수 %e 부동 소수점 표기, e 사용 %n 쓰인 총 바이트 수 등이 있죠ㅎㅎ여기서 FSB에 가장 중요한 포맷스트링은 %x와 %n입니다%x는 부호없는 16진수 출력이죠 -> 16진수 출력이라.. 더보기
해커스쿨 FTZ ( level19 -> level20 ) by ORANG FTZ_level19 [level19@ftz level19]$ bash2[level19@ftz level19]$ cat hint main(){ char buf[20]; gets(buf); printf("%s\n",buf);} bash2 띄우고~ hint를 보겠습니다.level18 문제 보다가 이걸 보니 참 좋네요ㅋㅋㅋ너무 간단한 BOF문제네요 자세히 보면 setreuid 함수가 없는게 약간의 문제인 것 같네요하지만 권한을 살펴보면 당연히 setuid가 걸려있습니다 [level19@ftz level19]$ ls -l attackme-rwsr-x--- 1 level20 level19 13615 3월 8 2003 attackme 이럴땐 간단하게, setuid + bash셸을 실행하는 셸코드를 작성하면 됩니다... 더보기
해커스쿨 FTZ ( level18 -> level19 ) by ORANG FTZ_level18 [level18@ftz level18]$ bash2[level18@ftz level18]$ cat hint #include #include #include #include void shellout(void);int main(){ char string[100]; int check; int x = 0; int count = 0; fd_set fds; printf("Enter your command: "); fflush(stdout); while(1) { if(count >= 100) printf("what are you trying to do?\n"); if(check == 0xdeadbeef) shellout(); else { FD_ZERO(&fds); FD_SET(STDIN_FILE.. 더보기
해커스쿨 FTZ ( level17 -> level18 ) by ORANG FTZ_level17 [level17@ftz level17]$ bash2[level17@ftz level17]$ cat hint #include void printit() { printf("Hello there!\n");} main(){ int crap; void (*call)()=printit; char buf[20]; fgets(buf,48,stdin); setreuid(3098,3098); call();} bash2 띄우고~~ 힌트를 보니 level16문제에서 shell 함수가 사라진 것 같네요ㅎㅎbuf에 셸코드를 집어넣고, printit 함수의 호출 부분( call(); )을 buf의 주소로 바꿔주면 될 것 같습니다. gdb로 분석하고 메모리 구조를 그려보겠습니다~ (gdb) disas mainD.. 더보기
해커스쿨 FTZ ( level16 -> level17 ) by ORANG FTZ_level16 [level16@ftz level16]$ bash2[level16@ftz level16]$ cat hint #include void shell() { setreuid(3097,3097); system("/bin/sh");} void printit() { printf("Hello there!\n");} main(){ int crap; void (*call)()=printit; char buf[20]; fgets(buf,48,stdin); call();} bash2 띄우고~ 힌트를 확인해보겠습니다!printit함수의 호출부분( call(); )이 있으니 그 부분에서 shell 함수를 호출하도록 바꿔주겠습니다. gdb를 이용해 분석해보겠습니다. (gdb) disas mainDump of .. 더보기
해커스쿨 FTZ ( level15 -> level16 ) by ORANG FTZ_level15 [level15@ftz level15]$ bash2[level15@ftz level15]$ cat hint #include main(){ int crap; int *check; char buf[20]; fgets(buf,45,stdin); if (*check==0xdeadbeef) { setreuid(3096,3096); system("/bin/sh"); }} 이번에도 bash2를 띄우고!! 힌트를 보겠습니다level14와 아주 비슷하지만 check 가 포인터로 되어있네요ㅎㅎ0xdeadbeef를 넣어주고, 그 주소를 가리키도록 바꾸어 공격해보겠습니다. 메모리 구조를 그리는 과정은 level14와 같으므로 생략하겠습니다.buf 의 시작 주소가 필요하겠네요ㅎㅎ 찾아보겠습니다. RET [.. 더보기