Wargame
-
lvl 03 cobolt -> goblinWargame/HackerSchool The Load of the BOF Redhat 2019. 1. 22. 09:41
→ 소스코드는 아래와 같다. 1 /* 2 The Lord of the BOF : The Fellowship of the BOF 3 - goblin 4 - small buffer + stdin 5 */ 6 7 int main() 8 { 9 char buffer[16]; 10 gets(buffer); 11 printf("%s\n", buffer); 12 } → 어셈블리 코드는 아래와 같다. 0x80483f8 0x80483f9 0x80483fb 0x80483fe 0x8048401 0x8048402 0x8048407 0x804840a 0x804840d 0x804840e 0x8048413 0x8048418 0x804841b 0x804841c push %ebp mov %ebp,%esp sub %esp,16 lea ..
-
[Toddler's Bottle] bofWargame/pwnable.kr Challenge 2019. 1. 22. 09:39
→ 문제는 아래와 같다. → 바이너리와 소스파일을 다운로드한 후, 분석 환경(ubuntu)에 업로드하여 확인한다. → 코드를 살펴보면, func 함수의 인자 값은 0xdeadbeef 인데 gets 함수를 통해 사용자 입력 값을 받는다. 이를 통해, 0xdeadbeef 값을 0xcafebabe 값으로 변경하여 쉘을 획득하는 버퍼오버플로우 문제임을 알 수 있다. → gdb 디버깅을 통해 func 함수를 디스어셈블하여 스택 구조를 파악한다. (gdb) disas funcDump of assembler code for function func: 0x0000062c : push ebp 0x0000062d : mov ebp,esp 0x0000062f : sub esp,0x48 0x00000632 : mov eax,..
-
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..