前前言

  • 为什么要学习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++编译器开辟的内存缓冲区常常邻近重要的数据结构。**(关键)**

    概念比较抽象,后续用例子说明。

0x01 基础知识速成

常用寄存器


kee1ong
1 声望1 粉丝