Table Of Content - Gray Hat Hacking
Table Of Content - Gray Hat Hacking
Part I Preparation
Chapter 1 Gray Hat Hacking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Chapter 2 Programming Survival Skills . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Chapter 3 Linux Exploit Development Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Chapter 4 Introduction to Ghidra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Chapter 5 IDA Pro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
xi
Gray Hat Hacking: The Ethical Hacker’s Handbook
xii
Part IV Hacking IoT
Chapter 19 Internet o Things to Be Hacked . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
Chapter 20 Dissecting Embedded Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409
Chapter 21 Exploiting Embedded Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
Chapter 22 Sotware-Defned Radio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
Index. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 641
CONTENTS
Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxvii
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxix
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxi
Part I Preparation
Chapter 1 Gray Hat Hacking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Gray Hat Hacking Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
History of Hacking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Ethics and Hacking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Definition of Gray Hat Hacking . . . . . . . . . . . . . . . . . . . . . . 5
History of Ethical Hacking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
History of Vulnerability Disclosure . . . . . . . . . . . . . . . . . . . . 6
Bug Bounty Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Know the Enemy: Black Hat Hacking . . . . . . . . . . . . . . . . . . . . . . 11
Advanced Persistent Threats . . . . . . . . . . . . . . . . . . . . . . . . . 11
Lockheed Martin Cyber Kill Chain . . . . . . . . . . . . . . . . . . . . 11
Courses of Action for the Cyber Kill Chain . . . . . . . . . . . . . . 13
MITRE ATT&CK Framework . . . . . . . . . . . . . . . . . . . . . . . 14
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
For Further Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Chapter 2 Programming Survival Skills . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
C Programming Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Basic C Language Constructs . . . . . . . . . . . . . . . . . . . . . . . . 21
Lab 2-1: Format Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Lab 2-2: Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Lab 2-3: if/else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Sample Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Lab 2-4: hello.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Lab 2-5: meet.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Compiling with gcc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Lab 2-6: Compiling meet.c . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Computer Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Random Access Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Endian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Segmentation of Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
xiii
Gray Hat Hacking: The Ethical Hacker’s Handbook
xiv
Programs in Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Buffers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Strings in Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Putting the Pieces of Memory Together . . . . . . . . . . . . . . . . . 35
Lab 2-7: memory.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Intel Processors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Assembly Language Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Machine vs. Assembly vs. C . . . . . . . . . . . . . . . . . . . . . . . . . . 37
AT&T vs. NASM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Addressing Modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Assembly File Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Lab 2-8: Simple Assembly Program . . . . . . . . . . . . . . . . . . . . 41
Debugging with gdb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
gdb Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Lab 2-9: Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Lab 2-10: Disassembly with gdb . . . . . . . . . . . . . . . . . . . . . . 44
Python Survival Skills . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Getting Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Lab 2-11: Launching Python . . . . . . . . . . . . . . . . . . . . . . . . 46
Lab 2-12: “Hello, World!” in Python . . . . . . . . . . . . . . . . . . 46
Python Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Lab 2-13: Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Lab 2-14: Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Lab 2-15: Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Lab 2-16: Dictionaries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Lab 2-17: Files with Python . . . . . . . . . . . . . . . . . . . . . . . . . 51
Lab 2-18: Sockets with Python . . . . . . . . . . . . . . . . . . . . . . . 53
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
For Further Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Chapter 3 Linux Exploit Development Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Binary, Dynamic Information-Gathering Tools . . . . . . . . . . . . . . . . 55
Lab 3-1: Hello.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Lab 3-2: ldd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Lab 3-3: objdump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Lab 3-4: strace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Lab 3-5: ltrace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Lab 3-6: checksec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Lab 3-7: libc-database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Lab 3-8: patchelf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Lab 3-9: one_gadget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Lab 3-10: Ropper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Contents
xv
Extending gdb with Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Pwntools CTF Framework and Exploit Development Library . . . . . 64
Summary of Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Lab 3-11: leak-bof.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
HeapME (Heap Made Easy) Heap Analysis
and Collaboration Tool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Installing HeapME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Lab 3-12: heapme_demo.c . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
For Further Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Chapter 4 Introduction to Ghidra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Creating Our First Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Installation and QuickStart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Setting the Project Workspace . . . . . . . . . . . . . . . . . . . . . . . . 72
Functionality Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Lab 4-1: Improving Readability with Annotations . . . . . . . . 80
Lab 4-2: Binary Diffing and Patch Analysis . . . . . . . . . . . . . . 83
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
For Further Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Chapter 5 IDA Pro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Introduction to IDA Pro for Reverse Engineering . . . . . . . . . . . . . . 89
What Is Disassembly? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Navigating IDA Pro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
IDA Pro Features and Functionality . . . . . . . . . . . . . . . . . . . . . . . . 96
Cross-References (Xrefs) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Function Calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Proximity Browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Opcodes and Addressing . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Shortcuts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Debugging with IDA Pro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
For Further Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 641