Wargame/FTZ
[FTZ]level16
아...
모르고 level16 구경만 하려고 했으나..
함수포인터가 두둥!!
보고나서 못 본 척하고 자려니
침대에 누워서 천장에 스택을
그리고 있을 것만 같아서..
그러지 않기 위해
해결하고 자려고 합니다.
main+6을 보면
[ebp-16]에 0x8048500을 넣고있네요?
main+24를 보면
buf의 시작주소는
ebp-56이네요.
공격할 시나리오를 그려보면
함수포인터가 가리키는 곳이
현재는 printit이지만
shell을 가리키도록 변조하면
될 것 같습니다.
[그림2]의 main+6에 있는 주소를 보았습니다.
printit의 주소네요.
shell의 주소도 확인해 볼까요?
0x80484d0이네요.
main+33에 breakpoint를 걸었습니다.
딱히 여기에 걸지 않고 다른 곳에 breakpoint를 걸어도
괜찮습니다.
이정도면 이제 공격코드 바로 짤 수 있겠죠?
공격의 성공률을 높이기 위해
전부 shell의 주소로 덮겠습니다.
0x80484d0*11
공격코드 짤 것도 없네요..
하하..
뒤에 더미에 shell의 주소를 더 넣어도 되지만
11번만 넣어보겠습니다.
import os
import struct
p32 = lambda x:struct.pack('<L', x)
shell_addr = 0x080484d0
payload = p32(shell_addr)*11
print payload
손으로 적으려면
(python -c 'print "0x080484d0"*11'; cat) | ./attackme
이렇게 작성하셔도 됩니다.
Level17 Password is "king poetic".
'Wargame > FTZ' 카테고리의 다른 글
[FTZ]level18 (0) | 2019.09.08 |
---|---|
[FTZ]level17 (0) | 2019.09.08 |
[FTZ]level15 (0) | 2019.09.08 |
[FTZ]level14 (0) | 2019.09.08 |
[FTZ]level13 (0) | 2019.09.07 |
댓글