本文已参与「新人创作礼」活动,一起开启掘金创作之路。
写在前面
本文中的观点都只是个人的经验之谈,ctf pwn 不止这些,二进制安全也远不止这些。
简介
PWN = 理解目标工作原理 + 漏洞挖掘 + 漏洞利用
CTF 中的 pwn 题,目前最基本、最经典的就是 Linux 下的用户态程序的漏洞挖掘和利用。
其中的典中典就是栈题和堆题了,可以说是每个 pwn 选手的必经之路,但也不要花太长时间在一些奇奇怪怪的技巧上,对之后的学习帮助不大。
前置技能
在真正做出并理解一个 pwn 题前,你可能需要的技能:
- 了解基本的 Linux 命令
- 能编写基本的 C 语言代码
- 调试能力
会用 gdb 或 ida remote debugger 调试 linux 下的程序
- 基本的逆向能力
通常来说,pwn 题只会给编译好的二进制程序。需要通过逆向搞清程序的逻辑。
- 能用 python 编写简单的脚本
在 ctf 中,编写 exp(漏洞利用脚本)时一般都会用到 pwntools 框架。
- __上网
- 热情与耐心
推荐书籍
接下来介绍的书籍对理解计算机底层比较有帮助,能让你在 pwn 时知其然也知其所以然。
- 《CSAPP》,中文名称《深入理解计算机系统》(其实直译应该是《计算机系统:从程序员的角度》):学习 x86_64 汇编,重点看第 4 章程序的机器级表示。推荐做一下配套课程中的两个 lab:bomb 和 attack,学习简单逆向和栈溢出(好像还有基本的 ROP?我记不清了)。这两个 lab 很有意思。
- 《程序员的自我修养——链接、装载与库》 :介绍了 C 源代码如何经过一系列的操作最终变为二进制程序。
- 《x86 汇编语言:从实模式到保护模式》:介绍了更加贴近底层、跟操作系统相关的汇编,以及一些 x86 CPU、操作系统的工作原理。初学时不需要看。
环境等工具安装下载
本机系统:windows 64位 虚拟机:ubuntu 18.04 amd64
Pwn环境搭建清单
- git
- vim
- pip
- pwntools
- 32位依赖库
- peda
- oh my zsh
下面如果安装速度很慢,请自行查找,ubuntu换源
git
sudo apt-get install git
vim
sudo apt-get install vim
pip和pwntools
sudo apt-get update
sudo apt-get install python2.7 python-pip python-dev git libssl-dev libffi-dev build-essential
sudo pip install --upgrade pip
sudo pip install --upgrade pwntools
32位依赖库
sudo apt-get install lib32ncurses5
sudo apt-get install lib32z1
peda
sudo git clonehttps://github.com/longld/peda.git ~/peda
echo "source ~/peda/peda.py" >> ~/.gdbinit
oh my zsh
sudo apt-get install zsh
git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc
sudo gedit ~/.zshrc
将配置文件中的主体一栏改为ZSH_THEME="ys",也可以改为自己喜欢的主题。 然后保存关闭 接下来是自动补齐插件
git clone git://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions
sudo gedit ~/.zshrc
找到plugins=(git)这一行 换为
plugins=(git zsh-autosuggestions)
然后保存 在终端输入reboot就行了
成功的效果图: