zoukankan      html  css  js  c++  java
  • pwn 环境搭建(wsl/vmware)

    前言

    工欲善其事,必先利其器。搭建一个良好的 pwn 环境能使 pwn 学习事半功倍。本篇文章介绍下使用 wsl2 搭建 pwn 环境的过程,使用 vmware 搭建 linux pwn 环境过程也是类似的,本文可以供作参考。

    windows 下的工具

    wsl2

    wsl 全称 Windows Subsystem for Linux。但是 wsl 与传统虚拟机相比,没有虚拟硬件的过程,而是在 windows 上虚拟一个 linux 内核,模拟 linux 调用。它的底层实现还是 windows ,所以只能用作轻量开发,很多 linux 的功能不能实现。而 wsl2 是使用最新、最强大的虚拟化技术在轻量级实用工具虚拟机 (VM) 中运行 Linux 内核,是跑在虚拟机中的完整 linux ,基本实现了 linux 的功能,并且可以兼容 docker 以及 vmware 。相比于 vmware 虚拟机 ,wsl 能够快速启动以及有着与 windows 良好的交互体验,所以萌生了使用 wsl2 搭建 pwn 环境的想法。
    本文搭建的是 ubuntu16 ,因我原来 vmware 使用的就是 ub16 ,以及其兼容性较好。不过 ub16 现已经停止维护,所以可以考虑更新的版本。
    wsl2-官方手册

    Windows Terminal

    windows 终端功能十分丰富,这里就不过多介绍了。我使用它的主要目的是为了美化终端,毕竟好看就是生产力。
    效果如下图:

    vscode

    vscode 有 remote wsl 插件,可以很方便在 wsl 上使用。 vscode 我就主要用来在 linux 上写写 python 脚本,写项目的话还是推荐 visual studio 跟 Jetbrains 全家桶这类 IDE。
    安装 remote wsl 插件后,在 wsl2 中键入 code .,即可打开 vscode 。

    IDA Pro

    IDA Pro 就不用过多介绍了,二进制玩家人手必备的反编译利器。
    原来的白底看久了太刺眼,推荐一个 ida 配色插件。
    IDASkins-github
    效果如下:

    docker

    docker 可以很方便的构建容器,可以理解为一个非常轻量级的虚拟机。
    我使用的是 docker-desktop ,在 设置->Resources->WSL INTEGRATION 勾选对应的 Ubantu 版本即可在 wsl2 中使用 docker 。
    docker-desktop

    linux ubuntu16 配置

    32位环境

    wsl2 的默认是 64 位环境,并不兼容 32 位,所以要先配置 32 位环境。

    sudo dpkg --add-architecture i386
    sudo apt-get update
    // install build tools
    sudo apt install build-essential
    sudo apt install gcc-multilib
    

    pwntools

    Pwntools 是 CTF 框架和开发库。它以 Python 编写,专为快速原型设计和开发而设计,旨在使漏洞利用编写尽可能简单。
    pwntools-github

    python2

    sudo apt-get install python2.7 python-pip python-dev git libssl-dev libffi-dev build-essential
    sudo pip install --upgrade pip
    sudo pip install --upgrade pwntools
    sudo apt-get install python-dev
    

    python3

    sudo apt-get update
    sudo apt-get install python3 python3-pip python3-dev git libssl-dev libffi-dev build-essential
    sudo python3 -m pip install --upgrade pip
    sudo python3 -m pip install --upgrade pwntools
    

    以上命令安装 pwntools 同时也配置了 pwntools 所需的 python 环境,安装完成后我们可以使用 asm 测试一下是否成功。

    pwndbg

    pwndbg 是一个 GDB 插件,它使使用 GDB 进行调试的工作量减少了,并将重点放在低级软件开发人员,硬件黑客,逆向工程人员和利用开发人员所需的功能上。
    pwndbg-github

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

    当然常用的功能类似的插件还有gdbpeda-github,两个插件我都有使用过,命令和功能都差不多,现在我更倾向于使用 pwndbg 。需要注意是这两个插件不能同时在 gdb 中兼容,可以通过编辑 .gdbinit 文件来切换插件。

    pwngdb

    也是 GDB 的插件,提供许多命令,能够使你在动态调试的过程中更好查看内存的各种信息。
    pwngdb-github

    cd ~/
    git clone https://github.com/scwuaptx/Pwngdb.git 
    cp ~/Pwngdb/.gdbinit ~/
    

    .gdbinit 配置文件如下:

    source /home/pwnki/pwndbg/gdbinit.py 
    #source ~/peda/peda.py //使用 pwndbg 就要把 peda 注释掉,反过来也一样
    source ~/Pwngdb/pwngdb.py
    source ~/Pwngdb/angelheap/gdbinit.py
    
    define hook-run
    python
    import angelheap
    angelheap.init_angelheap()
    end
    end
    

    glibc-all-in-one

    可以下载各个版本带有 debug 文件的 glibc ,方便不同 glibc 下的本地调试。
    glibc-all-in-one_github

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

    里面提供了下载脚本,具体使用请参考官方手册。

    pwn_debug

    提供在本机中调试代码在不同 glibc 环境下的功能。ubantu16 对应的 glibc 2.23 ,ubantu18 对应的 glibc 2.27 ,以及更高版的 ubantu 对应 glibc 2.30 、glibc 2.31 等等。不同的 glibc 的源码不同,漏洞不同,也就导致 getshell 的方法不尽相同,所以多个 glibc 环境是刚需。而 pwn_debug 使得我们不需要配置多个 ubantu ,只需要一个 ubantu ,配合上 glibc-all-in-one 里下载个各种带编译符号的 glibc ,就能调试 多个 glibc 环境的代码,非常实用。当然这不是唯一的解决方案,patchelf 等也能解决这一问题。
    pwn_debug-github

    git clone https://github.com/ray-cp/pwn_debug.git
    cd pwn_debug
    sudo python setup.py install 
    

    如何切换 glibc 环境,请参考官方手册。

    seccomp-tools

    这个工具主要用来分析 seccomp 沙盒题的,能够查询程序禁用哪些系统调用。
    seccomp-tools 需要 ruby 环境,一开始用 rvm 装 ruby 老是遇到版本问题,后来直接卸载了 rvm 上ruby官网下载源码自己编译安装,成功解决问题。
    ruby 安装

    tar -zxvf ruby-3.0.0.tar
    cd ruby-3.0.0
    sudo ./configure
    sudo make
    sudo make install
    

    seccomp-tools_github

    sudo gem install seccomp-tools
    

    one_gadget

    one_gadget 工具主要用来找 libc 中的 shellcode 地址。将返回地址置为这个 shellcode 地址,或者覆盖堆机制中的指针为 shellcode 地址并引用指针,就可以 getshell 。
    one_gadget-github

    sudo gem install one_gadget
    

    LibcSearcher

    用于搜索 libc 的偏移。每个 pwn 题的远程环境是不一样的, libc 也就不一样,当我们泄露了 libc 地址后,通过 LibcSearcher 就能获得这个 libc 中函数的偏移。
    LibcSearcher-github

    git clone https://github.com/lieanu/LibcSearcher.git
    cd LibcSearcher
    sudo python setup.py develop
    

    ctf_xinetd

    这个工具使用 docker 来部署 pwn 环境。可以用来搭建 pwn 题。
    ctf_xinetd-github

    git clone https://github.com/Eadom/ctf_xinetd.git
    
  • 相关阅读:
    个人技术总结——Flask-Admin扩展
    个人作业——软件工程实践总结&个人技术博客
    个人作业——软件评测
    结对第二次作业——某次疫情统计可视化的实现
    结对第一次—疫情统计可视化(原型设计)
    软工实践寒假作业(2/2)
    软工实践寒假作业(1/2)
    计算与软件工程 作业五
    计算与软件工程 作业四
    计算与软件工程 作业三
  • 原文地址:https://www.cnblogs.com/luoleqi/p/14165817.html
Copyright © 2011-2022 走看看