pwn简介

CTF中的pwn指的是通过通过程序本身的漏洞,编写利用脚本破解程序拿到主机的权限。比较常见的形式就是把可执行程序运行在目标服务器上,参赛者通过网络与服务器进行交互,通过破解漏洞构造恶意数据发送到远程服务器的程序,从而控制远程服务器。这就需要对程序进行分析,了解操作系统的特性和相关漏洞,是是一个难度比较大的分支。

pwn其实上有很多种,比如linux的pwn,windows的pwn,web的pwn,Andriod的pwn,但我们主要讲linux上的elf文件的漏洞分析与利用。

基础知识

需要的基础知识如下:

  • c语言
  • 汇编语言
  • python
  • 操作系统
  • linux操作

这些基础知识对一个刚进大学的大一新生来说是比较难掌握的。因为大一才开始教C语言,而汇编语言、操作系统等内容可能大二大三才教。对这些基础知识的掌握对pwn的入门与之后的深度学习影响比较大。

C语言是最基础的部分,当下的CTF比赛大部分的pwn题目使用的程序都是利用C语言或者C++完成的,IDA的反编译功能也是变成C/C++,理解并能运用C语言,对于分析程序有很大的帮助。

汇编语言,pwn是绕不过汇编的,分析程序首先面对的就是汇编,对于汇编需要有一定的基础(可以不用完全熟知掌握),按照当下来说,使用的最多的是x86的汇编,然后就是IA32,掌握这两种汇编基本上就足够了。

python,用来写exp脚本(解题脚本),实际上exp每种语言都可以写,但是python集成了一个专门用于pwn的库–pwntools,更方便使用。

linux操作,做题需要在linux环境下进行操作,所以要熟悉linux的一些操作。

经典漏洞

pwn的几大主流漏洞一定要掌握,深层掌握,后续的题目基本上是这些漏洞的深化和结合。

  • 栈溢出
  • 堆溢出
  • ROP
  • 格式化字符串漏洞
  • 其余漏洞

前四种漏洞是大部分程序都存在,且很难避免的,是必须掌握的内容。

Shellcode编码

Shellcode是破解软件的一种方法,对于一些没有办法通过程序内部函数获取系统权限的软件,可以编写Shellcode来获取系统权限。

学习资料

书籍推荐

  • 汇编语言第三版
  • 鸟哥的linux私房菜
  • 深入理解计算机系统
  • 黑客攻防技术宝典(系统实战篇)  一本老书,但是很经典。
  • IDA pro权威指南  IDA学习的书籍
  • 黑客反汇编解密  关于反汇编和分析软件的知识
  • 加密与解密  windows平台的逆向分析

学习网站推荐

刷题网站推荐

思维导图

在这里插入图片描述