2017/01/11 - [Study :)/FTZ] - [해커스쿨] FTZ level13 풀이과정
보자보자!! 힌트를 보자!!!
int 변수를 2개 선언하고, 20byte 배열 하나 선언하고 ... 그런데 45byte만큼 buf로 fgets 하네...
check라는 변수에 0xdeadbeef가 들어있나 확인하네.. 정확하게 gdb로 파헤쳐보자.
보아하니.. 0x38(56byte)만큼 공간 할당하고, [ebp-56]에 fgets로 받은 문자열을 저장하고,
[ebp-16]에 0xdeadbeef가 있구먼...
fgets함수 바로 다음인 <main+36>에 BP걸고 대충 아무 값인 "AAAAAAAA"을 넣고 실행해보니..
일단 입력 받은 문자열이 들어가는 주소는 "0xbffff210"이네... 그런데 "0xdeadbeef"값이 안보인다.
우리가 추측했던 [ebp-16]을 보자, "0xdeadbeef"값은 없다. 없으면 넣어버리지 뭐?
정리해보자!!
56byte만큼 변수공간을 할당받고,
문자열이 들어가는 주소는 [ebp-56] "0xbffff210"이고,
[ebp-16]의 주소는 "0xbffff238"
[ebp-56]부터 [ebp-16]까지는 40byte이다.
[ebp-16]에 "0xdeadbeef"의 값이있어야 되는데, 쓸데없는 값이 들어있으므로,
[ebp-16]에 "0xdeadbeef"를 넣어주면 될것같은데? 정리 끝!
(python -c 'print "A"*40+"0xef\xbe\ad\de"' ; cat) | ./attackme