Linux_pwn入门系列

170 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

写在前面 

本文中的观点都只是个人的经验之谈,ctf pwn 不止这些,二进制安全也远不止这些。

简介

PWN = 理解目标工作原理 + 漏洞挖掘 + 漏洞利用

CTF 中的 pwn 题,目前最基本、最经典的就是 Linux 下的用户态程序的漏洞挖掘和利用。

其中的典中典就是栈题和堆题了,可以说是每个 pwn 选手的必经之路,但也不要花太长时间在一些奇奇怪怪的技巧上,对之后的学习帮助不大。

前置技能

在真正做出并理解一个 pwn 题前,你可能需要的技能:

  1. 了解基本的 Linux 命令
  2. 能编写基本的 C 语言代码
  3. 调试能力

会用 gdb 或 ida remote debugger 调试 linux 下的程序

  1. 基本的逆向能力

通常来说,pwn 题只会给编译好的二进制程序。需要通过逆向搞清程序的逻辑。

  1. 能用 python 编写简单的脚本

在 ctf 中,编写 exp(漏洞利用脚本)时一般都会用到 pwntools 框架。

  1. __上网
  2. 热情与耐心

推荐书籍

接下来介绍的书籍对理解计算机底层比较有帮助,能让你在 pwn 时知其然也知其所以然。

  1. 《CSAPP》,中文名称《深入理解计算机系统》(其实直译应该是《计算机系统:从程序员的角度》):学习 x86_64 汇编,重点看第 4 章程序的机器级表示。推荐做一下配套课程中的两个 lab:bomb 和 attack,学习简单逆向和栈溢出(好像还有基本的 ROP?我记不清了)。这两个 lab 很有意思。
  2. 《程序员的自我修养——链接、装载与库》 :介绍了 C 源代码如何经过一系列的操作最终变为二进制程序。
  3. 《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就行了

成功的效果图: 在这里插入图片描述