从零开始Ubuntu pwn环境

0x1 虚拟机安装

以经典款ubuntu18为例。

0x2 ubuntu换源

对于ubuntu18:
备份并编辑sources.list文件

cp /etc/apt/sources.list  /etc/apt/sources.list.bck  
gedit /etc/apt/sources.list  

以下是各镜像源sources.list的参考配置:(内容均来自官网,任选其一即可)
中科大镜像源:

# 默认注释了源码仓库,如有需要可自行取消注释
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse

清华镜像源

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse

阿里镜像源

deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse

# deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
# deb-src 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-backports main restricted universe multiverse

如要用于其他版本,把 bionic 换成其他版本代号即可: 22.04:jammy;20.04:focal;18.04:bionic;16.04:xenial;14.04:trusty
更改完 sources.list 文件后,运行 sudo apt-get update 更新索引以生效。

0x3 安装pwn基本组件

python-pwntools

python2.7环境下的pwntools:

sudo apt-get install python
sudo apt-get install python-pip
pip install pwntools -i https://pypi.tuna.tsinghua.edu.cn/simple

ROPgadget

一款好用的查找ROP代码段的小工具

sudo apt install git 
git clone https://github.com/JonathanSalwan/ROPgadget.git #r如果太慢的话,可以克隆到gitee仓库,再用git下载
cd ROPgadget
sudo python setup.py install

Or:
pip install ropgadget
ROPgadget

使用:

查找可存储寄存器的代码
ROPgadget --binary  [pro]  --only 'pop|ret' | grep 'eax'
ROPgadget --binary  [pro]  | grep 'rdi'
查找字符串
ROPgadget --binary rop --string "/bin/sh"
查找有int 0x80的地址
ROPgadget --binary rop  --only 'int'

one_gadget

用来查找大型可执行文件里面是否可以有直接获得shell的代码段
安装:

git clone https://github.com/david942j/one_gadget.git
sudo apt-get install ruby
sudo gem install one_gadget

使用:

one_gadget libc.xxx.so

gdb插件

peda/pwndbg: 可以让gdb变得更强。

#创建文件夹
mkdir ~/gdbtools
cd ~/gdbtools

#peda:
cd ~/gdbtools
git clone https://github.com/longld/peda.git
echo "source ~/gdbtools/peda/peda.py" >> ~/.gdbinit

#pwndbg
cd ~/gdbtools
git clone https://github.com/pwndbg/pwndbg.git
cd pwndbg
./setup.sh

#gef
#下载 `gef.sh` 并执行
cd ~/gdbtools
wget -q -O- https://github.com/hugsy/gef/raw/master/gef.sh | sh
# 下载 `gef.py`, 并将其 `source` 写入 `.gdbinit`
wget -q -O ~/gdbtools/.gdbinit-gef.py https://github.com/hugsy/gef/raw/master/gef.py
echo source ~/gdbtools/.gdbinit-gef.py >> ~/.gdbinit

gdb相关指令

显示命令:

x/Ni (N是显示数量,i指的是在此反汇编)

gdb更改内存值:

# set 一次设置4字节
set $rsp=0x123
set *0x7fff58b531c0=0x123

控制程序流:
使用call/jump
1.jump命令
一般来说,被调试程序会按照程序代码的运行顺序依次执行,但是GDB也可以修改程序的执行顺序,从而让程序随意跳跃。这个功能可以由GDB的jump命令:jump 来指定下一条语句的运行点。 注意,jump命令不会改变当前的程序栈中的内容,所以,如果使用jump从一个函数跳转到另一个函数,当跳转到的函数运行完返回,进行出栈操作时必然会发生错误,这可能导致意想不到的结果,所以最好只用jump在同一个函数中进行跳转。
2.return命令
如果在函数中设置了调试断点,在断点后还有语句没有执行完,这时候我们可以使用return命令强制函数忽略还没有执行的语句并返回。
return命令用于取消当前函数的执行,并立即返回,如果return后面指定了表达式,那么该表达式的值会被作为函数的返回值。
3.call命令call命令用于强制调用某函数,它会显示函数的返回值(如果函数返回值不是void)。

call (void)main()+0x123

4.disassemble命令
disassemble用于反汇编,它可被用来查看当前执行时的源代码的机器码,其实际上只是把目前内存中的指令dump出来

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容