[FTZ]level15
시간이 늦었고
오늘은 태풍도 스쳐지나갔고
달은 떴고 잠은 자야하지만!!
이대로 자버리면
꿈에서 아쉬워할 나?를 위해
level15까지만
해결하고 자려고 합니다.
시작해 볼까요?
엇!!!!
이거 level14에서 본거 아닌가요?
눈을 뜨고 다시 보니
6라인을 보니 canary가 주소로 되어있네요.
이걸 해결하는 방법은 2가지정도로 추측됩니다.
1) check가 가리키는 주소(canary)의 값을 0xdeadbeef로 변경하거나
2) check가 가리키는 주소(canary)를 0xdeadbeef가 있는 곳으로 변경하거나
입니다.
현실적으로 canary가 가리키는 곳에 접근을 하기가 더 힘드므로
check가 가리키는 주소를 변경해볼까 합니다.
level14와 동일하게
main+17에서
ebp-56이 buf의 시작주소이고,
ebp-16이 check의 주소로 보이네요.
비교하기 전인
main+29 주소에 breakpoint를 걸고
실행해 봅시다.
ebp의 주소는 0xbfffec68이네요
그림을 그려봅시다.
이와 같은 상태라면
0xbfffec54에 0xdeadbeef를 넣고
0xbfffec58이 0xbfffec54를 가리키도록하면
적절할 듯 싶습니다.
어떻게 공격코드를 만들어야 할까요?
공격의 성공률을 올리기 위해
buf(20)와 dummy(20)을
모두 0xdeadbeef로
(4바이트*10개 = 40바이트)
채웠습니다.
이후 buf의 시작지점을 가리키도록
0xbfffec30으로 덮어씌웁니다.
즉, 0xdeadbeef*10 + 0xbfffec30
이렇게 작성하면 됩니다.
공격코드를 작성하러 갑시다.
import os
import struct
p32 = lambda x:struct.pack('<L', x)
check = 0xbfffec30
canary = 0xdeadbeef
payload = p32(canary)*10
payload += p32(check)
print payload
이대로 실행하면?
주소가 계속 바뀌는 탓에
여러번 시도 후에 성공했네요.
Level16 Password is "about to cause mass".
'Wargame > FTZ' 카테고리의 다른 글
[FTZ]level17 (0) | 2019.09.08 |
---|---|
[FTZ]level16 (0) | 2019.09.08 |
[FTZ]level14 (0) | 2019.09.08 |
[FTZ]level13 (0) | 2019.09.07 |
[FTZ]level12 (0) | 2019.09.07 |
댓글