
李舟军
本书创新性的提出新的CTF知识学习框架,按照安全杂项入门、隐写术、Web渗透、密码学基础、软件逆向工程、二进制程序漏洞利用(PWN)的顺序构建知识体系,每节附有大量实操练习,即使是完全没有网络安全基础的“新人”,也能对照书中操作,独立复现实验内容。
先做个人理解的总体评价(根据目录),23年8月的书,算是比较新的基础书了适合CTF入门(或者查找资料)。 我以其中的pwn角度,来看。 其glibc版本只有2.31,时至今日24年8月17日glibc已经2.39,在我22年参加的ciscn全国大学生网络安全竞赛中,其堆题目就一个2.34版本的。 也就是说看书学习几乎必然落后于最新的方向,所以看书适合“1.补充其他方向的知识,拓展视野”“2.学到书本身的目录、逻辑结构,方便自己整理自己接触的知识”。 那么如何学习自己所想用到的知识呢? 1.明确目的:比如我想学其中一个方向(以pwn举例),能在比赛中做出题。 最简单快捷的方式是复现。具体言之: 需要题目+解题脚本+环境(本地or远程), 保证本地能getshell,再通过gdb调试,理解解题脚本exp是如何修改调整内存以使得最后getshell/得到flag的。 在调试中,理解为了学pwn所看过的计算机基础知识:操作系统、elf文件结构、C语言、plt表、got表、ROP、malloc、free等函数、IO_FILE、pwntools脚本的编写等等等等。 以是否实现预期目的:比赛中独立做出题为结果。 2.尽可能用一句话总结该方向要做的事,比如pwn就是劫持程序执行流。 然后围绕这个展开体系的学习,进行补充。这好比高中我们写议论文,需要中心论点,通常在开头结尾。 2.1栈溢出中是劫持rip,实现ROP、shellcode等等; 2.2堆溢出、UAF(glibc2.34之前的版本)是劫持malloc_hook、free_hook去getshell; 中间很重要的是堆的布置,又称之为“堆风水”,通过合理布置实现overloap等等,造成堆块复用,从而造成“任意地址读写”修改程序的“执行流”,达到泄露内存、修改内存,并最终getshell。 【堆在学的时候确实很让pwn手难受】 2.2.1:2.34之前基本通过修改hook,控制程序执行流;2.34前后都存在修改IO_FILE劫持程序执行流,各种house系列就是这样。 2.3格式化字符串:主要注意scanf、printf簇函数,使用fmtstr_payload函数,很方便写。 2.4整数溢出:这是因为C语言是弱类型静态语言,造成无符号整型(unsigned int、unsigned short、unsigned long)此类内存变量在一些函数中被强转int变大,而且没有对数字进行大小限制。 此类漏洞可以利用在栈和堆漏洞中,一起结合使用。 2.5以下就是类似真实世界漏洞了: 2.5.1kernel:Windows、Linux、iOS(Apple macOS)、Android; 2.5.2浏览器v8pwn; IOT(物联网:车联网——Tesla:特斯拉汽车的操作系统或相关软件在2023年的比赛中也成为了目标,并且有成功的攻击案例):以路由器漏洞入门 2.5.3工控: 2.5.4虚拟化:Oracle VirtualBox 和 VMWare Workstation 2.5.5容器逃逸: 可惜没有比较新、热门的网安方向:区块链、物联网/车联网/iot、AI安全等等
从讲解base32开始,是一篇关注到现实需求,又覆盖实战需要的一本好书。