GNOL3'S BASEMENT

Don't cry over spilt milk.

0%

虚拟机配置PWN环境(过时啦)

环境配置-不仅仅于PWN

{(2023新增)文中许多工具已经成为过去,可以参考pwn训练营-1-工具专题学习更加实用的工具}

含有重复造轮子成分,不过开心最重要,生活不只眼前的学习,还有折腾与远方。本文采用虚拟机为vmware workstation。阅读的时候注意边栏的目录,避免错过内容。

文档目的声明

在虚拟机没安装vmtools前无法从windows里复制粘贴文本到vmware中,因此在虚拟机中使用浏览器访问此网站即可解决问题。本文档让你复制粘贴从而加快配置的进度,但过程仍然可能出现问题,请百度/谷歌或问学长解决。(虽然可以有脚本一键配置,但本从0配置来体验Linux系统也是个不错的选择)

如果安装起来有什么疑问,可以加QQ2836924529,或是发邮箱wangzenglong233@qq.com

总而言之,本文没法面面俱到,但是应该够用了,如果遇到问题先再仔细阅读本文档,如果仍然没解决,再去看我B站上传的视频,看看我是怎么操作的,如果视频也没法解决问题,请百度或直接私聊我(有空必回)。

阅读受众声明

本文默认读者已经能够使用VMware Workstation安装好Linux虚拟机,且了解一定的Linux下的bash命令或了解一定的Windows下的dos命令。

如果不具备,可以通过以下方案解决:

  1. 对于linux中bash的一些命令的意思,可以参考《ctf-all-in-one》一书中1.3.LINUX基础自行了解,书籍点此下载
  2. 在B站录制了本文档的安装简单展示,视频建议两倍速速刷,虽然没讲什么内容,但是在安装过程中简单的解释了一下命令的意思,B站视频点此进入,视频中手写的md文档,点此下载

(10.21)对于学弟或者对pwn感兴趣的网友们,新写了一个conf_初探二进制.pdf文件,点此下载,不是很详细因为主要是写给完全0基础的同学的。

适用版本声明

本文基于Ubuntu所书写,但适用的linux版本为Debian系的发行版,下为笔者安装过的系统:

  • deepin 20社区版
  • ubuntu 16.04
  • ubuntu 18.04(Pop!OS18.04)
  • Ubuntu 20.04
  • ubuntu 22.04(Pop!OS22.04)
  • Kali

第一次使用linux可以选择deepin20(最新版的deepin23安装要的空间太大了),开箱即用不用考虑换源,可跳过u换源这一步。

至于现在做题所用ubuntu版本的选择,可以选择20/22为主,首先如今的CTF考的都是glibc-2.31及以上的堆题了。在做ubuntu16的练习的时候,我们可以用patchelf换动态链接库,图省事就再装一个ubuntu16。另外老题目是否还值得花时间学习,不同人心里可能有不同的答案。开心与真正的落实学习才是最重要的。

至于kali,随便啦,想装就装。

pwn环境安装

列出了选装和必装,其中必装部分从0x0A开始可以等到接触到相关知识点了再安装。选装部分的0x02.vim,不喜欢的或不会用的也可自行安装vscode或其他文本编辑器。选装部分的0x03.zsh,配合oh-my-zsh项目能够让终端更加好看,其中kali默认shell即zsh,这个东西见仁见智,想装就装。

重点注意!!!!因GitHub可能会显示拒接访问等访问不上的情况,本来很容易的安装过程,可能会出现无法顺利安装的情况。此时可自行百度/谷歌修改Linux的host解决访问,或者询问学长其他解决方案。

ubuntu换源

  1. 切换root模式
1
2
sudo su
# 回车然后输入当前用户密码,与QQ登录不同,在terminal中输入密码是没有 * 来提示的当前输入状态的。
  1. 备份我们的apt源并拷贝阿里/清华源写入source.list

这里gnol3X_X已经将常用版本的ubuntu源都上传至服务器,因此直接下载最方便,选择适合自己版本的源复制粘贴命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
## ubuntu1604 选下面这四条
cd /etc/apt
cp sources.list sources.list.bak
wget http://gnol3.top/doc/ubuntu16-src.txt
cat ubuntu16-src.txt > sources.list

## ubuntu1804 选下面这四条
cd /etc/apt
cp sources.list sources.list.bak
wget http://gnol3.top/doc/ubuntu18-src.txt
cat ubuntu18-src.txt > sources.list

## ubuntu20.04 选下面这四条
cd /etc/apt
cp sources.list sources.list.bak
wget http://gnol3.top/doc/ubuntu20-src.txt
cat ubuntu20-src.txt > sources.list

## ubuntu22.04 选下面这四条
cd /etc/apt
cp sources.list sources.list.bak
wget http://gnol3.top/doc/ubuntu22-src.txt
cat ubuntu22-src.txt > sources.list
  1. 更新源内容
1
apt update && apt full-upgrade
  1. 安装vmtools,让我们窗口能够自适应我们的屏幕
1
apt install open-vm-tools-desktop
  1. 此时可以重启一下虚拟机,使vm-tools生效,从实现虚拟机与物理机的共享剪切板
1
reboot

Kali换源

  1. 切换root模式
1
2
sudo su
# 回车然后输入当前用户密码,与QQ登录不同,在terminal中输入密码是没有 * 来提示的当前输入状态的。
  1. 备份我们的apt源并拷贝阿里/清华源写入source.list

这里gnol3X_X已经将阿里源上传至服务器,虽然本人不怎么用kali,但应该没错

1
2
3
4
5
6
7
8
9
## Kali
cd /etc/apt
# 2020版kali对更新源的问题做了安全检查
# 需要执行下面这个命令
# 不执行这条命令会出现 "无法安全地用该源进行更新,所以默认禁用该源的解决方法"
rm -rf /etc/apt/sources.list.d
cp sources.list sources.list.bak
wget http://gnol3.top/doc/kali-src.txt
cat kali-src.txt > sources.list
  1. 更新源内容

如果Kali不能正常更新请尝试reboot命令重启,如果重启后仍然存在问题,请私聊联系我
QQ2836924529,或是发邮箱wangzenglong233@qq.com

1
apt update && apt full-upgrade
  1. 安装vmtools,让我们窗口能够自适应我们的屏幕
1
apt install open-vm-tools-desktop
  1. 此时可以重启一下虚拟机,使vm-tools生效,从实现虚拟机与物理机的共享剪切板
1
reboot

安装常用build工具(必)

1
sudo apt install build-essential gcc-multilib g++-multilib

如果我们需要自己用64位系统编译一些32位程序,那么就需要安装build工具,实际上我们的pwn永远不只有做题,所以我建议安装上这个。

安装git(必)

git是一个版本控制系统程序,我们可以适用git clone来获取开源项目源码,编译得到开软件等操作。

1
sudo apt install git

设置git时候不检查ssl,因为有时候你开代理,他会说你无ssl证书

1
git config --global https.sslverify "false" && git config --global http.sslverify "false"

安装vim(选)

vim是一个很好用的终端文本编辑器,当然使用sublime或者vscode都是不错的选择,看个人喜好。sublime和vscode需要手动去官网下载deb安装包。相关网课可以看B站TheCW大佬的视频学习。

1
sudo apt install vim

简单配置一下vim,对于普通用户家目录就在/home/usrname下,如果是root用户,家就在/root。我们输入cd回车就会直达家目录。

1
2
3
cd ~
wget http://gnol3.top/doc/vimrc.txt
cat vimrc.txt > .vimrc

(不安装插件已经可以跳过了)按需求下载一下vim的插件管理工具vim-plug。我们需要用到curl工具,我们先安装curl工具。

1
sudo apt install curl

curl安装完后安装vim-plug

1
2
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

最后献上我随便装的几个插件的配置文件:

1
2
3
cd ~
wget http://gnol3.top/doc/vimrc2.txt
cat vimrc2.txt > .vimrc

插件有如下几个:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
call plug#begin('~/.vim/plugged')

Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'preservim/nerdtree'
Plug 'Yggdroot/indentLine'
Plug 'preservim/tagbar'
Plug 'scrooloose/nerdcommenter'

call plug#end()

map <C-n> :NERDTreeToggle<CR>
map <C-u> :TagbarToggle<CR>

let g:NERDSpaceDelims=1

安装插件很简单,进入.vimrc后在普通模式下输入:PlugInstall<CR>就ok,但是不开代理的情况下可能下载比较慢,所以可以的话,学会使用科学上网很重要。

安装zsh(选)

相比于默认的bash,zsh更强大,且语法一致,如果不需要换,跳过本节

首先安装zsh

1
sudo apt install zsh

安装zsh主题库oh-my-zsh

1
wget https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O - | sh

设置zsh替代bash为默认shell(重点为第四行和第八行,是可以复制执行的)

1
2
3
4
5
6
7
8
# 以root为例
/~(root)/.oh-my-zsh --> 安装路径
/~(root)/.zshrc --> 配置文件
chsh -s /bin/zsh root # 将zsh设置为root下的默认shell
# gnol用户
~(/home/gnol)/.oh-my-zsh --> 安装路径
~(/home/gnol)/.zshrc --> 配置文件
chsh -s /bin/zsh gnol # 将zsh设置为gnol(大家换成自己的)下的默认shell

设置完默认shell后重启一次虚拟机,重启后打开终端会自动生成一个.zshrc文件,修改ZSH_THEME='bira'这个后面的字符串可以改主题大概是配置文件的第11行左右,主题有很多,可以自己去oh-my-zsh-wiki-theme中查看。bira,gallifrey,ys我觉得都很不错。

修改完配置文件后,重新加载配置文件:

1
source .zshrc

zsh更多插件安装,可以参考点击进入文章

小彩蛋:

1,2行如果你会使用clash,我们再讨论,不会就直接关注3-6行,使用apt安装neofetch与toilet,添加到你家目录下的.zshrc最后,退出终端重启,会看到不错的效果哦。

1
2
3
4
5
6
7
alias proxy="export http_proxy=http://127.0.0.1:7890;export https_proxy=http://127.0.0.1:7890"
alias unproxy="unset http_proxy;unset https_proxy;"
alias c="clear"
alias n="neofetch"
alias i="clear;toilet -f future ' WELCOME TO POP OS';neofetch"
#alias i="clear;toilet -f future ' WELCOME TO KUBUNTU';neofetch"
i

安装python与pip(必)

python2-pip2

1
2
3
sudo apt install python-pip
# ubuntu16.04 需要手动安装
# ubuntu20.04 也需要手动安装

手动安装教程点此进入

python3-pip3

1
sudo apt install python3-pip
  • 16.04的apt源里python3版本过低,pwntools用不了,适用python2做题即可。另外也因为这个原因,我们只能安装peda作为我们gdb的辅助插件。

pip换源

pip换源,在家目录下和/root目录下都建一个.pip文件夹,创建一个pip.conf文件

内容为:

1
2
3
4
[global]
index-url =http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host = mirrors.aliyun.com

其他的源地址

1
2
3
4
5
阿里云 http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
豆瓣(douban) http://pypi.douban.com/simple/
清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/

安装pwntools库(必)

python2对于的pip或者说pip2的pwntools模块中,兼并了checksec与ROPgadget,如果安装了pip2的pwntools,0x06,0x07即可跳过。ubuntu16.04存在python3版本过低的问题,安装pip3的pwntools会存在问题,ubuntu20.04存在apt源中舍弃了python-pip的问题,需要手动安装pip2,因此这两个版本需要自己寻找解决方案,部分解决方案已经给出

pwntools是一个专为pwn开发的一个python库。让我们书写exploit变得容易特别多。

1
2
3
4
5
6
7
8
pip install --upgrade pwntools
pip3 install --upgrade pwntools

# ubuntu16.04可能出现pip3安装pwntools报错,建议放弃
# ubuntu18.04可能出现pip3安装pwntools报错,使用如下命令
pip3 install --upgrade pip
pip3 install pwntools

实际上python2版本的pwntools安装完后会自带capstone,checksec,ROPgadget等工具包。检查一下checksec于ROPgadget是否可以用,可以用就可以跳过下面两步骤了。

安装checksec(必)

1
2
3
4
5
6
7
8
9
10
# 直接装
sudo apt install checksec

# 源码安装
git clone https://github.com/slimm609/checksec.sh
cd checksec.sh
sudo ln -s checksec /usr/local/bin/checksec

# 如果已经存在checksec就只需要创建软连接即可,其实使用alias也是一样的
sudo ln -sf checksec /usr/local/bin/checksec

安装ROPgadget(必)

1
2
3
4
sudo apt-get install python-capstoneinstall
git clone https://github.com/JonathanSalwan/ROPgadget.git
cd ROPgadget
sudo python setup.py install

安装gdb动态调试神器(必)

安装gdb

1
sudo apt install gdb

安装gdb拓展,常用的拓展有pwndbg,peda,gef(推荐安装pwndbg,但是在无法安装的时候可以选择peda,但内核调试似乎又是gef最好使,值得一提的是gef说还在用python2的是可怜虫,但ubuntu16.04默认的python3.5已经跑不了gef脚本了, ̄へ ̄)。

上方是三个插件的官方仓库,下面节选了pwndbg和peda安装部分命令:

  • 以pwndbg为例:
    上面给出了github仓库地址。从仓库中的文档中复制,pwndbg安装如下:
    1
    2
    3
    git clone https://github.com/pwndbg/pwndbg
    cd pwndbg
    ./setup.sh

现如今仓库里写着对ubuntu20.04与ubuntu18.04最友好

  • peda安装
    上面给出了github仓库地址。从仓库中的文档中复制,peda安装如下:
1
2
3
git clone https://github.com/longld/peda.git ~/peda
echo "source ~/peda/peda.py" >> ~/.gdbinit
echo "DONE! debug your program with gdb and enjoy"

其中在做堆题时候,有一个pwnGDB拓展很好用,仓库地址,我们同样加进来。

1
2
cd ~/ && git clone https://github.com/scwuaptx/Pwngdb.git
cat ~/Pwngdb/.gdbinit >> ~/.gdbinit

此时我们的~/.gdbinit应该会变成下面这样,把第二行删除并保存即可(如果选择安装了peda,则不需要做任何操作)。

1
2
3
4
5
6
7
8
9
10
11
source /home/gnol/pwndbg/gdbinit.py
source ~/peda/peda.py <----- 用pwndbg就把此行注释并保存文件后退出
source ~/Pwngdb/pwngdb.py
source ~/Pwngdb/angelheap/gdbinit.py

define hook-run
python
import angelheap
angelheap.init_angelheap()
end
end

安装one_gadget(必)

这是一款检查glibc中一健getshell的gadget的小工具,用ruby的包管理器gem安装(ubuntu16源里ruby版本过低,需要自行寻找解决方案,我的解决方案是,再配置一个ubuntu18)

首先安装ruby

1
sudo apt install ruby ruby-dev

安装one_gadget

1
sudo gem install one_gadget

使用方法:

1
one_gadget libc.so.6

安装seccomp-tools(必)

这是一款检查沙箱保护的小工具,同样使用ruby书写

1
sudo gem install seccomp-tools

使用方法:

1
seccomp-tools dump ./a.out

安装main_arena_offset(必)

这个是shell脚本,可以直接在GitHub下载下来。直接放在/bin/目录下就能用

1
2
3
git clone https://github.com/bash-c/main_arena_offset.git
cd main_arena_offset
sudo cp main_arena /bin/

使用方法与one_gadget类似。

安装ropper(选)

与ROPgadget相同,但是对于大文件的分析,ropper比ROPgadget性能要好。github仓库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 直接pip装
sudo pip3 install capstone unicorn keystone-engine ropper

# 手动安装
# 安装keystone-engine
git clone https://github.com/keystone-engine/keystone.git
cd keystone
mkdir build
cd build
../make-share.sh
sudo make install
sudo ldconfig
cd ../bindings/python
sudo make install3 # or sudo make install for python2-bindings

# 安装ropper
sudo pip3 install filebytes==0.9.18
git clone https://github.com/sashs/Ropper.git
cd Ropper
sudo python3 setup.py install

详细信息,查看源仓库readme.md。

简单的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# gnol @ root in ~/Desktop/buuctf [0:19:43] 
$ ropper
(ropper)> file level2_x64
[INFO] Load gadgets from cache
[LOAD] loading... 100%
[LOAD] removing double gadgets... 100%
[INFO] File loaded.
(level2_x64/ELF/x86_64)> search pop rdi
[INFO] Searching for gadgets: pop rdi

[INFO] File: level2_x64
0x00000000004006b3: pop rdi; ret;

(level2_x64/ELF/x86_64)> quit

安装radare2(选)

radare2是一款开源强大的终端静态分析程序。

项目地址

1
2
3
4
5
6
7
8
# 安装
git clone https://github.com/radareorg/radare2
cd radare2
./sys/install.sh

# 卸载
make uninstall
make purge

初体验时,上手比ida pro困难,但是功能强大,开源免费。

安装Ghidra(选)

是一款与ida pro相似的静态分析软件,开源免费,且跨平台。需要首先由jkd11+的java环境。

去github上下载源码,编译运行。

项目地址

下载zip,解压后运行./ghidraRun。

优势是跨平台加开源,在linux下使用方便,但是使用初体验差于ida pro。

安装patchelf(必)

patchelf可以修改elf中的ld和libc路径。

1
sudo apt install patchelf

使用:

1
2
3
4
patchelf --set-interpreter [ld.so路径] --set-rpath [libc所在目录] [elf文件]
# 举例说明(命令很长,可以因此本代码块用\来换行)
patchelf --set-interpreter ~/glibc-all-in-one/libs/2.23-0ubuntu3_amd64/ld-2.23.so \
--set-rpath ~/glibc-all-in-one/libs/2.23-0ubuntu3_amd64 ./question3

安装glibc-all-in-one(必)

glibc包下载工具,可以查看下载不同的libc包,配合patchelf可以切换不同的libc版本。

1
git clone https://github.com/matrix1001/glibc-all-in-one.git

使用方法:

1
2
3
./update_list #更新最新版本的glibc
cat list #查看可下载的glibc
./download glibc #glibc为你想要下载glibc的名字

其他个人兴趣配置(与Pwn无关)

以下内容纯属作者的虚拟机喜欢装,不是必须的内容。

Tmux

  1. 安装

Ubuntu直接sudo apt install tmux

源码编译:GitHub仓库

  1. 简单配置:

参考视频

安装tpm工具,tmux-plugin-manager

1
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm

GitHub仓库

安装德古拉主题

Dracula官网

安装插件使用ctrl+b+I,滚动屏幕适用ctrl+b+[进入copy-mode模式,我们设置copy-mode模式位vi模式,即可用vim的操作来控制我们的终端。

以下配置文件直接wget http://gnol3.top/doc/tmux.txt即可获取

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# List of plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'dracula/tmux'
set -g @dracula-plugins "battery cpu-usage gpu-usage ram-usage time"
set -g @dracula-day-month true
set -g @dracula-show-powerline true
set -g default-terminal "xterm"
#set -g mouse on
setw -g mode-keys vi
set-option -g status-position top
set-option -g prefix2 `
# Other examples:
# set -g @plugin 'github_username/plugin_name'
# set -g @plugin 'github_username/plugin_name#branch'
# set -g @plugin 'git@github.com:user/plugin'
# set -g @plugin 'git@bitbucket.com:user/plugin'

# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run '~/.tmux/plugins/tpm/tpm'

解决vim-airline在tmux中实去色彩,需要在.zshrc中设置export TERM=xterm-256color

[-]小三角形符号的可能修补方案,之所以是可能,是因为我没有尝试去做修复简书Maonx所写方案
[+]似乎安装JetBrainsMono-1.0.2.zip这个字体后,小三角形符号就补全了(秃然有一天发现的)

FZF

GitHub项目地址

  • Using git
1
2
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install
  • 对于Debian系的apt安装,要求Debian9+,Ubuntu19.10+
1
sudo apt install fzf

BAT

GitHub中文说明文档

注意一下适用版本,对于Ubuntu来说需要20.04及以上,且从apt中直接sudo apt isntall bat下载的包命令是batcat,如果需要用bat作为命令需要自己手动设置一条alias

给系统添加Fira Code与JetBrians Mono字体

先下载对应字体的zip压缩包

1
2
unzip xxxx.zip -d ~/.local/share/fonts
fc-cache -rv

WN

dwm

todo

i3wm

todo

后记

滚动更新,未完待续……