前言


本人之前一直使用pd虚拟机,因为apple silicon是arm架构的导致我在虚拟机中为了搭建环境废了不少心思,结果还是没弄好.

便尝试使用docker(其实昨年就知道docker在mac上有预览版了,而当时也没mac就关注了一下,没想到我在Stack Overflow上居然看到了解决办法)

为什么我会想用docker呢?

在Stack Overflow上关于/lib64/ld-linux-x86-64.so.2: No such file or directory error这个问题的答案中,

我看到了这样一条image-20211218192913322

我就突然想起用docker可以pull一个x86的ubuntu的镜像.只需加上参数—platform linux/amd64

pwn大佬看这:最终配置完成后gdb调试是无法进行的,猜测是docker基于qemu虚拟化的问题,以什么权限运行都无法进行gdb调试,只能说作为临时救急用

已知问题:

目前没法动调起来,所以我买了台x86的服务器.

问题参考:

https://github.com/docker/for-mac/issues/5191

https://stackoverflow.com/questions/68435791/warning-ptrace-function-not-implemented-during-startup-program-exited-with-cod

https://stackoverflow.com/questions/20590155/how-to-single-step-arm-assembly-in-gdb-on-qemu/28241508#28241508

本机配置


image-20211218193431944

下载并安装docker


(✔)Docker Desktop for Apple silicon (预览版)

(✘)Install Docker Desktop on Mac

docker的安装和普通软件一样拖入即可完成安装,

image-20211218200639178

在终端输入docker -v 就可以看到docker的版本了~

注意事项:

接下来打开程序Snipaste_2021-12-18_20-10-24点OKimage-20211218201128125输入密码后点安装

之后点同意接受.才算程序加载完成.

环境配置


pull镜像

这里我用的是ubuntu18.04基于x86的基础镜像,其中参数 --platform linux/amd64 必不可少

docker pull ubuntu:18.04 --platform linux/amd64

image-20211218201728110

启动容器

接下来用以下命令来配置虚拟机基础环境并运行

1
docker run -i -t -d --name=ubuntu-18.04 ubuntu:18.04 && docker exec -it ubuntu-18.04 /bin/bash

使用uname -a即可发现镜像正确运行在了x86架构上~

image-20211218202100797

ubuntu环境配置

首先进行换源操作.

更换apt源

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
apt-get update &&  cp /etc/apt/sources.list /etc/apt/sources.list.bak && \
apt-get install apt-transport-https ca-certificates -y && \
echo ' # 默认注释了源码镜像以提高 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 ' > /etc/apt/sources.list &&\
apt-get update

换源建议参考:https://blog.csdn.net/xiangxianghehe/article/details/80112149

更换pip源

1
2
3
apt-get install vim -y && \
mkdir ~/.pip && \
vim ~/.pip/pip.conf

然后在vim中粘入

1
2
3
4
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple/
[install]
trusted-host = pypi.tuna.tsinghua.edu.cn

:wq回车 (退出并保存)

顺便安装pwn工具

安装pwntools

1
2
apt-get install python2.7 python-pip python-dev git libssl-dev libffi-dev build-essential -y 
pip install pwntools

这个过程等待较久.只要在跑就没问题.

安装pwndbg

1
2
mkdir /software && cd /software && \
git clone https://github.com/pwndbg/pwndbg && cd pwndbg && ./setup.sh

如果出现这个情况(在运行git clone命令时很容易出现这个情况):image-20211218221532248

这就说明下载的包太大,网速慢超时报错.由于git默认缓存大小不足导致的,使用下面的命令增加缓存大小。

解决方案:
方案一(推荐):

image-20211218221956018将https换成git或http,其实应该去检查一下换源是否成功


方案二:

1、查看git 配置:

  • 查看当前配置命令: git config -l

2、httpBuffer加大

  • 输入命令: git config —global http.postBuffer 524288000
  • 此时我们再查看当前配置命令,发现http.postbuffer变成了524288000

3.修改配置文件

  • 输入命令: vim ~/.bashrc

  • 把以下三行命令添加到文件的最后:具体方法参考添加链接描述

​ export GIT_TRACE_PACKET=1
​ export GIT_TRACE=1
​ export GIT_CURL_VERBOSE=1

​ 保存退出


安装peda

1
2
git clone https://github.com/longld/peda.git ~/peda && \
echo "source ~/peda/peda.py" >> ~/.gdbinit

32位libc环境

1
apt install libc6-dev-i386 lib32z1 -y

打包容器

至此,基本环境搭建完毕,我们将容器进行打包,先退出容器,使用docker ps得到容器ID,然后使用commit命令进行打包
docker commit -m "18.04" <容器id> lanyun/ubuntu
之后我们启动容器的方法是

1
docker run -i -t --privileged -v /Users/lanyun/Downloads:/share  lanyun/ubuntu bash
~~注意,必须要使用 --privileged 参数否则我们无法调适,同时我们可以使用-v参数来挂在本地文件夹到容器中,实现共享,就不需要麻烦的进行复制操作来运行pwn文件了。~~ 目前使用何种参数设置都无法进行调试

设置文件共享

image-20211218221356711

之后直接进share目录里面就有我们共享的文件了

运行也正常(在之前arm架构下是无法运行的)image-20211218232139059


拓展

Docker - 实现本地镜像的导出、导入(export、import、save、load)