quake0day
2023-11-01 20:54:32 +08:00
先从做网站开始学起,学会搭建网站后学习相关编程,然后学习 Web 安全相关知识( SQL 注入,XSS 等)
有兴趣了可以继续学习 Python 和 C 语言编程,然后学习汇编( X86 或者 ARM),只需要了解基本指令和跳转,CALL/Ret 就足够了,多余的部分可以后面慢慢补。
然后这里开始出现分支,推荐是先学习 Linux 相关的基础操作,然后开始学习基础的 Linux 环境下面的二进制逆向安全。
学习汇编的同时了解 x86 或者 ARM 的 CPU 结构(把常用寄存器都背下来),了解 System Call ,Byte Ordering 。
之后学习 Stack 和 Stack Frame ,在汇编语言的层面了解参数是如何传递给函数的,以及函数是怎么通过在栈上面保存地址返回的。这部分需要同时学习 GDB 的基本操作。
之后学习栈溢出,学习 ROP, 了解 PLT, GOT, GOT Overwrite Attack 。同时学习 Format String Bug 等。这部分同时需要学习 Pwntools Library (Python)
之后学习堆溢出,了解 Unlink Attack ,Double Free 和 House of XXX 系列之后可以开始看 Linux 内存实现(glibc)的原理和机制。
之后学习内核溢出,主要是先学习经典的提权方式(cred 结构),在这部分需要开始学习使用 Ghidra 或者是 IDA Free 。
然后就可以算是入门了。
另外一个分支是在 Windows 系统下,补充下 PE 结构和 Windows Kernel 的相关知识,使用 OllyDBG 开始学习 Stack 和 Stack Frame 。同时开始学习 System Call 。 了解 DLL Injection ,Code Injection, Hooking ,SSDT Hooking 。然后学习 Kernel Rootkit (同时学习使用 WinDBG )。并学习 Fuzzing ,Volatility 等知识 这个分支主要学习 Windows 的病毒程序和恶意软件,并进阶学习 Windows 内核。
之后两个分支都学完了,就可以继续融会贯通,如果之前学的是 X86 ,那么可以了解下 ARM 下面的各种攻击,除了寄存器和指令有点不同,其他部分都是大同小异。
后面就是深入操作系统内核(Linux, Windows),学习各种新的架构( RISC-V),于此同时提升编程能力。