栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

和ZLTT一起学pwn 0.前置知识和工具准备

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

和ZLTT一起学pwn 0.前置知识和工具准备

0.前置知识和工具准备 前置知识

在开始学习pwn之前,你需要至少如下的基础知识

1.完整的C语言语法基础

在这一点上,可以不需要学习过于高深的算法知识,当然,要是会一些算法、数据结构或者能够熟练运用指针就更好了

2.基础的linux使用能力

图形化界面在此不予阐述,有手就行。这里的linux使用指命令行状态下,能够运用基本的shell命令管理linux系统。不需要到可以进行shell编程的地步,但需要保证不能两眼一抹黑

3.python语言基础

此处的python包括python2和python3,相信对于具有C语言语法基础的人学python都是有手就行,但我仍然要提醒读者注意python2和python3的诸多区别,尤其是python3中str类型与bytes类型的区分与转换

4.汇编语言基础

x86系列汇编语言具有向下兼容特性,故而可以按如下顺序学习:8086、i386、amd64
推荐王爽老师的《汇编语言》
(笔者习惯使用Intel风格汇编语法,故而之后所有笔记中均使用Intel风格)
不要求可以手搓汇编程序,只要求可以看懂汇编代码
(注意,对于刚开始接触计算机的新生,学习汇编语言可能会极其痛苦)
对于这一步基础属实打不好的同学,可以在之后慢慢补,但是底线是至少要明白以下汇编指令的作用,在之后遇到不懂的汇编指令再百度

mov
add
sub
inc
dec
lea
cmp
test
je
jne
jmp
call
push
pop
and
or
xor
工具准备 1.linux系统

首先,你需要一个可用的linux系统,依据广大pwn学习研究者的习惯,推荐linux的发行版ubuntu系统(以下的所有工具安装都基于ubuntu),请使用vmware软件安装该系统,当然,安装双系统或者把windows删了换成ubuntu我也没意见,唯一不推荐的是使用wsl模拟linux环境,不要问为什么
linux上C语言的动态链接库glibc在不同系统版本上版本也不同,具有不同特性,故而需要安装多个版本的ubuntu
在学习的初期,由于pwn中很大一部分题目,尤其是基础题,其所用libc版本为2.23,对应ubuntu版本为ubuntu16,所以在学习前期至少需要安装一个ubuntu16的系统。当然我建议你一次安装完毕省的麻烦
截止本文编辑的日子,需要的虚拟机如下
ubuntu16(libc2.23)
ubuntu18(libc2.27_<=1.2)
ubuntu18(libc2.27_>=1.3)
ubuntu20(libc2.31)
当然,学到后面的时候就会有办法用一个虚拟机搞定了

2.python

由于其它工具的需要,在不同版本ubuntu上使用的python版本不同。ubuntu16为python2,其余为python3。
对于ubuntu系统,其在安装时就内置了python2,但是python3需要额外安装,使用如下命令安装python3

sudo apt install python3

确认python安装完毕,版本正确后,安装python的pip模块

sudo apt install python-pip   #python2(这个包在ubuntu18以上就无法这样安装了,但无所谓,ubuntu18+我们用python3)
sudo apt install python3-pip  #python3
3.git

你需要git工具来克隆代码托管网站上别人写好的项目

sudo apt install git
4.gdb及其插件(pwndbg、peda、gef三选一)

首先,使用如下命令检查是否安装了gdb

gdb -v

如果没有安装,使用如下命令安装

sudo apt install gdb

我们不得不承认,原生gdb某种意义上真的是个傻X软件,所以我们需要一些插件来增强其功能,笔者建议pwndbg、peda、gef三选一,由于笔者习惯使用pwndbg,在这里给出pwndbg的安装方式,如需安装另外两个插件请自行百度
首先,克隆源代码

git clone https://github.com/pwndbg/pwndbg
cd pwndbg

然后,使用编辑器打开setup.sh

gedit ./setup.sh

搜索并注释掉如下两行(防止python2更新pip引发错误)

git submodule update --init --recursive
${PYTHON} -m pip install ${INSTALLFLAGS} --upgrade pip

然后安装

./setup.sh
5.pwntools

对于ubuntu18及以上的系统,使用基于python3的pwntools。这里我不得不表示,我认为pwntools4.6+在某些方面简直是反pwn手,故而我使用4.5.0版本的pwntools。使用如下命令安装pwntools

sudo pip3 install pwntools==4.5

对于ubuntu16,使用基于python2的pwntools。由于python2已经不再受官方支持,安装比较麻烦,需要对依赖包的版本微调。
以下给出安装pwntools4.0.0的命令

sudo pip install setuptools==44.0
sudo pip install MarkupSafe==0.9.2
sudo pip install cryptography==2.5
sudo pip install configparser==3.5
sudo pip install zipp==0.5
sudo pip install importlib-metadata==0.12
sudo pip install importlib-resources==1.0
sudo pip install pwntools==4

在某些版本的pwntools安装完毕后,可能存在无法使用checksec命令的情况,在python中导入pwn模块后使用语句ELF(“filepath”)可以获得相同的效果

6.ROPgadget

ROPgadget是pwntools的依赖组件之一,当你安装完毕pwntools,也就安装好了ROPgadget
使用如下命令确认ROPgadget版本信息

ROPgadget -v
7.LibcSearcher

截止本文编写,网络上大多数使用LibcSearcher的脚本使用的LibcSearcher是lieanu大佬编写的原版
而笔者使用的是wjhwjhn大佬根据原版修改的改进版,有关这两者的区别请查阅其github页面:LibcSearcherEX

git clone https://github.com/wjhwjhn/LibcSearcher.git
cd LibcSearcher
python2 setup.py develop  #python2
python3 setup.py develop  #python3
8.one_gadget

使用以下命令安装one_gadget

sudo apt install ruby
sudo gem install one_gadget

截至目前,笔者仅在ubuntu20以上成功安装该工具,其它版本均因无法安装ruby>=2.7.0失败。

9.seccomp-tools

使用以下命令安装seccomp-tools

sudo apt install ruby
sudo gem install seccomp-tools

这个工具的状况同上一个。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/348280.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号