WSL中配置Ubuntu(PWN)环境
城南花已开 Lv5

WSL环境配置(一)

Ubuntu -22.04.6 LTS

更新包、安装Vim

1
2
3
4
#更新软件源
udo apt update && sudo apt upgrade -y
#安装Vim
sudo apt install vim

安装PWN必要环境

写入脚本文件sh中,给权限777 chmod 777 xx.sh,运行后途中一直yes,按Y回车即可

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
53
54
55
56
57
58
59
60
61
#!/bin/bash
cd ~
sudo apt install tzdata
sudo apt install vim
sudo apt install libxml2-dev
sudo apt install libxslt-dev
sudo apt install libmysqlclient-dev
sudo apt install libsqlite3-dev
sudo apt install zlib1g-dev
sudo apt install python2-dev
sudo apt install python3-pip
sudo apt install libffi-dev
sudo apt install libssl-dev
sudo apt install wget
sudo apt install curl
sudo apt install gcc
sudo apt install clang
sudo apt install make
sudo apt install zip
sudo apt install build-essential
sudo apt install libncursesw5-dev libgdbm-dev libc6-dev
sudo apt install tk-dev
sudo apt install openssl
sudo apt install virtualenv
sudo apt install git
sudo apt install proxychains4
sudo apt install ruby-dev

#setuptools 36.6.1 -> python2
wget https://mirrors.aliyun.com/pypi/packages/56/a0/4dfcc515b1b993286a64b9ab62562f09e6ed2d09288909aee1efdb9dde16/setuptools-36.6.1.zip
unzip setuptools-36.6.1.zip
cd setuptools-36.6.1
sudo python2 setup.py install
cd ../
sudo rm -rf setuptools-36.6.1 setuptools-36.6.1.zip

#setuptools 65.4.1 -> python3
wget https://mirrors.aliyun.com/pypi/packages/03/c9/7b050ea4cc4144d0328f15e0b43c839e759c6c639370a3b932ecf4c6358f/setuptools-65.4.1.tar.gz
tar -zxvf setuptools-65.4.1.tar.gz
cd setuptools-65.4.1
sudo python3 setup.py install
cd ../
sudo rm -rf setuptools-65.4.1 setuptools-65.4.1.tar.gz

#pip
wget https://mirrors.aliyun.com/pypi/packages/53/7f/55721ad0501a9076dbc354cc8c63ffc2d6f1ef360f49ad0fbcce19d68538/pip-20.3.4.tar.gz
tar -zxvf pip-20.3.4.tar.gz
cd pip-20.3.4
sudo python2 setup.py install
sudo python3 setup.py install
cd ../
sudo rm -rf pip-20.3.4 pip-20.3.4.tar.gz

sudo pip2 config set global.index-url https://mirrors.aliyun.com/pypi/simple
sudo pip3 config set global.index-url https://mirrors.aliyun.com/pypi/simple

sudo python2 -m pip install --upgrade pip
sudo python3 -m pip install --upgrade pip

pip3 install --upgrade pip
sudo pip2 install pathlib2

配置Pwn环境

安装PwnTools

1
2
sudo python2 -m pip install --upgrade pwntools
sudo python3 -m pip install --upgrade pwntools

pwndbg+Pwngdb

这里我直接去github下载运行setup.sh会报错要求升级python3,所以直接把原来虚拟机里的打包复制过来了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
wget https://starrysky1004.github.io/pwnenv.zip
unzip pwnenv.zip
rm pwnenv.zip

#pwndbg
cd pwndbg
./setup.sh

#Pwngdb
cd ~/
cp ~/Pwngdb/.gdbinit ~/

vim ~/.gdbinit
#注释掉第一行 然后在第二行写入
source ~/pwndbg/gdbinit.py

patchelf

1
sudo apt install patchelf

glibc-all-in-one

1
2
3
4
5
6
#glibc-all-in-one
git clone https://github.com/matrix1001/glibc-all-in-one.git
cd glibc-all-in-one
python3 update_list
cat list
./download xxxxx

ropper

1
sudo pip3 install capstone filebytes unicorn keystone-engine ropper

qemu-system

1
sudo apt-get install qemu-system

Ropgadget

1
sudo -H python3 -m pip install ROPgadget

one_gadget、seccomp-tools

1
2
sudo gem install one_gadget
sudo gem install seccomp-tools

配置Docker环境

使用 APT 安装

由于 apt 源使用 HTTPS 以确保软件下载过程中不被篡改。因此,我们首先需要添加使用 HTTPS 传输的软件包以及 CA 证书。

1
2
3
4
5
6
7
8
$ sudo apt update

$ sudo apt install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release

鉴于国内网络问题,强烈建议使用国内源,官方源请在注释中查看。

为了确认所下载软件包的合法性,需要添加软件源的 GPG 密钥。

1
2
3
4
5
$ curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg


# 官方源
# $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

然后,我们需要向 sources.list 中添加 Docker 软件源

1
2
3
4
5
6
7
8
9
$ echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null


# 官方源
# $ echo \
# "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
# $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

安装 Docker

更新 apt 软件包缓存,并安装 docker-ce

1
2
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io

启动 Docker

1
2
$ sudo systemctl enable docker
$ sudo systemctl start docker

建立 docker 用户组

默认情况下,docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。因此,更好地做法是将需要使用 docker 的用户加入 docker 用户组。

建立 docker 组:

1
$ sudo groupadd docker

将当前用户加入 docker 组:

1
$ sudo usermod -aG docker $USER

退出当前终端并重新登录,进行如下测试。

测试 Docker 是否安装正确

1
2
3
4
$ docker run --rm hello-world
Unable to find image 'hello-world:latest' locally
docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers).
See 'docker run --help'.

在进行到这一步测试的时候始终显示连接超时,可是我的WSL的网络模式是镜像Mirror的,我在宿主机上开启了代理,镜像网络也自动代理了,当我curl www.google.com都是可以成功的,这里显然不是代理的问题了,我尝试在etc/docker/daemon.json使用 Registry Mirrors配置镜像仓库,结果也是超时

经过网上查询我又尝试了官方文档上的守护进程代理配置

  1. docker服务创建一个 systemd 放置目录

  2. sudo mkdir -p /etc/systemd/system/docker.service.d
    
    1
    2
    3
    4
    5
    6
    7
    8

    3. 创建一个名为 `/etc/systemd/system/docker.service.d/http-proxy.conf` 添加`HTTP_PROXY`环境变量:

    4. ```bash
    [Service]
    Environment="HTTP_PROXY=socks5://127.0.0.1:7890" ##这里使用127.0.0.1是因为我WSL设置Mirror网络
    Environment="HTTPS_Proxy=socks5://127.0.0.1:7890"
    Environment="NO_PROXY=localhost,127.0.0.1"
  3. 刷新更改并重新启动 Docker

  4. $ sudo systemctl daemon-reload
    $ sudo systemctl restart docker
    
    1
    2
    3
    4
    5
    6

    7. 验证配置是否已加载并与您所做的更改相匹配

    8. ```bash
    $ sudo systemctl show --property=Environment docker
    Environment=HTTP_PROXY=socks5://127.0.0.1:7890 HTTPS_PROXY=socks5://127.0.0.1:7890 NO_PROXY=localhost,127.0.0.1
    > [守护进程代理配置 | Docker 文档 --- Daemon proxy configuration | Docker Docs](https://docs.docker.com/engine/daemon/proxy/)

尝试无果,我在搜寻WSL下的Docker的坑后找到了,一篇文章

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
无法在 Windows 使用 localhost 本地回环地址 127.0.0.1 访问运行在容器内的服务
# 目前有三种解决方案:
1) 针对使用 Docker Desktop for Windows 用户(使用以下三种解决方法其一):
① 配置 ignoredPorts 端口(不推荐,这方法太 ugly 了)
② 请使用 Docker v27.3.0+ or latter 的版本(推荐)
# 其实不推荐使用 Docker Desktop for Windows,因为它一启动就会预留(占用)比较多的内存

2) 针对在 WSL2 内 Linux 发行版直接运行 Docker-CE Daemon 服务的用户(根据情况不同,使用以下两种解决方法其一):
① 针对使用 Systemd 的用户,可以使用此仓库提供的服务管理脚本
https://gist.github.com/shigenobuokamoto/b565d468541fc8be7d7d76a0434496a0

② 针对 OpenRC 用户(或不喜欢引入第三方资源的),暂时通过关闭 Docker 的 iptables 模块支持
# 缺点是会丧失容器的网络隔离性(记得重启 dockerd,必要时可能需要重建容器化服务甚至是重启 WSL2 子系统)
# /etc/docker/daemon.json
{
"iptables": false
}

3) 自适应法:在宿主 Windows 访问 WSL 内 Docker 容器化服务时,使用 LAN IP 而不使用 localhost

我在使用第二个方案就可以成功Pull仓库上的镜像了,方法如下

创建一个名为 /etc/systemd/system/network-mirrored.service的文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[Unit]
Wants=network-pre.target
Before=network-pre.target shutdown.target

[Service]
User=root
ExecStart=/bin/sh -ec '\
[ -x /usr/bin/wslinfo ] && [ "$(/usr/bin/wslinfo --networking-mode)" = "mirrored" ] || exit 0;\
echo "\
add chain ip nat WSLPREROUTING { type nat hook prerouting priority dstnat - 1; policy accept; };\
insert rule ip nat WSLPREROUTING iif loopback0 ip daddr 127.0.0.1 counter dnat to 127.0.0.1 comment mirrored;\
"|nft -f -\
'
ExecStop=/bin/sh -ec '\
[ -x /usr/bin/wslinfo ] && [ "$(/usr/bin/wslinfo --networking-mode)" = "mirrored" ] || exit 0;\
for chain in "ip nat WSLPREROUTING";\
do\
handle=$(nft -a list chain $chain | sed -En "s/^.*comment \\"mirrored\\" # handle ([0-9]+)$/\\1/p");\
for n in $handle; do echo "delete rule $chain handle $n"; done;\
done|nft -f -\
'
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target

执行以下命令

1
2
pwn@primary:~$  sudo systemctl --now enable network-mirrored
Created symlink /etc/systemd/system/multi-user.target.wants/network-mirrored.service → /etc/systemd/system/network-mirrored.service.

尝试Pull一下Nginx

1
2
pwn@primary:~$ docker run -d -it -p 80:80 nginx
4a63ed4f75437b3603cb8099b02907beaa956ce45a3a948798e0de6a89782354

访问127.0.0.1即可

Zsh 安装与配置

安装Oh-My-Zsh 美化终端

安装基本配置

1
2
3
4
# 更新软件源
sudo apt update && sudo apt upgrade -y
# 安装 zsh git curl
sudo apt install zsh git curl -y

设置默认终端ShellZSH

1
chsh -s /bin/zsh

安装oh-my-zsh

官网:http://ohmyz.sh/。 安装方式任选一个即可。

curl sh -c "$(curl -fsSL https://install.ohmyz.sh/)"
wget sh -c "$(wget -O- https://install.ohmyz.sh/)"
fetch sh -c "$(fetch -o - https://install.ohmyz.sh/)"
国内curl镜像 sh -c "$(curl -fsSL https://gitee.com/pocmon/ohmyzsh/raw/master/tools/install.sh)"
国内wget镜像 sh -c "$(wget -O- https://gitee.com/pocmon/ohmyzsh/raw/master/tools/install.sh)"

配置主题

这里我使用powerlevel10k,自定义程度比较高,美化也比较好看

1
2
3
4
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

# 中国用户可以使用 gitee.com 上的官方镜像加速下载
git clone --depth=1 https://gitee.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

~/.zshrc 设置 ZSH_THEME="powerlevel10k/powerlevel10k"。执行source .zshrc,接下来,终端会自动引导你配置 powerlevel10k

安装插件

oh-my-zsh 已经内置了 git 插件,内置插件可以在 ~/.oh-my-zsh/plugins 中查看,更多插件可以在 awesome-zsh-plugins 里查看。

zsh -autosuggestions

zsh-autosuggestions 是一个命令提示插件,当你输入命令时,会自动推测你可能需要输入的命令,按下右键可以快速采用建议。

安装方式:把插件下载到本地的 ~/.oh-my-zsh/custom/plugins 目录。

1
2
3
4
5
6
7
8
9
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

# 中国用户可以使用下面任意一个加速下载
# 加速1
git clone https://github.moeyy.xyz/https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
# 加速2
git clone https://gh.xmly.dev/https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
# 加速3
git clone https://gh.api.99988866.xyz/https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

zsh-syntax-highlighting

zsh-syntax-highlighting 是一个命令语法校验插件,在输入命令的过程中,若指令不合法,则指令显示为红色,若指令合法就会显示为绿色。高亮显示

1
2
3
4
5
6
7
8
9
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

# 中国用户可以使用下面任意一个加速下载
# 加速1
git clone https://github.moeyy.xyz/https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
# 加速2
git clone https://gh.xmly.dev/https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
# 加速3
git clone https://gh.api.99988866.xyz/https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

z

oh-my-zsh 内置了 z 插件。z 是一个文件夹快捷跳转插件,对于曾经跳转过的目录,只需要输入最终目标文件夹名称,就可以快速跳转,避免再输入长串路径,提高切换文件夹的效率。

extract

oh-my-zsh 内置了 extract 插件。extract 用于解压任何压缩文件,不必根据压缩文件的后缀名来记忆压缩软件。使用 x 命令即可解压文件

sudo

oh-my-zsh内置了sudo插件。假设你输入了一个很长的命令并且忘记在前面添加sudo,通过按 esc 键两次,您将获得带有sudo前缀的相同命令,而无需键入

启用插件

将上面安装的插件在zsh中生效

修改~/.zshrc文件中的plugins

1
plugins=(git zsh-autosuggestions zsh-syntax-highlighting z extract sudo)

注意插件直接以空格为分隔,不要用逗号

开启新的 Shell 或执行 source ~/.zshrc,就可以开始体验插件。

Root用户

当你配置好登陆用户的 zsh 后,如果使用sudo su命令进入root用户的终端,发现还是默认的bash。建议在root用户的终端下,也安装on my zsh,设置与普通用户不同的主题以便区分,插件可以使用一样的。

引用:Ubuntu | Docker — 从入门到实践

WSLg/WSL2 网络配置,终极解决方案 - 镜像网络 - STARGAZER

pwn环境配置 | StarrySky

Zsh 安装与配置,使用 Oh-My-Zsh 美化终端 | Leehow的小站

由 Hexo 驱动 & 主题 Keep
本站由 提供部署服务
总字数 258.9k