전체 글 22

[DreamHack] oob1

idx의 범위 제한 로직이 없기 때문에 해당 idx에 큰값을 주어서 name쪽으로 넘어가면 될것이라 생각 일단 처음에 가장 중요한 name, command의 시작주소를 알아보자 name 시작주소: 0x804a0ac command 시작주소: 0x804a060 scanf에서 eax를 입력받는걸 알 수 있음 eax*4 + 0x804a060 → 즉 eax는 idx값이고, 현재 32비트이기 때문에 4바이트씩 증가 되면서 인덱스를 맞추는 것으로 볼 수 있음 그러면 name의 주소에서 command의 주소를 빼면 거리차이가 있을 거고 4바이트로 나누게 되면 idx를 추측할 수 있음 거리차이: 0x4C → 10진수: 76 76/4 = 19 즉 command의 19번째가 name의 시작임 익스플로잇 짜는 과정에서 nam..

[DreamHack] SSP01

BOF가 터지는 부분에 대해서 조금씩 보다가 print_box 함수를 통해 canary값을 가져올 수 있을것이라 판단했다. 또한, box, name, select 버퍼가 있기 때문에 마지막 case 'E' 선택 후 name 버퍼를 채워주어서 ret를 변조해 get_shell()을 불러오면 될거라 생각했다. gdb를 사용해 canary 위치를 확인해보니 [ebp-0x08] 인것을 확인할 수 있다. 그러면 box 시작부분부터 canary가 얼마나 떨어져 있는지 확인해서 idx를 통해 한바이트씩 출력시켜서 canary 값을 확인할 수 있다. lea eax, [ebp-0x88]을 통해서 box의 시작부분이 ebp-0x88부터 인것을 알 수 있음 buf 시작주소: 0xffffcf80 canary 시작주소: 0xf..