虚拟机安装
- 镜像下载网站(http://old-releases.ubuntu.com/releases/)
- 虚拟机建议硬盘 256 G 以上,内存也尽量大一些。硬盘大小只是上界,256 G 不是真就占了 256G,而后期如果硬盘空间不足会很麻烦。
- lsb_release -a查看版本
- 更换 ubuntu 镜像源 (https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/),建议先在 系统设置 → Software & Updates → Download from → 选择国内服务器例如阿里云 (貌似不这样后续换源会出错),然后再 sudo vim /etc/apt/sources.list 将镜像源中不高于当前系统版本的镜像复制进去(高于当前系统版本容易把 apt 搞坏)。
- sudo apt update
基础工具
net-tools
ifconfig 查看网络配置需要安装 net-tools
sudo apt install net-tools
vim
sudo apt install vim
gedit
sudo apt install gedit
git
sudo apt install git
gcc
sudo apt install gcc
sudo apt install gcc-multilib
python
sudo apt install python2
sudo apt install python3
sudo apt install ipython
sudo apt install ipython3
pip
sudo apt install python3-pip
sudo apt install curl
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py
sudo python2 get-pip.py
docker
sudo apt install docker.io
sudo apt install docker-compose
oh-my-zsh
#尽量root用户也下载一边
sudo apt install zsh
安装oh-my-zshsh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
设置zsh为默认shell(重启虚拟机后生效)
chsh -s /bin/zsh
安装插件:
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
编辑~/.zshrc添加插件:
plugins=(gitzsh-autosuggestionszsh-syntax-highlightingextract)
gdb
安装: sudo apt-get install gdb gdb-multiarch
gdb 插件
主要有 pwndbg,peda,gef,这里我常用的是pwndbg。对于版本过于古老导致环境装不上的可以试一下peda.
先将三个项目的代码都拉取下来:
git clone https://github.com/longld/peda.git
git clone https://github.com/pwndbg/pwndbg.git
git clone https://github.com/hugsy/gef.git
pwndbg 需要运行初始化脚本:
cd pwndbg
sudo ./setup.sh
另外还有一个 pwngdb 插件在调试多线程堆( heapinfoall 命令)的时候很有用,建议安装。
git clone https://github.com/scwuaptx/Pwngdb.git
gdb 在启动的时候会读取当前用户的主目录的.gdbinit文件进行 gdb 插件的初始化,这里提供一个
配置方案。
source /home/ubuntu/tools/pwndbg/gdbinit.py
#source /home/ubuntu/tools/peda/peda.py
#source /home/ubuntu/tools/gef/gef.py
#source /home/ubuntu/tools/muslheap/muslheap.py
source /home/ubuntu/tools/Pwngdb/pwngdb.py
source /home/ubuntu/tools/Pwngdb/angelheap/gdbinit.py
define hook-run
python
import angelheap
angelheap.init_angelheap()
end
end
注意,以普通用权限和管理员权限启动 gdb 时读取的 .gdbinit 文件的路径是不同的,普通权限读取的
是 /home/<username>/.gdbinit 而管理员权限读取的是 /root/.gdbinit 。
pwndbg 安装 ghidra 插件可以支持代码反编译(虽然没啥用 )
- 安装 r2pipe 库
-
- pip3 install r2pipe
- 下载安装 radere2 项目
-
- git clone https://github.com/radareorg/radare2.git
- cd radare2
- sudo sys/install.sh
- 下载编译安装 r2ghidra 项目
-
- git clone https://github.com/radareorg/r2ghidra.git
- cd r2ghidra
- sudo ./preconfigure
- sudo ./configure
- sudo make -j16
- sudo make install
gadget 搜索工具
ROPgdbget
安装:
git clone https://github.com/JonathanSalwan/ROPgadget.git
cd ROPgadget
sudo python3 setup.py install
使用:
ROPgadget --binary ntdll.dll > rop
ropper
安装:
- 在pypi 的 ropper 官网上下载 ropper
- 运行安装脚本完成 ropper 安装
-
- sudo python3 setup.py install
使用:
ropper --file ./pwn --nocolor > rop
one_gadget
用于搜索 libc 中能够实现 execve("/bin/sh", (char *[2]) {"/bin/sh", NULL}, NULL); 的效果
的跳转地址,由于是采用特征匹配的方法,因此只能是在 libc 中查找。
安装:
- sudo apt install -y ruby ruby-dev
- sudo gem install one_gadget
使用:可以查找到 gadget 地址以及条件限制。
➜ ~ one_gadget /lib/x86_64-linux-gnu/libc.so.6
0x50a37 posix_spawn(rsp+0x1c, "/bin/sh", 0, rbp, rsp+0x60, environ)
constraints:
rsp & 0xf == 0
rcx == NULL
rbp == NULL || (u16)[rbp] == NULL
0xebcf1 execve("/bin/sh", r10, [rbp-0x70])
constraints:
address rbp-0x78 is writable
[r10] == NULL || r10 == NULL
[[rbp-0x70]] == NULL || [rbp-0x70] == NULL
0xebcf5 execve("/bin/sh", r10, rdx)
constraints:
address rbp-0x78 is writable
[r10] == NULL || r10 == NULL
[rdx] == NULL || rdx == NULL
0xebcf8 execve("/bin/sh", rsi, rdx)
constraints:
address rbp-0x78 is writable
[rsi] == NULL || rsi == NULL
[rdx] == NULL || rdx == NULL
seccomp-tools
用于查看和生成程序沙箱规则。
安装: sudo gem install seccomp-tools
使用: seccomp-tools dump ./pwn
LibcSearcher
通过泄露的 libc 中函数的地址来确定 libc 版本
git clone https://github.com/lieanu/LibcSearcher.git
cd LibcSearcher
sudo python3 setup.py install
glibc-all-in-one
临时找 glibc 和 ld 或者编译 glibc
git clone https://github.com/matrix1001/glibc-all-in-one.git
更新下载列表:
➜ glibc-all-in-one ./update_list
[+] Common list has been save to "list"
[+] Old-release list has been save to "old_list"
➜ glibc-all-in-one cat list
2.23-0ubuntu10_amd64
2.23-0ubuntu10_i386
2.23-0ubuntu11_amd64
2.23-0ubuntu11_i386
2.23-0ubuntu3_amd64
2.23-0ubuntu3_i386
2.27-3ubuntu1_amd64
2.27-3ubuntu1_i386
2.28-0ubuntu1_amd64
2.28-0ubuntu1_i386
......
➜ glibc-all-in-one cat old_list
2.21-0ubuntu4.3_amd64
2.21-0ubuntu4.3_amd64
2.21-0ubuntu4_amd64
2.21-0ubuntu4_amd64
2.24-3ubuntu1_amd64
2.24-3ubuntu1_amd64
2.24-3ubuntu2.2_amd64
2.24-3ubuntu2.2_amd64
2.24-9ubuntu2.2_amd64
2.24-9ubuntu2.2_amd64
......
下载libc:
cat list |xargs -i ./download {}
cat old_list |xargs -i ./download_old {}
编译libc:
sudo ./build [版本例如2.29] [架构例如 i686 amd64]
patchelf
安装: sudo apt install patchelf
qemu
安装: sudo apt install qemu-user qemu-system
alpha3
安装: git clone https://github.com/TaQini/alpha3.git
from pwn import *
import os
context(arch='amd64', os='linux')
context.log_level = 'debug'
fp = open("shellcode", "wb+")
fp.write(asm(shellcraft.sh()))
fp.close()
shellcode = os.popen("python ./alpha3/ALPHA3.py x64 ascii mixedcase rax --
input=shellcode").read()
print shellcode
WSL
我们可以用wsl和vscode来完成我们的环境搭建.
- 首先我们需要在vscode下载wsl插件.
- 在wsl里输入code .
- 如果这一部报错,看报错信息记住他说要去哪个网址(https://update.code.visualstudio.comcommit:(根据报错填写)/server-linux-x64/stable)下载东西,我们挂上梯子,然后我们手动下载,之后放到~/.vscode-server/bin目录下,记得把其他文件删完.
- cd ~/.vscode-server/bin
- tar -zxf vscode-server-linux-x64.tar.gz
- mv vscode-server-linux-x64 ${id} # 注意把:${id}替换成对应的id
- 如果这一部报错,看报错信息记住他说要去哪个网址(https://update.code.visualstudio.comcommit:(根据报错填写)/server-linux-x64/stable)下载东西,我们挂上梯子,然后我们手动下载,之后放到~/.vscode-server/bin目录下,记得把其他文件删完.
- wsl里输入code .就能打开vscode了
LINUX安装应用
比如安装clion,我们下载了他的tar.tz包,解压之后它里面会有一个bin目录
bin里有个clion.sh(pycharm里面是pycharm.sh),这个就是启动脚本,
打开后创建桌面条目就行了