首页
社区
课程
招聘
[原创]CTF_Pwn环境搭建
发表于: 2020-2-7 20:27 35042

[原创]CTF_Pwn环境搭建

2020-2-7 20:27
35042

最近遇到很多人想玩CTF,咨询环境问题。为了更好地将研究重心放在技术本身,这里简单整理一下个人的Pwn环境的搭建过程,仅供参考。

因为是Pwn环境,涉及到Windows平台的比较少,所以一般使用Linux或者MacOS。我个人是一套Linux的虚拟环境搭配MacOS的物理环境,基本能适应所有的Pwn环境要求。

物理环境:MBP 2015
虚拟环境:Ubuntu 18.04

需要注意,Linux的版本太高很多插件容易出问题,所以不建议使用最新版本的Linux系统,最稳定的不是太老旧的就可以。此外,环境因人而异,没有模板,不是固定的,按需分配。

以上各软件根据官方文档自行安装即可。

涉及到的各种软件的安装,均以Ubuntu平台为例

pwntools

一个ctf框架和漏洞利用开发库,用python开发,必备神器,作用不多解释。
安装方法:

个人使用的是python2版本,需要注意一下。pwntools现在支持python3了,这里给出GitHub地址,有需要的可以参考其readme进行安装python3的pwntools。
支持python3的pwntools

安装完成后,打开python测试, 执行from pwn import *不会报错即可。
(备注:在mac平台下不要使用pip安装,你会怀疑人生的,使用homebrew安装)

gdb

动态调试软件,必备。
安装方法:
```
apt-get install gdb

peda/pwngdb/gef

这是常见的gdb的三个插件,配合gdb使用可以提升调试效率。
安装pwndbg:

安装peda:

安装gef:

因为在同一时刻只能使用一种插件,而且在解决不同类型的题目时使用不同的插件,因此需要配置三种插件的快捷切换。

首先,gdb使用哪种插件是在.gdbinit文件(一般在root目录下)中使用source进行控制的,我们可以在使用插件时注释掉其他的source命令,即可单独使用某一插件。但是每次都编辑该文件实在是麻烦,因此可以使用脚本进行选择。巧合之下,之前看到一位师傅写了个自动选择插件的脚本,很是好用。

现在我们把这个shell脚本放到一个环境变量指向的路径里面,查看一下自己的路径,shell脚本放进去。我放在了/usr/local/sbin目录下,这样就可以执行 gdb.sh,输入对应插件的数字就可以选择使用哪个插件,无需手动更改.gdbinit文件。

实在不会可以参考这位师傅的教程:自动选择gdb插件

32位程序支持

必备,装它。

qemu

这是arm的pwn环境,前期可以不安装,但是终究是逃不过的,建议一步到位。
安装qemu:

安装依赖库:

LibcSearcher

泄露libc库中函数的偏移的库,建议安装,可以节省时间,提高效率。
安装LibcSearcher:

ROPgadget和one_gadget

ROPgadget是用来找gadget的,one_gadget用来寻找libc库中的execve('/bin/sh', NULL, NULL)可以一个gadget就可以getshell,建议安装。

安装ROPgadget:

安装one_gadget:


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 9
支持
分享
最新回复 (16)
雪    币: 14517
活跃值: (17538)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
2
感谢分享
2020-2-7 23:13
0
雪    币: 2510
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
感谢分享
2020-2-7 23:54
2
雪    币: 13
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
感谢
2020-3-4 23:58
1
雪    币: 1067
活跃值: (627)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
感谢分享
2020-5-20 16:32
0
雪    币: 1000
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
windows pwntools:
https://github.com/Byzero512/winpwn
2020-6-15 13:58
0
雪    币: 1110
活跃值: (569)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
7
感谢分享
2020-6-19 19:47
0
雪    币: 5318
活跃值: (3714)
能力值: ( LV13,RANK:283 )
在线值:
发帖
回帖
粉丝
8
感谢分享
2020-6-28 23:46
0
雪    币: 57
活跃值: (206)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
很不错的教程 除了一个插件都安好了已经
2020-7-6 23:56
0
雪    币: 20
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
10
安装peda第一条git命令漏了个空格嗷
git clone https://github.com/longld/peda.git ~/peda
2020-8-4 17:17
0
雪    币: 7
活跃值: (4331)
能力值: ( LV9,RANK:270 )
在线值:
发帖
回帖
粉丝
11
welpwn其实也不错,好像是中科大的一个项目,是对pwntools的一个封装,感觉还挺好用的
2020-8-4 17:28
0
雪    币: 15187
活跃值: (16852)
能力值: (RANK:730 )
在线值:
发帖
回帖
粉丝
12
adore9922 安装peda第一条git命令漏了个空格嗷 git clone https://github.com/longld/peda.git ~/peda
疏忽了  
2020-8-4 19:05
0
雪    币: 919
活跃值: (1340)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
13
请问这个切换脚本,我运行写不到配置文件中,有遇到过吗?
2021-5-27 09:26
0
雪    币: 228
活跃值: (161)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
丿一叶知秋 请问这个切换脚本,我运行写不到配置文件中,有遇到过吗?
确实,不起作用。很奇怪
2021-7-16 16:36
0
雪    币: 228
活跃值: (161)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
15
丿一叶知秋 请问这个切换脚本,我运行写不到配置文件中,有遇到过吗?
在占位字符串下面添加几个空行就好了。
占位字符串【#this place is controled by user's shell】

kda@ubuntu:~$ cat .gdbinit
#source /home/kda/tools/pwndbg/gdbinit.py

#this place is controled by user's shell





#不少于两个空行,对应脚本中的【 location=$[number+2]】 这一行代码

2021-7-16 17:13
0
雪    币: 14
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
16
丿一叶知秋 请问这个切换脚本,我运行写不到配置文件中,有遇到过吗?
可以写进去的,可以去csdn搜一下这个师傅的博客https://blog.csdn.net/weixin_45556441/article/details/115536426
2021-8-18 17:11
0
雪    币: 14
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
17
gelenlen 确实,不起作用。很奇怪
可以起作用的,使用gdb时,输入命令./gdb.sh;其中gdb.sh是自己创建的文件名,内容为上面脚本内容
2021-8-18 17:22
0
游客
登录 | 注册 方可回帖
返回
//