PWN入门之二:配置PWN环境
PWN入门之二:配置PWN环境
文章参考:CTFWiki
0x00 前言
现在的CTF-PWN以Linux下的用户态Pwn为主,更准确的说,是以Ubuntu这个Linux发行版的环境为主。因此,为了方便调试程序,我们需要不同版本的Ubuntu,因为有些漏洞只有再特定版本下才能触发,但是为每一个Ubuntu版本都配置一个拥有Pwn环境的虚拟机确实是不太现实,是安装虚拟机和配置环境非常消耗时间,而且每个虚拟机最少需要20GB的储存空间,最少2GB内存,如果这样操作,在我们打比赛的时候,最少也需要开3个虚拟机,两个版本的Ubuntu,一个kali(因为正经比赛不可能只做一个方向的题),再加上物理机上的windows系统,除非你的电脑是神机,否则可定吃不消,所以这里推荐只需要装一个kali虚拟机,在kali中安装pwn环境。
传统 CTF-Pwn 题目通常仅需要以下工具便能完成解题:
- IDA:对题目进行逆向分析
- Python + pwntools:用于编写漏洞利用脚本。
- gdb + pwndbg/peda:用于调试题目二进制文件。
需要注意的是,在初学阶段我们并不推荐任何基于 pwntools 进行过度二次包装的软件包,也不推荐你在利用脚本中使用 lambda 语句进行过度简化,我们更推荐你在学习到一定程度后再去根据个人使用习惯进行决定。
下面,我们从物理机上的配置出发,一步一步,手把手教你配置Pwn环境。
0x01 IDA的安装
![]()
噫!礼赞逆位之女神,为吾等撕开混沌之帷幕,令凡胎得窥深渊底层不可名状之真理。
IDA的安装和其他Windows上的软件安装并没有什么不同,但是这玩意是付费的,所以我们这里安装的是绿色学习版,如果你有下载和安装学习版游戏的经验,这一步非常简单。
下载链接
关于IDA的基础使用方法,详见此处应该补充一条链接,如果没有补充,请联系我
0x02 VM虚拟机的安装
VM之前是需要付费的,不过被博通收购之后就成免费的了,不过有一点不好就是虚拟机的vmtools需要手动安装,不过这点我们不需要考虑,Kali Linux 自2019.3版本起,在安装过程中如果检测到运行在VMware虚拟机中,会自动安装open-vm-tools及open-vm-tools-desktop软件包以替代VMware Tools增强虚拟机功能。
下载链接
百度网盘提取码NBAL

下载好后解压,如果你不会7z格式压缩文件的解压的话,请自行必应。

详细的安装方法请见VMware17超详细安装方法
0x03 Kali Linux的安装
这将是你们学习网安的第一道坎,如果你不会解压的话另当别论,安装虚拟机比较耗费时间,所以建议你专门找出一段空闲的时间来干这个。
详细安装步骤
1、下载kali镜像
下载链接:kali.org
进去之后就会有一个大大的**DOWNLOAD**摆在你眼前,点击它,来到选择镜像的页面。
我们选择这个选项

一共有两种下载方式,选择适合自己的方式,推荐**磁力下载**

下载好后是一个.iso文件
2、在虚拟机上安装kali Linux
打开我们的VMware
点击创建虚拟机

点击自定义,然后点击下一步

硬件兼容性选择Workstation 17.5 or later,然后点击下一步

选择稍后安装操作系统

客户机系统选择**Linux,版本选择Debian 12.x 64位**

虚拟机名称随便起,位置最好选择D盘(如果你有)

处理器配置如下

内存分配8GB

网络连接方式选择NAT

I/O控制器类型选择**LSI Logic**

虚拟磁盘类型选择**SCSI**

选择创建新的虚拟磁盘

最大磁盘大小最好50GB以上,因为光kali Linux系统就需要23GB左右,后续构建Pwn环境镜像,一个镜像3~4个G,硬盘太小装不下。然后将虚拟硬盘储存为单个文件

直接下一步

然后点击完成,这样虚拟机的壳子我们就搭建好来,下面来安装系统。
在虚拟机的侧边栏可以看到虚拟机的配置,我们双击**CD/DVD**,之后选择使用ISO映像文件,选择刚刚下载的.iso文件

然后开启此虚拟机
选择第一个安装方式,按回车

在选择语言界面,选择English,因为英语环境下kali的安装成功率高,中文环境很容易报错

后面的选项不用管,直接continu两步,完成语言选择,进入一个加载页面,等待加载完成
设置主机名,注意,主机名不等于用户名,这里相当于给虚拟机起个名字
设置域名,改成空,就是里面不写任何东西

输入的全名,也就是真名(woc,盒),用于标识用户,不过咱也就是学学网安,打打比赛,这里填用户名就行了

输入用户名

输入密码,简单一点,方便使用

使用区域和时间

格式化磁盘,选择使用整个磁盘




选择Yes

然后是一段短暂的安装。这里默认就好

然后就是一段漫长的安装,耐心等待。
这里选择yes

这里选择/dev/sda

选择continue重启虚拟机

这样我们的虚拟机就安装好了,搞完这些,你可以去喝杯水,休息一下,因为后面还有很长一段路要走。
0x04 配置Kali Linux
刚安装好的kali看起来非常不友善,所以我们需要进一步配置,让它变得好用一点。
1、设置kali终端字体
快捷键CTRL+ALT+T打开终端(记住这个快捷键,很常用)。可以看到,字体非常小,所以我们来让它变大一点。
在右上角,找到File选项卡,找到里面的Preferences选项,中文名叫“首选项”,这个名称在很多软件中是通用的,举一反三。

然后Font那一栏找到Change,然后将Size改成18,Font用来改字体,你也可以改成自己喜欢的字体

改完之后就好看多了。
2、换源和更新系统
这是国内所有Linux发行版安装后的必备操作了,因为大部分Linux发行版的软件源都位于国外,所以访问时间较长,速度减慢(尤其校园网),所以我们就需要把软件源换成国内的,这样在更新系统和后续安装软件的过程中,速度会更快。
先来给root用户换个密码,因为后面很多安装操作基于root权限操作,我觉得老是需要打一个
sudo很麻烦,不如直接su到root用户安装的爽。
输入如下命令切换到root用户,密码就是你的密码。注意:这是在终端中操作,终端中的粘贴快捷键是
CTRL+SHIFT+V,复制同理。注意:密码不会回显,并不是虚拟机没有读取输入 ,也不是你的键盘有问题。
1
sudo su看到命令提示符从
$变成#就是成功了然后再输入下面的命令,回车
1
passwd注意!,和上面一样,读取密码的时候是不会有回显的。
一般改成
toor就行了,好记。有passwd: password updated successfully这样的提示就是改好了。然后输入
exit退出root用户,在普通用户下输入如下指令,在输入你设置的root密码,看看有没有能不能登录上,要是不行,就重复上面的步骤,重新设置一下。1
su上一步验证完不要着急退出,在
root用户下,输入如下命令1
cp /etc/apt/sources.list /etc/apt/sourcesinit把原来用来放软件源的文件复制并改名。
然后用如下命令打开
sources.list1
vim /etc/apt/sources.list之后一直按
D键把原来的软件源都删掉,然后把下面的软件源复制进去1
2
3
4
5
6# 中科大Kali镜像源
deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free non-free-firmware contrib
deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free non-free-firmware contrib
# 阿里云Kali镜像源
deb http://mirrors.aliyun.com/kali kali-rolling main non-free non-free-firmware contrib
deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free non-free-firmware contrib然后输入,一定是输入
:,不是按这个键,然后输入wq退出。换完源之后输入如下命令进行系统更新
1
apt-get update;apt-get upgrade -y;apt-get dist-upgrade又是一段漫长的等待。
然后清理缓存包
1
apt-get clean && apt-get autoclean
3、更改系统语言和安装输入法
很多人倡议使用英文界面,但是对刚开始学习网安且过去12学习的都是应试英语的我们,英文界面还是不太友好,所以这里我们把kali的系统语言改为中文,减轻一点学习上的负担。
切换到
root用户,输入如下命令1
dpkg-reconfigure locales会进入到如下页面

上下键移动,移到最底部,找到zh_CN.UTF-8,空格选择,然后回车。下面来到这样的页面,依旧选择
zh_CN.UTF-8然后回车
然后输入
reboot重启重启之后可以看到我们的登陆界面就变成中文的了,登录之后,你会收到这样的提醒

勾选“不要再次询问我”,并且**保留旧的名称**,不要用中文,用中文的话到时候使用命令行打文件路径的时候会很麻烦,这几个单词还是挺常见的,不用换。下面我们来安装中文输入法,平常也用不着,安装它也就是给脚本写写注释。
输入下面的命令安装fcitx5输入法1
apt install fcitx5 fcitx5-pinyin安装完
reboot重启一下。重启完点开左上角的开始菜单,搜索fcitx5,找到
fcitx5配置,可以看到里面有拼音的选项
然后我们打开全局配置,可以看到它的快捷键。
0x05 配置pwn环境(kali)
我在文章中写了两个版本,一个是常规的一步一步安装,另一个就是使用docker一键部署的版本。虽然写了两个,但是,docker那个版本非常难用,我依旧保留它的原因是我认为这个方法可能会对某些人有用。如果你是一名刚刚入门的新手,千万不要选择docker,它的配置会让你抓狂。
1、安装pwntools
如果你之前有使用python的经验,你可能会习惯性的使用pip,但是这在kali里面是禁止的,他会给你跳一个警告:
1 | |
但是没事,它的意思只是告诉你去使用官方提供的python包。
使用如下命令安装:
1 | |
验证安装:
1 | |
然后输入如下内容回车,若没有任何报错或者输出,则安装成功
1 | |

2、安装one_gadget && seccomp-tools
1 | |
1 | |
3、安装pwndbg(非常重要!!!)
这一步建议使用科学上网,虽然最近国内放开了对github的访问限制,但是访问还是不太稳定,建议使用科学上网。
使用这条命令创建一个专门存放工具的文件夹,然后切换到这文件夹。
1 | |
1 | |
然后克隆这个pwndbg这个项目。
1 | |
切换到pwndbg目录下
1 | |
运行安装脚本
1 | |
等待其安装完成后,如果下的太慢可以ctrl+c打断,然后重新执行上面的命令。
验证安装
1 | |
出现以下画面就证明安装完成。

这里非常不建议安装peda这个插件,手下是应为pwndbg这个插件功能非常健全,其次就是peda已经许多年不维护了。
4、安装main_arena_offset
首先切换到root用户
执行下面的命令
1 | |
5、安装patchelf和glibc_all_in_one
patchelf是用来更换ELF文件的依赖的,因为有些题目中的漏洞只能在特定版本的libc下才能触发。glibc_all_in_one则是用来下载不同版本libc的工具。
确保你在普通用户而不在root用户
1 | |
1 | |
1 | |
0x06 配置pwn环境(docker)
还是那句话,非常不建议使用这个方法,非常难用。
1、安装docker
输入如下命令安装docker
1 | |
安装好之后使用如下命令开启docker,这次开启之后以后就会自动开启。
1 | |
然后输入如下命令,如果输出一大串帮助提示,那就是安装好了
1 | |
添加你的用户到docker用户组
安装好docker以后,只有root用户才能使用docker相关的命令,这样非常不方便,我们把我们的用户添加到用户组,方便使用。1
usermod -aG docker $USER
2、创建镜像和容器
注意:这里的所有操作,要挂梯子完成。
现在我们在主文件夹下创建一个Dockerfiles文件夹,再在该文件夹下创建一个22.04文件夹,然后在22.04文件夹下创建一个文件,不需要任何后缀,就叫Dockerfile,容纳后把下面的内容复制到该文件内。
1 | |
随后,运行如下指令,这一步会花费很长时间。
1 | |
其实我原本打算吧Ubuntu16和18的Dockerfile也放上来,但是这个两个版本的问题就是系统太老了,网络上的Dockerfile大多都不能用,自己写的还有点小问题,所以打算等我搞好了再放上来。
完成之后你便拥有了一个名为 pwnenv_ubuntu24 的带有做题环境的 Ubuntu24 镜像,可以通过 如下命令查看:
1 | |
终端输出如下
1 | |
下面我们根据构建好的容器来创建容器
我们先做些准备工作,在桌面创建一个名叫CTF的文件夹,但是注意,创建时一定要退出root用户,然后用自己的用户创建。然后运行如下命令
1 | |
个参数说明如下:
-d: 使容器在后台运行-p 25000:22: 容器的22端口映射到本地的25000端口--name=pwn24: 容器名为pwn24-v ~/Desktop/CTF:/CTF: 将本地的~/Desktop/CTF目录映射到容器中的/CTF目录,这样我们便能在容器内访问到本地文件,而无需将文件重复拷贝进容器中- `pwnenv_ubuntu22:创建容器所使用的镜像
- 其他的参数是用来将 Docker 容器接入本地图形界面,便于GDB调试。
之后在运行 gdb.attach() 之前运行如下 python 语句进行配置
1 | |
然后我们通过ssh链接容器
1 | |
输入命令后会询问你是否记忆该连接(大概),输入yes就行,然后再输入Dockerfile中配置的密码123456就可以连接了。
输入exit退出ssh连接。
3、安装和配置VScode
这一步我也是一边配一边写,所以写的并不好,还请各位师傅海涵,在配置好用的做题环境上,我也在摸索,如果您有更好的解决方法,请您联系我。
下载VScode,在kali自带的浏览器里面搜索VScode就行,下载.deb文件
在下载好之后,一般在Download目录,输入如下命令安装
1 | |
打开之后是英文界面,我们需要切换到中文,我们需要在左侧边栏点击倒数第二个图标,然后在其新打开的窗口处的顶部(不是整个界面的最顶部)的搜索栏输入chinese,第一个就是,然后点击Install,安装完重启,重启之后就是中文界面了。
安装Remote - Containers扩展,在顶部搜索ms-vscode-remote.remote-containers,第一个就是,安装。
安装好之后点击整个界面左下角类似于><的图标,然后在顶部点击附加到正在运行的容器,之后,VScode就成功的连接上容器,并且可以使用里面的库。
关于字体,装在虚拟机里的VScode不太好看,下面来设置一下,点击左下角的齿轮图标,然后点击设置,然后在文本编辑器选项中选择字体选项,VScode不像其它软件,可以一个一个选字体,它只能手动输入,我们先安装一下字体
1 | |
然后再把字体那栏下面的Font Family的输入框内输入
1 | |
然后再将下面的字体大小改成20或者你看着舒服的大小。
把用户,远程和工作区的这些选项都改了。
- 关于界面,有的电脑的虚拟机上VScode界面会特别小,我们依旧在设置中,搜索
zoom level,然后把0改成1,就差不多了,如果还是小,那就再往大调调。kali出现