Pwn环境配置

本文演示使用干净的Vmware下安装的的 Ubuntu 18.04 LTS镜像 配置以下Pwn环境:

  • OS(系统)配置

    • VMware Tools
    • net-tools
    • open-vm-tools
    • 更换软件源
    • vim
    • 开启root账户权限
  • 其它环境配置
    • git
    • gcc
    • python3-pip
    • python3
    • qemu
    • gdb-multiarch
  • Pwn工具
    • pwn-tools
    • pwndbg、peda、gef
    • ROPgadget
    • seccomp-tools
    • LibcSearcher
    • patchelf
    • ropper
    • one_gadget
    • ARM PWN
      • gcc-arm-linux-gnueabi
      • gcc-aarch64-linux-gnu
    • MIPS PWN
      • gcc-mips-linux-gnu
      • gcc-mipsel-linux-gnu
      • gcc-mips64-linux-gnuabi64
      • gcc-mips64el-linux-gnuabi64

为了一些命令可以让大家通用,所以都会加上sudo等权限语句,这样即便你不使用root账户或挑选任何一个小节直接观看和执行命令都是没有问题的

Ubuntu 18.04是一个常用的版本,即便是更高的版本以下安装方式都是可用的。

我当前用的是Ubuntu18.04.6目前使用的是glibc2.27版本,还是主流的PWN Pwn题中的版本,所以选了这个

# 查看glibc版本
ldd --version

Ubuntu OS配置

需要下载操作系统和虚拟机的小伙伴一定要认准官网啊,毕竟大家可是搞安全的,要专业!(๑•̀ㅂ•́)و✧

Ubuntu官网:https://ubuntu.com/

VMware Workstation:https://www.vmware.com/

安装Vmware Tools

VMware Tools是VMware虚拟机中自带的一种增强工具,相当于VirtualBox中的增强功能(Sun VirtualBox Guest Additions),是VMware提供的增强虚拟显卡和硬盘性能、以及同步虚拟机与主机时钟的驱动程序。

选中当前操Ubuntu虚拟机,点击菜单栏虚拟机-> 安装 Vmware Tools

然后打开一个终端,将当前用户临时切换为root账户

# 临时切换root用户权限
sudo su # vmware-tools被放在/media/用户/VMware Tools目录下,使用命令将其进行解压,然后输出到/tmp目录下,因为media目录下是只读的
tar -zxvf /media/用户名/VMware\ Tools/VMwareTools-xx.x.xx-xxxxx.tar.gz -C /tmp

# 切换到解压后的vmware-tools目录下
cd /tmp/vmware-tools-distrib/ # 执行vmware-install.pl文件
./vmware-install.pl # 提示是否要安装open-vm-tools[Do you still want to proceed with this installation?] 这里选择yes
yes
# 安装完成后重启系统
reboot

安装net-tools

Linux网络基础工具。构成Linux操作系统NET-3网络分布的基础程序集。

net-tools提供了基本的网络相关操作,如ifconfig,而Ubuntu默认没有安装net-tools,所以这里安装一下

# 临时切换到root权限
sudo su # 更新软件索引并安装net-tools工具
apt update && apt install net-tools

安装完成后,可以执行一下ifconfig命令来验证是否安装成功

安装open-vm-tools

open-vm-tools 是VMwareTools 的开源实现,由一套虚拟化实用程序组成,这些程序可增强虚拟机在 VMware 环境中的功能。

open-vm-tools提供VMware 虚拟机文件复制、复制粘贴功能

# 更新软件索引并移除系统中安装过的open-vm-tools
sudo apt update && apt autoremove open-vm-tools # 安装open-vm-tools --安装过程中一路默认回车即可
sudo apt install open-vm-tools-desktop # 安装完成后,重启系统
reboot

重启后,可自由 宿主机<->虚拟机 拖拽文件、复制粘贴等快捷键

替换软件源

软件源是指linux系统在线安装的软件包的来源,是操作系统官方发布的软件安装包的一个集合,即应用程序安装仓库。

这里官方源真的太慢了老是安装软件失败,还是换成阿里云的Ubuntu软件源吧

# 临时切换root权限
sudo su # 备份apt软件源
cp /etc/apt/sources.list /etc/apt/sources.list.old # 编辑sources.list文件
vi /etc/apt/sources.list

命令模式下使用dG即可清空文件中的所有内容,然后将以下内容复制到vi中,Ubuntu中粘贴快捷键为ctrl + shift + v

#  阿里源
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

然后使用:wq进行保存并退出操作

# 执行该命令验证一下源更换是否成功
apt update

可以看到包含阿里云的地址,表示更换源成功

安装vim

Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。

Ubuntu系统默认带了vi编辑器,但是vim更好用所以安装vim

# 临时切换到root权限
sudo su # 安装
apt update && apt install vim

选择Y即可

开启root账户

Root,也称为根用户,是Unix(如Solaris、AIX、BSD)和类UNIX系统(如Linux、QNX等),及Android和iOS移动设备系统中的唯一的超级用户,

开启Ubuntu root权限 -> Ubuntu默认禁用root账户,只能临时使用root权限,这样不方便我们个人使用所以开启root账户

首先重置root密码

# 重置root账户密码
sudo passwd root # 输入当前用户密码
# [sudo] password for xxx:
# 输入要设置的root账户密码
# Enter new UNIX password:
# 重新输入root账户密码
# Retype new UNIX password:

提示passwd: password updated successfully 表示密码修改完成

打开/usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf文件,文件末尾增加两行:

# 临时切换root权限
sudo su # 使用vim编辑器打开该文件
vim /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf # 将以下内容追加到文件中
greeter-show-manual-login=true
all-guest=false

然后:wq 退出即可

# 编辑gdm-autologin文件 然后把标红的那一行注释掉
vim /etc/pam.d/gdm-autologin

然后:wq保存退出即可

# 编辑gdm-password 然后把标红的那一行注释掉
vim /etc/pam.d/gdm-password

然后:wq保存退出即可

# 编辑.profile文件
vim /root/.profile

# 将原来的 mesg n || true注释掉,然后替换成tty -s&&mesg n || true
# 如果没有mesg n || true,那么就在文件末尾添加tty -s&&mesg n || true
tty -s&&mesg n || true

然后:wq保存退出即可

重启系统,即可使用root账户登录,点Not listed,Username 输入 root,Password输入账户密码即可

此时再次打开的终端就是root权限的了,这是因为我们当前登录的用户是root

其它环境配置

安装git

Git是一个免费的、开源的分布式版本控制系统,旨在快速高效地处理从小型到大型项目的一切事务。

平常使用的最多的功能是可以拉取github、gitee等开源社区的项目

# 更新软件索引并安装git工具
sudo apt update && apt install git

检查以下安装是否成功

# git检查版本命令 用来验证安装是否成功
git --version

有类似这样的输出表示安装成功

安装gcc

GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言译器。

对于个人用户或开发者而言主要可以用来编译一些c语言代码,自己想要编写一些demo的时候需要gcc进行编译

# 使用root权限安装gcc
sudo apt update && apt install gcc # 安装完成后使用命令验证安装是否成功
gcc --version

安装python3-pip

pip 是一个现代的,通用的 Python 包管理工具。提供了对 Python 包的查找、下载、安装、卸载的功能。

python包管理工具

# 安装pip
sudo apt update && apt install python3-pip # 安装完成后使用命令验证安装是否成功
pip3 --version

安装python3

Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。

python运行环境,这就不用解释了吧,运行python代码的

# 安装python
sudo apt update && apt install python3 # 安装完成后使用命令验证安装是否成功
python3 --version

安装qemu

Qemu可以看成一款虚拟机,他可以模拟很多CPU架构。

QEMU是一套由法布里斯·贝拉(Fabrice Bellard)所编写的以GPL许可证分发源码的模拟处理器,在GNU/Linux平台上使用广泛

# 安装qemu
sudo apt update && sudo apt install qemu-user qemu-system # 安装完成后使用命令验证安装是否成功
qemu-system-x86_64 --version

安装gdb-multiarch

用作gdb客户端进行调试,是任何架构的通用客户端

# 安装gdb-multiarch
sudo apt update && sudo apt install gdb-multiarch # 安装完成后使用命令验证安装是否成功
gdb-multiarch --version

Pwn工具

在主目录下创建一个存放pwn工具的目录,如env,这样就能将工具文件统一进行管理

# 在主目录下创建Env(envirment)文件夹
mkdir ~/Env

安装pwntools

pwntools是一个CTF框架和漏洞利用开发库,用Python开发,旨在让使用者简单快速的编写exploit。

pwntools有两种安装方法,一种是git项目后安装,另一种是pip直接安装。这里我们把pwntools git下来,但是用pip安装,因为后续的工具需要pwntools项目包里的脚本,pip安装不会出错。安装过程时间较长,保持网络状态良好

# clone git仓库源码
git clone https://github.com/Gallopsled/pwntools.git
sudo apt update && apt install python3 python3-pip python3-dev git libssl-dev libffi-dev build-essential
python3 -m pip install --upgrade pip
python3 -m pip install --upgrade pwntools
pip3 list | grep pwntools

安装pwndbg、peda、gef

pwndbg是一个gdb的插件,在ctf中pwn题目中使用非常方便,尤其是对堆的查看,有很多独有的指令。

peda一款实用的GDB插件 增强gdb的显示:在调试过程中着色并显示反汇编代码,寄存器和内存信息。

gdb是GNU开源组织发布的一个强大的Linux下的程序调试工具。gef做为gdb的一个插件,方便快速调试使用。

# 拉取代码 	  -> 如果拉取不下来的话,可以先把这三个项目frok到自己的github仓库,然后使用ssh拉取即可
# -> 或者使用代理网络等
git clone https://github.com/pwndbg/pwndbg.git
git clone https://github.com/longld/peda.git
git clone https://github.com/hugsy/gef.git # 切换到pwndbg目录下
cd ~/tools/pwndbg
# 安装
./setup.sh
# 安装依赖插件
pip3 install keystone-engine ropper keystone-engine
# 可以通过编辑gdbinit挂载插件
vim ~/.gdbinit # 这个根据自己的目录来就可以了
source /root/Env/pwndbg/gdbinit.py
#source /root/Env/peda/peda.py
#source /root/Env/gef/gef.py #选中任意一个脚本后,输入gdb即可使用
gdb

选择其中任何一个插件后,然后将其它两个插件注释掉就好了,比如想使用pwndbg的时候:

使用peda:

使用gef:

安装ROPgadget

这个工具让你在你的二进制文件上搜索你的小工具,以方便你的ROP开发。ROPgadget支持ELF/PE/Mach-O格式的x86、x64、ARM、ARM64、...

其作用和ropper差不多,不过ROP因为是一个老牌的工具,所以使用的人较多一些

# 安装依赖
sudo pip3 install capstone
cd ~/Env
# 下载ROPgadget
git clone https://github.com/JonathanSalwan/ROPgadget.git
cd ROPgadget
# 执行安装
python3 setup.py install

直接执行ROPgadget可能会发生以下错误:

解决方案:

# python3执行目录脚本缺失,所以需要把ROPGadget下的scripts文件夹下的脚本,而因为安装版本不同,所以你应该将我的目录改成你系统中对应的目录,主要是python路径以及ROPGadget版本
sudo cp -r scripts /usr/local/lib/python3.6/dist-packages/ROPGadget-6.7.dist-info

再次尝试执行:

安装seccomp-tools

seccomp-tools可以分析程序的seccomp状态,哪些被系统被禁用了安装

该项目旨在(但不限于)分析CTF pwn挑战中的seccomp沙盒。有些特性可能是特定于ctf的,但对于分析真实情况下的seccomp仍然有用

# 安装seccomp-tools
gem install seccomp-tools # 安装完成后检查安装是否成功
seccomp-tools --version

安装LibcSearcher

LibcSearcher是针对pwn做的python库,在做pwn题时寻找libc版本非常好用,使用方式也非常简单

这是针对CTF比赛所做的小工具,在泄露了Libc中的某一个函数地址后,常常为不知道对方所使用的操作系统及libc的版本而苦恼,常规方法就是挨个把常见的Libc.so从系统里拿出来,与泄露的地址对比一下最后12位(LibcSearcher自带libc-database

# 克隆代码
git clone https://github.com/lieanu/LibcSearcher.git
cd LibcSearcher
# 安装
python3 setup.py develop # 查看是否安装成功
pip3 list | grep LibcSearcher

安装patchelf

patchelf 是一个用来修改elf格式的动态库和可执行程序的小工具,可以修改动态链接库的库名字,以及链接库的RPATH

这个真的是非常滴好用,因为在做题的时候无法避免会出现多版本libc题的情况,但是如果按照libc版本重装多个虚拟机的话实在是太费劲了,patchelf就可以直接修改题目所需的libc

# 更新索引并安装patchelf
sudo apt update && apt install patchelf # 验证安装是否成功
patchelf --version

安装ropper

你可以使用ropper来显示不同文件格式的二进制文件信息,你可以搜索小工具来建立不同的rop链。

主要为了方便我们来找到一些可用的ROP代码段的工具

# 安装依赖项capstone
pip3 install capstone
# 安装依赖项filebytes
pip3 install filebytes
# 拉取源代码
git clone https://github.com/sashs/ropper.git
# 切换到目录下
cd roppper
# 如果setup.py没有执行权限,先赋予执行权限
chmod +x setup.py
python3 setup.py install

安装one_gadget

OneGadget使用符号执行来寻找小工具的约束条件,以获得成功。

主要是用来找寻libc中的可直接被使用的shellcode的地址

# 更新并安装依赖
sudo apt update && apt -y ruby ruby-dev
# 安装one_gadget
sudo gem install one_gadget

安装ARM PWN

基于ARM架构的PWN

ARM软件包 -> 具备ARM交叉编译gcc与ARM程序动态链接库

安装gcc-arm-linux-gnueabi

适用于 Arm Cortex-A 系列芯片,针对 32 位芯片,使用的是 glibc 库。可以用来编译 u-boot、linux kernel 以及应用程序。

# 安装gcc-arm-linux-gnueabi
sudo apt update && apt install gcc-arm-linux-gnueabi
# 输入Y继续安装
Y
# 输入以下内容然后按下tab键盘进行补全
arm-linux-gnueabi

有以下内容说明安装成功

安装gcc-aarch64-linux-gnu

适用于 Arm Cortex-A 系列芯片,针对 64 位芯片,使用的是 glibc 库。可以用来编译 u-boot、linux kernel 以及应用程序。

# 安装gcc-aarch64-linux-gnu
sudo apt update && apt install gcc-aarch64-linux-gnu
# 输入Y继续安装
Y
# 输入以下内容然后按下tab键盘进行补全
aarch64-linux-gnu

有以下内容说明安装成功

安装MIPS PWN

基于MIPS架构的PWN

具备MIPS交叉编译gcc与MIPS程序动态链接库

安装gcc-mips-linux-gnu

这是一个依赖包,为mips架构提供默认的GNU C交叉编译器。

# 安装gcc-mips-linux-gnu
sudo apt update && apt install gcc-mips-linux-gnu
# 输入Y继续安装
Y
# 输入以下内容然后按下tab键盘进行补全
mips-linux-gnu-

有以下内容说明安装成功

安装gcc-mipsel-linux-gnu

这是一个为mipsel架构提供默认GNU C交叉编译器的依赖包。

# 安装gcc-mipsel-linux-gnu
sudo apt update && apt install gcc-mipsel-linux-gnu
# 输入Y继续安装
Y
# 输入以下内容然后按下tab键盘进行补全
mipsel-linux-gnu

有以下内容说明安装成功

安装gcc-mips64-linux-gnuabi64

这是一个依赖包,为mips64架构提供默认的GNU C交叉编译器。

# 安装gcc-mips64-linux-gnuabi64
sudo apt update && apt install gcc-mips64-linux-gnuabi64
# 输入Y继续安装
Y
# 输入以下内容然后按下tab键盘进行补全
mips64-linux-gnuabi64

有以下内容说明安装成功

安装gcc-mips64el-linux-gnuabi64

这是一个依赖包,为mips64el架构提供默认的GNU C交叉编译器。

# 安装gcc-mips64el-linux-gnuabi64
sudo apt update && apt install gcc-mips64el-linux-gnuabi64
# 输入Y继续安装
Y
# 输入以下内容然后按下tab键盘进行补全
mips64el-linux-gnuabi64

有以下内容说明安装成功

基于Ubuntu搭建Pwn调试环境的更多相关文章

  1. 基于Ubuntu搭建OpenGL开发环境

    1. 引言 笔者这里基于Ubuntu 20.04.3 LTS系统,搭建OpenGL开发环境,主要使用的库有GLFW和GLAD GLFW是一个专门针对OpenGL的C语言库,它提供了一些渲染物体所需的最 ...

  2. 基于Ubuntu搭建GMS测试环境

    一.版本信息: 系统版本:Ubuntu 18.04.2 LTS JDK版本: 1.8.0_171 SDK版本:android-sdk_r24.4.1-linux.tgz ADB版本:1.0.40 ap ...

  3. 基于Ubuntu 搭建 WordPress 个人博客 - 开发者实验室 - 腾讯云

    1.准备 LAMP 环境 安装 Apache2 在终端输入该命令 ,使用 apt-get 安装 Apache2: sudo apt-get install apache2 -y 安装好后,您可以通过访 ...

  4. Redis源码漂流记(二)-搭建Redis调试环境

    Redis源码漂流记(二)-搭建Redis调试环境 一.目标 搭建Redis调试环境 简要理解Redis命令运转流程 二.前提 1.有一些c知识简单基础(变量命名.常用数据类型.指针等) 可以参考这篇 ...

  5. Ubuntu 搭建PHP开发环境

    Ubuntu确实很好玩.有喜欢的命令行,简洁的界面,不同于Window要的感觉.偶尔换换环境工作,学习Linux的思维方式,是一种不错的做 法.之前也折腾过Ubuntu,不过,因为网络的问题,一直没有 ...

  6. Centos7安装Docker 基于Dockerfile 搭建httpd运行环境

    Centos7安装Docker 基于Dockerfile 搭建httpd运行环境 docker docker搭建 docker build 本文档完成目标内容如下 使用Docker搭建http服务器一 ...

  7. 基于eclipse搭建android开发环境-win7 32bit

    基于eclipse搭建android开发环境-win7 32bit 前言:在使用朋友已搭建的Android开发环境时,发现朋友的开发环境版本较低且在update SDk时失败,便决定根据网上文章提示从 ...

  8. 腾讯云:基于 Ubuntu 搭建 VNC 远程桌面服务

    基于 Ubuntu 搭建 VNC 远程桌面服务 前言 任务时间:5min ~ 10min 必要知识 本教程假设您已学习以下 Ubuntu 基本操作: 连接 SSH 执行命令 编辑文件 如果还没有掌握 ...

  9. 用Intellij idea搭建solr调试环境

    最近在使用solr时,配置会有一些问题,log里面打印出日志了,但是还是不知道发生这样错误的原因.于是想学习一下相关的solr源码,以下是如何搭建solr调试环境步骤. solr调试环境搭建,首先下载 ...

  10. Ubuntu搭建Java开发环境-刘志敏-专题视频课程

    Ubuntu搭建Java开发环境-3人已学习 课程介绍        主要介绍在Ubuntu环境如何安装Java开发的基本环境课程收益    学会Ubuntu中安装jdk.mysql.maven和id ...

随机推荐

  1. Python3.11二进制AI项目程序打包为苹果Mac App(DMG)-应用程序pyinstaller制作流程(AppleSilicon)

    众所周知,苹果MacOs系统虽然贵为Unix内核系统,但由于系统不支持N卡,所以如果想在本地跑AI项目,还需要对相关的AI模块进行定制化操作,本次我们演示一下如何将基于Python3.11的AI项目程 ...

  2. WiFi基础(二):最新WiFi信道、无线OSI模型与802.11b/g/n

    liwen01 2024.09.01 前言 最近十几年,通信技术发展迅猛,通信标准更新频繁,有的设备还在使用 802.11/b/g/n 协议,有的已支持到 WiFi6.WiFi7. 而国内有关无线 W ...

  3. 全网最适合入门的面向对象编程教程:45 Python 实现常见数据结构-链表、树、哈希表、图和堆

    全网最适合入门的面向对象编程教程:45 Python 实现常见数据结构-链表.树.哈希表.图和堆 摘要: 数据结构是计算机科学中的一种组织和存储数据的方式,它决定了数据的访问方式和操作效率,数据结构的 ...

  4. 原生JavaScript实现一个简单的Promise构造函数示例

    下面demo示例,只支持实例的then和catch,代码如下: function PromiseDiffer(fn){ var self = this; this.status = 'pendding ...

  5. 免费在线OCR识别工具TextIn Tools,开启智能学习新时代

    传统的学习方式,笔记必须手写摘抄:带字照片只能插入文档:PDF转换要花钱买会员-- 而在线OCR识别工具tools.textin.com,既好用又免费,它不仅仅具有文字和表格识别工具,还包含PDF转文 ...

  6. ASP.NET Core – 网站发布要做的事儿 Publish, Minification, Compression, Cache, HSTS, URL Rewrite Https & www, Close IIS Feature

    前言 要发布网站需要做一些优化, 比如 cache, compression, minification 等等. 以前有写过相关的文章: Asp.net core 学习笔记 ( IIS, static ...

  7. QT6框架也能开发Web浏览器应用程序:QT6框架如何编译运行测试WebAssembly应用程序?

    QT6框架也能开发Web浏览器应用程序:QT6框架如何编译运行测试WebAssembly应用程序? 简介 本文将介绍如何使用QT6框架开发Web浏览器应用程序,并介绍具体的编译运行测试WebAssem ...

  8. CTFSHOW pwn03 WrriteUp

    本文来自一个初学CTF的小白,如有任何问题请大佬们指教! 题目来源 CTFShow pwn - pwn03 (ret2libc) https://ctf.show/challenges 思路 1.下载 ...

  9. Linux内核中cpu_capacity是什么?

    cpu_capacity 在Linux内核中,cpu_capacity 是用于表示每个CPU的处理能力的一个参数,通常用于调度器的负载均衡.它表明不同的CPU核心在计算资源分配中的相对性能,尤其在异构 ...

  10. Java日期时间API系列15-----Jdk8中java.time包中的新的日期时间API类,java日期计算2,年月日时分秒的加减等

    通过Java日期时间API系列8-----Jdk8中java.time包中的新的日期时间API类的LocalDate源码分析 ,可以看出java8设计非常好,实现接口Temporal, Tempora ...