前前言
-
为什么要学习pwn?
短期的讲,为了能做题。不至于比赛次次白给。往长了讲,为了入门二进制安全,给自己找条后路。 -
pwn好学吗?
真的不好学。入门难(基础知识要求高,门槛高,见效慢),精通难,资料少,少有人指点。 相比于Web疯狂劝退。
学习动力:就当学专业课(?)了,后来发现好像还挺有意思的。 -
文章目的
总结自我所学,并希望能帮助后来者。如有错误和改进之处请指出,不胜感激。
前言
-
学习pwn所需要的知识
总结起来我认为有以下几条:1.C,C++,汇编(x86,x64) 2.C/C++/...在底层的实现过程 3.python(基本语法,三方库pwntools使用) 4.操作系统(使用+底层实现) Linux>win32 5.工具的使用(至少掌握gdb,Ida吧)
基本上是个计算机系学生大二+大三所有专业课涵盖的范畴,也就是所谓的高门槛。
但在经过一段时间的学习后,实际上我觉得只需要做到以下几条,入门应该是不成问题的:1.扎实的C基础 2.基本DS:链表、队列、栈 3.基本linux配置与命令 4.会汇编更好,不会的话现学几个常用的也可以救急。
无论如何,请至少掌握上述的前三条,并且抽时间去学习所需要的基本知识,理论知识决定上限。
-
前言1-什么是pwn
百度:"Pwn"是一个黑客语法的俚语词 ,是指攻破设备或者系统 。发音类似"砰",对黑客而言,这就是成功实施黑客攻击的声音——砰的一声,被"黑"的电脑或手机就被你操纵。
个人理解:向目标发送特定的数据,使得其执行攻击端发送的恶意代码。
举例:MS17-010,各类木马
如果硬要类比的话,很像Web中XSS的定位吧。
-
前言2-什么是溢出
概念:要表示的数据超出计算机所使用的数据的表示范围时,则产生数据的溢出。最简单的:C数组元素超过上限。
产生原因:1.是C/C++固有的缺陷:不检查数组边界,又不检查类型可靠性,能够直接访问内存和寄存器。(所以快) 2.以不可靠的方式存取或者复制内存缓冲区。(申请了n字节大小的内存缓冲区,随后又向其中复制超过n字节的数据) 3.C/C++编译器开辟的内存缓冲区常常邻近重要的数据结构。**(关键)**
概念比较抽象,后续用例子说明。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。