반응형
[pwnable.kr] Rookiss – fsb
문제는 32bit 바이너리입니다.
코드를 보면, key에 8자리 숫자를 가져옵니다. 그리고 alloca라는 함수를 사용해서 스택에 공간을 할당하고 fsb라는 함수를 호출합니다.
fsb 함수는 이렇게 생겼는데요, 4번 fsb를 터트릴 수 있고, key를 입력하고 맞추면 쉘을 실행할 수 있습니다.
fsb를 이용해서 key를 가져올 수 있을까요? 일단 한 번 디버깅 해보겠습니다.
alloca 함수 때문에 fsb로 main 함수의 스택 공간까지 접근하기는 힘들 것 같습니다.
fsb가 터지는 곳에 bp를 걸고 메모리를 보겠습니다.
스택에 보면 빨간 동그라미 값을 이용해서 화살표 메모리의 값을 변경할 수 있고, 그 변경한 값에 다시 접근해서 원하는 값으로 변경할 수 있습니다.
그냥 printf 함수의 got의 값을 fsb를 이용해서 쉘을 실행하는 부분으로 바꿔주면 되겠네요.
printf 함수의 got는 0x804a004입니다.
어셈으로 보면 쉘을 실행시키는 부분이 *fsb+363이네요.
printf의 got인 0x804a004를 메모리에 쓰고 접근한 후 0x804869f를 써줍시다.
어짜피 fsb는 4번이나 발생하기 때문에 편안하게 해주면 됩니다.
esp부터의 offset을 구해봅시다.
14와 20입니다.
%134520836c%14$n
%134514335c%20$n
을 입력해주면 쉘이 실행되겠네요.
반응형
'System&Write up > Pwnable.kr' 카테고리의 다른 글
[pwnable.kr] Rookiss - echo1 (0) | 2018.04.01 |
---|---|
[pwnable.kr] Toddler's Bottle - unlink (0) | 2018.03.31 |
[pwnable.kr] Toddler's Bottle - memcpy (0) | 2018.02.27 |
[pwnable.kr] Toddler's Bottle - asm (0) | 2018.01.31 |
[pwnable.kr] Toddler's Bottle - uaf (0) | 2018.01.31 |