일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- RITSEC CTF 2019
- webhacking
- RITSEC
- 어셈블리어
- buffer over flow
- ftz
- Python
- 웹해킹
- 보안뉴스
- Next.js
- 리눅스
- 리버싱
- requests
- SQL Injection
- Hackerschool
- 뉴스클리핑
- termux
- Nop Slide
- CodeEngn
- HackCTF
- BOF
- Linux
- ctf
- Shadow 동아리
- reversing
- x64dbg
- 버퍼오버플로우
- NewsClipping
- PWN
- writeup
- Today
- Total
목록버퍼오버플로우 (10)
Jaeseo's Information Security Story
FTZ - level20 - WriteUp level20:we are just regular guys 일단 hint 파일을 봅니다. [level20@ftz tmp]$ cat ../hint #include main(int argc,char **argv) { char bleh[80]; setreuid(3101,3101); fgets(bleh,79,stdin); //입력값을 bleh에 받지만 최대 79까지만 받아서 BOF가 불가능 printf(bleh); //하지만 printf의 포맷스트링 취약점을 통한 공격이 가능하다. } 일단 이문제를 풀기전에 알아야 하는 정보가 있습니다. ctors, dtors 영역 이 위의 두가지 영역의 특징아래와 같습니다. .ctors (constructor) 은 main() 전에 ..
FTZ - level19 - WriteUp level19:swimming in pink 일단 hint를 봅니다. [level19@ftz level19]$ cat hint main() { char buf[20]; gets(buf); printf("%s\n",buf); } 문제를 보니 ret 부분에 shell코드의 주소를 덮은 다음 리턴을 시켜 shell를 실행 시키면 되는 문제로 보입니다. (gdb) set disassembly-flavor intel (gdb) disassemble main Dump of assembler code for function main: 0x08048440 : push ebp 0x08048441 : mov ebp,esp 0x08048443 : sub esp,0x28 0x0804..
FTZ - level18 - WriteUp level18:why did you do it 일단 hint를 확인 합니다. [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; //string변수 인덱스 변수 fd_set fds; printf("Enter your command: "); fflush(stdout); while(1) { if(count >= 100) //count가 100이상이면 if 걸려서 더이상 공격 불가 printf("what are you ..
FTZ - level17 - WriteUp level17:king poetic 일단 hint 파일을 확인합니다. [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(); } 이번에는 printit의 주소만 가져오고 printit 함수만 존재하는 것을 볼 수 있다. 일단 주소를 불러 온다는 점에서 shellcode를 이용하여 공격을 하면 될것 같다. (gdb) set disassembly-flavor intel (gdb) ..
FTZ - level16 - WriteUp level16:about to cause mass 일단 hint를 봅니다. [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(); } 소스를 보면 call에 printit의 주소를 가져온다음 입력을 받고 call를 부르는 것을 볼 수 있는데 이때 printit의 주소를 shell의 주소로 덮어 쓰면 되는 문제 같다..
FTZ - level15 - WriteUp level15:guess what 일단 hint파일을 봅니다. [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"); } } [level15@ftz level15]$ level14의 문제와 거의 유사하지만 이번에는 check가 포인터로 해서 참조를 하는 모습을 볼 수 있습니다. (gdb) set disassembly-flavor intel (gdb) disassemble main Dump of assembler ..
FTZ - level14 - WriteUp level14:what that nigga want? 일단 hint 파일을 봅니다. 레벨14 이후로는 mainsource의 문제를 그대로 가져왔습니다. 버퍼 오버플로우, 포맷스트링을 학습하는데는 이 문제들이 최고의 효과를 가져다줍니다. #include #include main() { int crap; int check; char buf[20]; fgets(buf,45,stdin); if (check==0xdeadbeef) { setreuid(3095,3095); system("/bin/sh"); } } tmp에 소스코드를 이용하여 디버깅용 프로그램을 만듭니다. (gdb) set disassembly-flavor intel (gdb) disassemble main..
FTZ - level13 - WriteUp level13:have no clue 일단 HINT를 보고 시작합니다! [level13@ftz level13]$ cat hint #include main(int argc, char *argv[]) { long i=0x1234567; char buf[1024]; setreuid( 3094, 3094 ); if(argc > 1) strcpy(buf,argv[1]); if(i != 0x1234567) { printf(" Warnning: Buffer Overflow !!! \n"); kill(0,11); } } 이번에는 기존의 level11, level12 문제와 달리 중간에 있는 i의 데이터가 수정이 되면 경고가 뜨고 프로그램이 강제로 종료 되는 조건문이 추가 되어..