Wargame/HackerSchool FTZ
-
lvl 16Wargame/HackerSchool FTZ 2019. 1. 24. 17:44
→ 힌트 정보를 확인한다. → 함수포인터다. → 우리가 원하는 것은 shell 함수를 실행하는 것이지만, 실제 메인 함수에선 shell 함수가 아닌 printit 함수만 실행한다. 하지만 void (*call)=printit; 부분의 call 함수 포인터가 가리키는 함수의 주소를 shell() 함수의 주소로 변경한다면 shell 함수를 실행할 수 있다. → gdb로 디버깅한다. [level16@ftz level16]$ gdb -q attackme(gdb)(gdb)(gdb) set disassembly-flavor intel(gdb) disas mainDump of assembler code for function main:0x08048518 : push ebp0x08048519 : mov ebp,esp0..
-
lvl 15Wargame/HackerSchool FTZ 2019. 1. 23. 09:34
→ 힌트 정보 확인. → 14번 문제와 동일한 것 같지만, 분기문에서 check가 포인터임을 알 수 있다. → 즉, check 변수에 0xdeadbeef를 입력하는게 아니고, check 변수에 저장하는 값이 가리키는 메모리 주소에 0xdeadbeef를 넣어야 한다. → gdb로 디버깅. [level15@ftz tmp]$ gdb -q attackme(gdb) set disassembly-flavor intel(gdb) disas mainDump of assembler code for function main:0x080483b8 : push ebp0x080483b9 : mov ebp,esp0x080483bb : sub esp,0x380x080483be : and esp,0xfffffff00x080483c1 ..
-
lvl 14Wargame/HackerSchool FTZ 2019. 1. 22. 09:37
→ 힌트 정보 열람. → 버퍼오버플로우 문제로 추측되며, check 변수의 값에 0xdeadbeef 값을 덮어쓰는것을 목표로 한다. 메모리 맵을 그리기 위해, gdb를 이용하여 디버깅한다. [level14@ftz tmp]$ gdb -q abc(gdb) set disassembly-flavor intel(gdb) disas mainDump of assembler code for function main:0x080483b8 : push ebp0x080483b9 : mov ebp,esp0x080483bb : sub esp,0x380x080483be : and esp,0xfffffff00x080483c1 : mov eax,0x00x080483c6 : sub esp,eax0x080483c8 : sub esp,0x..
-
lvl 13Wargame/HackerSchool FTZ 2019. 1. 17. 19:22
→ 힌트 정보 열람. → BOF 문제로 추측된다. 아래에 위치하는 분기문에서 해당 문제의 의도를 알 수 있다. if(i!=0x1234567) → 즉, i = 1234567을 유지한채로 버퍼오버플로우 페이로드를 구성해야 한다. 이를 위해선, 변수 i의 위치를 정확히 파악해야 한다. 먼저 gdb로 디버깅한다. [level13@ftz tmp]$ gdb -q attackme(gdb) set disassembly-flavor intel(gdb) disas mainDump of assembler code for function main:0x080483c8 : push ebp0x080483c9 : mov ebp,esp0x080483cb : sub esp,0x4180x080483d1 : and esp,0xfffffff..