学逆向论坛

找回密码
立即注册

只需一步,快速开始

发新帖

2万

积分

41

好友

1171

主题
发表于 2020-8-4 19:47:38 | 查看: 8790| 回复: 1

相关题目:

Linux平台下的CTF Pwn环境搭建前言
最近遇到很多人想玩CTF,咨询环境问题。为了更好地将研究重心放在技术本身,这里简单整理一下个人的Pwn环境的搭建过程,仅供参考。
一、操作系统选择
因为是Pwn环境,涉及到Windows平台的比较少,所以一般使用Linux或者MacOS。我个人是一套Linux的虚拟环境搭配MacOS的物理环境,基本能适应所有的Pwn环境要求。

物理环境:MBP 2015
虚拟环境:Ubuntu 18.04

需要注意,Linux的版本太高很多插件容易出问题,所以不建议使用最新版本的Linux系统,最稳定的不是太老旧的就可以。此外,环境因人而异,没有模板,不是固定的,按需分配。
二、必备一般软件
  • vim:个人必备,强烈建议学习一点vim的相关知识,可以提高效率,避免安装过多的编辑器或者IDE
  • git:必备,很多高效的插件都是放在GitHub上的
  • python:必备,建议python3,毕竟python2已经不支持了
  • pip:必备,有一些插件需要使用pip进行安装
  • 一款编辑器:这个看个人需求,vscode、sublime text等,个人喜欢就好。如果有条件的话,可以设置一下配置,当作一个简单的开发IDE使用,毕竟Pwn环境中开发的代码不会很多。
以上各软件根据官方文档自行安装即可。
三、Pwn常用软件
涉及到的各种软件的安装,均以Ubuntu平台为例
  • pwntools
    一个ctf框架和漏洞利用开发库,用python开发,必备神器,作用不多解释。
    安装方法:
    1
    2
    3
    4
    $ apt-get install python python-pip python-dev libssl-dev libffi-dev build-essential
    $ pip install -U setuptools
    $ pip install --upgrade pip
    $ pip install --upgrade pwntools

    个人使用的是python2版本,需要注意一下。pwntools现在支持python3了,这里给出GitHub地址,有需要的可以参考其readme进行安装python3的pwntools。
    支持python3的pwntools
    安装完成后,打开python测试, 执行from pwn import *不会报错即可。
    (备注:在mac平台下不要使用pip安装,你会怀疑人生的,使用homebrew安装)
  • gdb
    动态调试软件,必备。
    安装方法:
    ```
    apt-get install gdb
  • peda/pwngdb/gef
    这是常见的gdb的三个插件,配合gdb使用可以提升调试效率。
    安装pwndbg:
    1
    2
    3
    4
    5
    git clone https://github.com/pwndbg/pwndbg

    cd pwndbg

    ./setup.sh

    安装peda:
    1
    2
    3
    git clone https://github.com/longld/peda.git~/peda

    echo "source ~/peda/peda.py" >> ~/.gdbinit

    安装gef:
    1
    2
    3
    wget -q -O- https://github.com/hugsy/gef/raw/master/scripts/gef.sh| sh
    wget -q -O ~/.gdbinit-gef.py https://github.com/hugsy/gef/raw/master/gef.py
    echo source ~/.gdbinit-gef.py >> ~/.gdbinit

    因为在同一时刻只能使用一种插件,而且在解决不同类型的题目时使用不同的插件,因此需要配置三种插件的快捷切换。
    首先,gdb使用哪种插件是在.gdbinit文件(一般在root目录下)中使用source进行控制的,我们可以在使用插件时注释掉其他的source命令,即可单独使用某一插件。但是每次都编辑该文件实在是麻烦,因此可以使用脚本进行选择。巧合之下,之前看到一位师傅写了个自动选择插件的脚本,很是好用。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    #!/bin/bash
    function Mode_change {
        name=$1
        gdbinitfile=~/.gdbinit    #这个路径按照你的实际情况修改
        # gdbinitfile=/root/Desktop/mode

        peda="source ~/peda/peda.py"   #这个路径按照你的实际情况修改
        gef="source ~/.gdbinit-gef.py"   #这个路径按照你的实际情况修改
        pwndbg="source /opt/pwndbg/gdbinit.py"   #这个路径按照你的实际情况修改

        sign=$(cat $gdbinitfile | grep -n "#this place is controled by user's shell")   
        #这是一个定位flag,此处上面的查找内容要和你自己的保持一致

        pattern=":#this place is controled by user's shell"
        number=${sign%$pattern}
        location=$[number+2]

        parameter_add=${location}i
        parameter_del=${location}d

        message="TEST"

        if [ $name -eq "1" ];then
            sed -i "$parameter_del" $gdbinitfile
            sed -i "$parameter_add $peda" $gdbinitfile
            echo -e "Please enjoy the peda!\n"
        elif [ $name -eq "2" ];then
            sed -i "$parameter_del" $gdbinitfile
            sed -i "$parameter_add $gef" $gdbinitfile
            echo -e "Please enjoy the gef!\n"
        else
            sed -i "$parameter_del" $gdbinitfile
            sed -i "$parameter_add $pwndbg" $gdbinitfile
            echo -e "Please enjoy the pwndbg!\n"
        fi
    }

    echo -e "Please choose one mode of GDB?\n1.peda    2.gef    3.pwndbg"

    read -p "Input your choice:" num

    if [ $num -eq "1" ];then
        Mode_change $num
    elif [ $num -eq "2" ];then
        Mode_change $num
    elif [ $num -eq "3" ];then
        Mode_change $num
    else
        echo -e "Error!\nPleasse input right number!"
    fi

    gdb $1 $2 $3 $4 $5 $6 $7 $8 $9

    现在我们把这个shell脚本放到一个环境变量指向的路径里面,查看一下自己的路径,shell脚本放进去。我放在了/usr/local/sbin目录下,这样就可以执行 gdb.sh,输入对应插件的数字就可以选择使用哪个插件,无需手动更改.gdbinit文件。
    实在不会可以参考这位师傅的教程:自动选择gdb插件
  • 32位程序支持
    必备,装它。
    1
    apt-get install libc6-dev-i386

  • qemu
    这是arm的pwn环境,前期可以不安装,但是终究是逃不过的,建议一步到位。
    安装qemu:
    1
    2
    3
    sudo apt-get install qemu

    sudo apt-get install qemu-system qemu-user-static binfmt-support

    安装依赖库:
    1
    2
    3
    sudo apt-get install -y gcc-arm-linux-gnueabi

    sudo apt-get install qemu libncurses5-dev gcc-arm-linux-gnueabi build-essential gdb-arm-none-eabi synaptic gcc-aarch64-linux-gnu eclipse-cdt git

  • LibcSearcher
    泄露libc库中函数的偏移的库,建议安装,可以节省时间,提高效率。
    安装LibcSearcher:
    1
    2
    3
    4
    sudo pip install capstone
    git clone https://github.com/lieanu/LibcSearcher.git
    cd LibcSearcher
    python setup.py develop

  • ROPgadget和one_gadget
    ROPgadget是用来找gadget的,one_gadget用来寻找libc库中的execve('/bin/sh', NULL, NULL)可以一个gadget就可以getshell,建议安装。
    安装ROPgadget:
    1
    2
    3
    4
    5
    # 先安装Capstone,它是一个轻量级的多平台架构支持的反汇编架构。
    sudo apt-get install python-capstone

    # 下载好ROPgadget解压,并进入文件夹中
    python setup.py install

    安装one_gadget:
    1
    2
    sudo apt install ruby
    gem install one_gadget

  • IDA
    静态调试必备,不多解释。这里建议安装52上的版本:
    52上的IDA

四、总结
整理这篇文章的目的是希望在玩Pwn的时候可以不用花太多时间在环境上,搭配好一套环境一直用就好了,根据具体情况再进行补充。还是那句话,重心还是要放在技术本身上。
温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的认可,还可以获得学币奖励,请尊重他人的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
论坛交流群:672619046

    发表于 2020-8-5 11:18:24
    资源很给力,请收下我的膝盖!

    小黑屋|手机版|站务邮箱|学逆向论坛 ( 粤ICP备2021023307号 )|网站地图

    GMT+8, 2024-12-22 23:13 , Processed in 0.254909 second(s), 44 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表