前言

安装软件或 git 仓库到本地时,建议在路径 /opt 下安装或存放,养成文件管理的习惯

另外,apt 安装时建议使用新的 sudo apt install xxx 代替旧的 sudo apt-get install xxx

使用 pip 安装库时,pip install xxxsudo pip install xxx 安装的库路径不一样,例如:

  • sudo pip install xxx 安装路径:/usr/local/lib/python3.10/dist-packages/
  • pip install xxx 安装路径:/home/wyy/.local/lib/python3.10/site-packages/

尽量不要使用 sudo pip install 来安装 python 库


如果搭建 Ubuntu 16.04 这种旧版本的环境,请移步本站:《Ubuntu16.04虚拟机环境搭建》一文


以下所有的安装都基于 Ubuntu 22.04 和 Kali 2022.4 虚拟机进行了测试,其他版本的 Ubuntu 和 Kali 虚拟机应该也大同小异,但是版本比较旧的系统可能差异会比较大,需要自己斟酌一下

不算 tips 的小 tips:

  1. VM 虚拟机挂起后再保存快照可以秒存,但开机运行状态保存快照相当慢(开机运行状态保存快照中途是可以继续操作虚拟机的,不影快照的保存)
  2. 如果发现在虚拟机中,鼠标的额外功能键无法使用,比如:前进、后退等
    在虚拟机文件夹下,有一个 xxx.vmx 的文件,在虚拟机关闭的条件下,使用记事本打开,在文件的最后添加如下内容,重新开启虚拟机,即可使用鼠标的额外功能键
    mouse.vusb.enable = "TRUE"  
    mouse.vusb.useBasicMouse = "FALSE"  
    usb.generic.allowHID = "TRUE"
  3. 如果遇到终端的光标消失的问题(我在分屏 GDB 调试时经常遇到其中一个终端不显示光标),使用如下命令解决:
    echo -e "\033[?25h" # 显示光标  
    echo -e "\033[?25l" # 隐藏光标

VMtools

为了避免麻烦,建议直接使用开源的 Open VM Tools 替代 VMware 官方的 VMware Tools
Open VM Tools 比较新,几乎不存在冲突,且安装相当方便

像 Ubuntu16.04 这种旧版本还是建议使用 VMware 官方的 VMware Tools

安装和卸载 VMware Tools

如果你已经安装了 VMware Tools,可以输入如下命令卸载

# 安装,将VMtools解压到一个目录下,例如主目录
cd ~/vmware-tools-distrib
sudo ./vmware-install.pl

# 卸载
sudo vmware-uninstall-tools.pl

安装 Open VM Tools

安装 VMware Tools 经常会出现兼容性不好,系统之间复制文件失灵等问题,建议安装 Open VM Tools

# 更新系统软件包
sudo apt update
sudo apt upgrade

# 安装 Open VM Tools
sudo apt install open-vm-tools-desktop

# 如果要卸载 Open VM Tools,或者想换回 VMware Tools 之前需要先卸载这个
sudo apt-get autoremove open-vm-tools --purge

更换镜像源

Linux 自带的源来自国外,有时候下载速度感人,十分难受,建议换成清华镜像

其他版本可查询清华镜像源官网:
ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
kali | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

Ubuntu 22.04

注意看好版本,这是 22.04 版的 Ubuntu,其他版本在 sources.list 下加入的内容可能会不一样

cd /etc/apt # 进入 apt 目录下
sudo cp sources.list sources.list.backup # 备份
sudo vim sources.list # 编辑 sources.list 文件

# 加入下面两个----之间的内容
-----------------------------------------------------------------
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse

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

 # 刷新三连
sudo apt update
sudo apt upgrade
sudo apt clean

中科大源:

# 加入下面两个----之间的内容
-----------------------------------------------------------------
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
-----------------------------------------------------------------

阿里源:

# 加入下面两个----之间的内容
-----------------------------------------------------------------
deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
-----------------------------------------------------------------

注意:

Ubuntu 24.04 将以前的配置文件 /etc/apt/sources.list 改成了 /etc/apt/sources.list.d/ubuntu.sources

Linux虚拟机CTF环境搭建31.png

只需要将原来的 URL 链接改成对应的镜像源链接即可,我这里是清华源:

Linux虚拟机CTF环境搭建32.png

镜像源链接参考:ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

其他可用镜像源链接参考:Ubuntu 24.04 抢先体验换国内源 清华源 阿里源 中科大源 163源_ubuntu24.04-CSDN博客


Kali 2022.4

注意看好版本,这是 2022.4 版的 Kali,其他版本在 sources.list 下加入的内容可能会不一样

cd /etc/apt # 进入apt目录下
sudo cp sources.list sources.list.backup # 备份
sudo vim sources.list # 编辑sources.list文件

# 加入下面两个----之间的内容
-----------------------------------------------------------------
deb http://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free 
deb-src https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free
-----------------------------------------------------------------

# 刷新三联
sudo apt update
sudo apt upgrade
sudo apt clean

如果出现报错:

E: 无法下载 http://mirrors.tuna.tsinghua.edu.cn/kali/dists/kali-rolling/main/Contents-amd64.gz  文件尺寸不符(45560927 != 45558390)。您使用的镜像正在同步中? [IP: 101.6.15.130 80]
   Hashes of expected file:
    - Filesize:45558390 [weak]
    - SHA256:fd332c3ab98b5e98ac397a567a05bdd915101ce3ef1e86f05290b992301ba85a
    - SHA1:7a6efb0f8eecb97ef9ef3a040ff4c200a00174e7 [weak]
    - MD5Sum:8ee1329ae53741a9cf3d51ffb83c92c9 [weak]
   Release file created at: Tue, 10 Oct 2023 00:06:42 +0000
E: 部分索引文件下载失败。如果忽略它们,那将转而使用旧的索引文件。

这是镜像源的问题

可以将清华源换为中科大源:

# 加入下面两个----之间的内容
-----------------------------------------------------------------
deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
-----------------------------------------------------------------

或者阿里源:

# 加入下面两个----之间的内容
-----------------------------------------------------------------
deb http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
-----------------------------------------------------------------

Python 配置

安装 python

系统有自带 python,但是可以自己换成更新的版本

sudo apt install python3.10  # 以 python 3.10 为例,格式为 pythonx.x

设置默认 python 版本

终端输入 python 默认识别为 python3,两种方式选其一即可

  • 通过软链接修改
# 若显示 rm: 无法删除 '/usr/bin/python': 没有那个文件或目录,则直接执行下面那一句
sudo rm /usr/bin/python

# 例如我修改为python3.10
sudo ln -s /usr/bin/python3.10 /usr/bin/python
  • 通过更改 .bashrc 修改
# 例如我修改为python3.10
echo alias python=python3.10 >> ~/.bashrc
source ~/.bashrc

安装 pip

主要安装 python3 的 pip

sudo apt install python3-pip

更新 pip 版本:

pip3 install --upgrade pip

注意:

Ubuntu 24.04、Kali 2024.1 中使用 pip 安装库或者更新 pip 的时候可能会报错:

error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try apt install  
python3-xyz, where xyz is the package you are trying to  
install.

其实这不是 bug,而是 Ubuntu 为了避免冲突而加入的

简单粗暴的方式,直接屏蔽掉即可:

sudo mv /usr/lib/python3.12/EXTERNALLY-MANAGED /usr/lib/python3.12/EXTERNALLY-MANAGED.backup

具体报错原因和其他解决方法的详细说明请参考文章:pip(3) install,完美解决 externally-managed-environment - 耀龙笔记


设置默认 pip 版本

终端输入 pip 默认识别为 pip3

# 若显示 rm: 无法删除 '/usr/bin/pip': 没有那个文件或目录,则直接执行下面那一句
sudo rm /usr/bin/pip

# 例如我修改为pip3
sudo ln -s /usr/bin/pip3 /usr/bin/pip

更换 pip 源

更换完下载源,该更换 pip 源了,在 Windows 下用 pip 安装过 python 库的都懂,这玩意不换没法用啊

查看当前 pip 源配置:

pip config list
  • 在命令行直接更改,打开终端:
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

如果配置成功,每次使用 pip install xxx 时,会显示:"Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple",且下载速度很快

  • 否则的话,说明配置未成功,尝试下面的方法手动配置:
sudo mkdir ~/.config/pip && cd ~/.config/pip                   # 新建 pip 文件夹,进入 pip 文件夹            
sudo vim pip.conf                                 # 新建并编辑 pip.conf


# 加入下面两个----之间的内容
-----------------------------------------------------------------
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
timeout = 6000

[install]
trusted-host = pypi.tuna.tsinghua.edu.cn
disable-pip-version-check = true
-----------------------------------------------------------------

中科大:https://pypi.mirrors.ustc.edu.cn/simple
阿里:http://mirrors.aliyun.com/pypi/simple


迁移 pip 库

如果想更换 Python 版本,可以直接将以前的 pip 库迁移到新的 python 环境下

# 生成 requirements.txt 文件  
pip freeze > requirements.txt

# 在新环境下,安装 requirements.txt 依赖  
pip install -r requirements.txt

为防止 python 版本造成的 pip 库不兼容,使用以下脚本去掉 requirements.txt 中的版本号:

def remove_versions(input_file, output_file):
    with open(input_file, 'r') as file:
        lines = file.readlines()
    
    with open(output_file, 'w') as file:
        for line in lines:
            # 去掉行末的换行符
            line = line.strip()
            # 如果存在 '==', 则使用 '==' 进行分割,否则保留原样
            if '==' in line:
                package_name = line.split('==')[0]
            else:
                package_name = line
            file.write(package_name + '\n')

# 使用示例
input_file = './requirements.txt'  # 输入文件名
output_file = './requirements_no_version.txt'  # 输出文件名

remove_versions(input_file, output_file)

然后执行:

pip install -r requirements_no_version.txt

这样默认安装的就是支持当前 python 环境的最新版本 pip 库了


Java 配置

open-jdkoracle-jdk 选其一即可,oracle-jdk 相对来说更稳定一点

安装 open-jdk

查找 open-jdk 版本:

sudo apt search openjdk

以安装 open-jdk 11 为例:

# 安装 java11
# 若要安装 java8:sudo apt install openjdk-8-jdk
sudo apt install openjdk-11-jdk

# 验证
java -version

查看已安装的 open-jdk 版本:

apt list --installed | grep openjdk

# 显示:
# openjdk-11-jdk-headless/jammy-updates,jammy-security,now 11.0.20.1+1-0ubuntu1~22.04 amd64 [已安装,自动]
# openjdk-11-jdk/jammy-updates,jammy-security,now 11.0.20.1+1-0ubuntu1~22.04 amd64 [已安装]
# openjdk-11-jre-headless/jammy-updates,jammy-security,now 11.0.20.1+1-0ubuntu1~22.04 amd64 [已安装,自动]
# openjdk-11-jre/jammy-updates,jammy-security,now 11.0.20.1+1-0ubuntu1~22.04 amd64 [已安装,自动]

卸载 open-jdk,以 open-jdk 11 为例:

sudo apt --purge remove openjdk-11-jdk
sudo apt --purge remove openjdk-11-jdk-headless
sudo apt --purge remove openjdk-11-jre
sudo apt --purge remove openjdk-11-jre-headless

可以同时使用 apt 安装多个版本的 open-jdk,然后使用如下命令切换 jdk 版本:

# 如果我们只用 apt 安装过一个版本的 java,会显示无需配置
sudo update-alternatives --config java

安装 oracle-jdk

官网下载 jdk 压缩包:Java Downloads | Oracle

以 oracle-jdk 8 为例,下载 jdk-8u381-linux-x64.tar.gz

解压并移动到 /usr/bin 目录下:

tar vxf jdk-8u381-linux-x64.tar.gz
sudo mv jdk1.8.0_381 /usr/bin/

配置环境变量:

export JAVA_HOME=/usr/bin/jdk1.8.0_381
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

# 验证
java -version

卸载只需删除 /usr/bin/java 目录即可


CTF 配置

回归正题,可以开始安装 CTF 所需要的环境了

安装 git

迟早要用到的

sudo apt install git
  • 如果发现有时候网不行,github 项目 git 不下来或者 wget 不下来,无法连接,尝试 cdn 加速:
git config --global url."https://ghproxy.com/https://github.com".insteadOf "https://github.com"

如果不想使用了,通过:

git config --global --edit

删除掉对应的配置即可

注意:官方是没有提供 cdn 的,因此上面的 cdn 链接都是用爱发电,可能某天就无法使用了

  • 查看当前 git 代理设置:
git config -l
  • 也可以对 github.com 添加代理:
git config --global http.https://github.com.proxy http://192.168.148.1:7890

如果不想使用了,通过:

git config --global --unset http.https://github.com.proxy

取消代理即可


安装 32 位库

运行 32 位的 ELF 可执行文件时需要

sudo dpkg --add-architecture i386
sudo apt update
sudo apt install libncurses5-dev lib32z1
sudo apt install libc6:i386 libstdc++6:i386

安装 Capstone

一个轻量级的多平台架构支持的反汇编架构

sudo git clone https://github.com/aquynh/capstone /opt/capstone
cd /opt/capstone
sudo make
sudo make install

安装 pwntools

通过 pip 安装或通过 git 安装,两种方法都可以,选其一即可

  • 通过 python 的 pip 安装
sudo apt install python3-pip
pip3 install --upgrade pip
sudo python3 -m pip install pwntools

# 或者直接安装pwn库,自带pwntools
sudo python3 -m pip install pwn
  • 通过 git 安装
sudo git clone https://github.com/Gallopsled/pwntools /opt/pwntools
cd /opt/pwntools
sudo python setup.py install
  • 验证安装
python # 打开python

# 输入下面的代码,Ⅰ或Ⅱ选其一即可
-------------------------------------------
# Ⅰ
import pwn
pwn.asm("xor eax,eax")
-------------------------------------------
# Ⅱ
from pwn import *
asm("xor eax,eax")
-------------------------------------------
# 如果输出的是这个,那就是安装成功了
输出:'1\xc0'
-------------------------------------------

安装 LibcSearcher

在做栈溢出相关的题时,经常会遇到构造 ROP 链的情况。若我们在 IDA 反编译之后没有看到 system 函数,栈题大概率需要泄漏 libc 库中的函数。此时,LibcSearcher 就是最好的选择,可以用它找到偏移地址

pip3 install LibcSearcher -i https://pypi.tuna.tsinghua.edu.cn/simple

注意
网上有很多通过 git 来安装的 LibcSearcher 在使用的时候会出现 “libcsearcher No matched libc, please add more libc or try others“ 的报错,通过 git 安装的那个版本可能不支持 python3,或者不是云端查找

我自己当初就是通过 git 安装,然后踩坑了,网上一大堆说删了 Libcdatabase 重新下载、通过 ./get 更新的方法,但都行不通。。。


安装 checksec

checksec 可用于识别二进制文件的安全属性,只是一个 sh 脚本,安装 pwntools 时自带,如果没有或者出现问题的话可以再手动安装

sudo git clone https://github.com/slimm609/checksec.sh.git /opt/checksec.sh
cd /opt/checksec.sh

# 直接创建软链接即可使用,
sudo ln -s /opt/checksec.sh/checksec /usr/local/bin/checksec

注意:创建软连接的指令中,两个路径都必须使用绝对路径,否则会报如下错误:

符号连接的层数过多: checksec

如果使用 checksec 过程中出现如下报错:

command not found: checksec

可尝试使用上述方法通过 git 仓库创建软链接进行修复

当然还可以直接重装 pwntools,因为 checksec 一般是安装 pwntools 自带的,报错大概率与 pwntools 有关:

pip uninstall pwntools
pip install pwntools

安装 ROPgadget

用来找 gadget 的,安装 pwntools 时自带,如果没有或者出现问题的话可以再手动安装

sudo git clone https://github.com/JonathanSalwan/ROPgadget.git /opt/ROPgadget
cd /opt/ROPgadget
sudo python setup.py install

如果使用 ROPgadget 过程中出现如下报错:

Traceback (most recent call last):
  File "/usr/local/bin/ROPgadget", line 4, in <module>
    __import__('pkg_resources').run_script('ROPGadget==7.3', 'ROPgadget')
  File "/home/wyy/.local/lib/python3.10/site-packages/pkg_resources/__init__.py", line 720, in run_script
    self.require(requires)[0].run_script(script_name, ns)
  File "/home/wyy/.local/lib/python3.10/site-packages/pkg_resources/__init__.py", line 1546, in run_script
    raise ResolutionError(
pkg_resources.ResolutionError: Script 'scripts/ROPgadget' not found in metadata at '/home/wyy/.local/lib/python3.10/site-packages/ROPGadget-7.3.dist-info'

无论是 pwntools 自带的 ROPgadget 还是自己手动 git 安装的 ROPgadget,都将 ROPgadget 的 git 仓库下的 scripts 目录移动到报错的路径下即可

# 如果是 pwntools 自带的 ROPgadget, 首先需要将 ROPgadget 仓库 git 到本地
# sudo git clone https://github.com/JonathanSalwan/ROPgadget.git /opt/ROPgadget

sudo cp -r /opt/ROPgadget/scripts /home/wyy/.local/lib/python3.10/site-packages/ROPGadget-7.3.dist-info

也可以尝试查看 ROPgadget 的版本,并卸载重装:

pip list | grep ROPgadget

pip uninstall ROPgadget
pip install ROPgadget==版本号

重装 ROPgadget 后若因为旧版本而导致 pip 产生警告:

WARNING: Skipping /usr/local/lib/python3.11/dist-packages/ROPGadget-7.2.dist-info due to invalid metadata entry 'name'

删除该文件即可:

sudo rm -rf /usr/local/lib/python3.11/dist-packages/ROPGadget-7.2.dist-info

安装 one_gadget

one_gadget 可以用来动态查找执行 libc 动态库中的 system 执行函数,可以一步到位
在做相关堆题时尤为有效,用来寻找 libc 库中的 execve('/bin/sh', NULL, NULL) ,一个 gadget 就可以 getshell,但需要注意 one_gadget 相关限制条件

sudo apt install ruby
sudo gem install one_gadget

注意:one_gadget 需要安装 ruby (ruby < 2.4 会导致 one_gadget 无法安装,最好是通过添加仓库的方式安装)

如果上述安装出现问题,可以通过添加仓库安装 ruby:

# 删除旧版本 ruby
sudo apt purge --auto-remove ruby

# 添加仓库
sudo add-apt-repository ppa:brightbox/ruby-ng
sudo apt update

# 指定 ruby 2.6 版本
sudo apt install ruby2.6 ruby2.6-dev

安装 glibc-all-in-one

在做堆题时,经常遇到不同版本的 libc,这时 glibc-all-in-one 可以很好的派上用场,动态更改 elf 文件 libc 版本

sudo git clone https://github.com/matrix1001/glibc-all-in-one.git /opt/glibc-all-in-one
cd /opt/glibc-all-in-one
sudo ./update_list   # 获取可以更新的 glibc 的版本
cat list   # 查看可下载的 glibc
sudo ./download 需要的libc版本   # 例如:2.31-0ubuntu9_amd64

默认下载到 glibc-all-in-one 的 /libs 目录下


安装 patchelf

与 glibc-all-in-one 配合使用,可以用于更改 elf 文件 libc 版本

  • 通过 apt 安装
sudo apt install patchelf
  • 源码编译安装
sudo git clone https://github.com/NixOS/patchelf.git /opt/patchelf
cd /opt/patchelf
sudo ./bootstrap.sh
sudo ./configure
sudo make
sudo make check
sudo make install

# 验证安装:
patchelf --version

执行 sudo ./bootstrap.sh 可能会报错:

./bootstrap.sh: 2: ./bootstrap.sh: autoreconf: not found

安装所需的包:

sudo apt install autoconf automake libtool

安装 main_arena_offset

获取给定 libc 的 main_arena 偏移量

作者 zarkivy 将其集成到了 pymao 库中:GitHub - zarkivy/py_main_arena_offset: Get main_arena offset of a given libc with python (依赖于 objdump,请确保你的 Linux 中已安装 binutils 包)

  • 原版
sudo git clone https://github.com/bash-c/main_arena_offset /opt/main_arena_offset

使用方法:

cd /opt/main_arena_offset
./main_arena libc文件名
  • pymao 集成版
sudo git clone https://github.com/IZAY01/py_main_arena_offset /opt/py_main_arena_offset
cd /opt/py_main_arena_offset
sudo python3 setup.py develop

使用示例:

from pymao import *

libc = "./libc-2.27.so"
main_arena_offset = gmao(libc)
# or main_arena_offset = get_main_arena_offset(libc)

安装 QEMU

这是 arm 的 pwn 环境,QEMU 可以用来模拟各种架构的固件的运行,前期可以不安装,但是终究是逃不过的,建议一步到位

VMware 和 Virtualbox 之类通常只能在 x86 计算机上虚拟出一个 x86 虚拟机,而 QEMU 支持在 x86 上虚拟出一个 ARM 虚拟机

QEMU 源码下载地址:Index of / qemu
虚拟机磁盘镜像下载地址:Index of /~aurel32/qemu

sudo apt install qemu qemu-kvm virt-manager bridge-utils binfmt-support
sudo apt install  qemu-system qemu-user-static   # 安装系统态、用户态

# 安装依赖库
sudo apt install -y gcc-arm-linux-gnueabi
sudo apt install qemu libncurses5-dev gcc-arm-linux-gnueabi build-essential gdb-arm-none-eabi synaptic gcc-aarch64-linux-gnu eclipse-cdt git

通过 apt 方式安装的 QEMU 卸载:

# 删除包和相关依赖
sudo apt-get remove --auto-remove qemu*
# 删除配置文件和相关的数据文件
sudo apt-get purge --auto-remove qemu*

注意:Ubuntu 24.04 中貌似去除了 sudo apt install qemu,但仍可以通过 sudo apt install qemu-system qemu-user-static 安装,只是版本是 qemu-8.2.2

QEMU 有 user mode 和 system mode 两种配置方式

其中 QEMU 在 system mode 配置下模拟出整个计算机,可以在 QEMU 之上运行一个操作系统;而 user mode 仅可用来运行对应架构的二进制文件,例如:交叉编译

采用源码编译安装 qemu-9.0.0

wget https://download.qemu.org/qemu-9.0.0.tar.xz
tar xvJf qemu-9.0.0.tar.xz
cd qemu-9.0.0

安装依赖:

sudo apt install ninja-build zlib1g zlib1g-dev libglib2.0-dev libpixman-1-dev libfdt-dev python3-venv libgtk-3-dev build-essential pkg-config binutils-dev 
sudo apt install flex bison

编译安装:

sudo mkdir build && cd build
# 以编译 x86_64 架构的 QEMU 为例,-softmmu 表示 system mode
sudo ../configure --enable-kvm --target-list=x86_64-softmmu --enable-debug
# 启动多核心编译加快速度
sudo make -j$(nproc)
# 将其安装到 /bin 目录下,即可通过终端启动
sudo make install

编译命令中一些参数的说明:

参数含义
--enable-kvm表示开启 kvm 支持
--target-list指定要编译的 CPU 架构(如果不指定,就是全部架构都编译),其中 -softmmu 表示 system mode,-linux-user 表示 user mode
--enable-debug能够对 QEMU 进行调试

目前在 Ubuntu 24.04 中编译 AARCH64 架构的时候会报错

[2181/9361] Compiling C object libqemu-aarch64-linux-user.fa.p/target_arm_helper.c.o
ninja: build stopped: subcommand failed.  
make: *** [Makefile:167:run-ninja] 错误 1

将报错文件 ../target/arm/cpu.c 的第 1020 行的 CS_ARCH_ARM64 改为 CS_ARCH_ARM,重新编译即可

编译完成后,会在 build 目录下生成 x86_64 架构下的 QEMU 本体:qemu-system_x86-64

在终端验证安装:

qemu-system_x86-64 --version

IOT环境搭建8.png

查看 QEMU 安装路径:

which qemu-system-x86_64

IOT环境搭建9.png

另外,QEMU 默认没有网络脚本文件,需要自己进行创建

/usr/local/etc 目录下(也有可能是 /etc 目录下,可以到时候根据报错路径来确定),新建 qemu-ifup 文件:

#!/bin/sh
set -x

switch=br0

if [ -n "$1" ];then
    ip tuntap add $1 mode tap user `whoami`
    ip link set $1 up
    sleep 0.5s
    ip link set $1 master $switch
    exit 0
else
    echo "Error: no interface specified"
    exit 1
fi

增加权限:

sudo chmod 755 /usr/local/etc/qemu-ifup

安装 Zsteg

做 MISC 需要,图像隐写神器

sudo gem install zsteg

安装 Basecrack

做 REVERSE、MISC 需要,Base 系列编码分析工具

sudo git clone https://github.com/mufeedvh/basecrack.git /opt/basecrack
cd /opt/basecrack
pip install -r requirements.txt
python basecrack.py

GDB 配置

见 《GDB的基础和使用》一文,有非常详细的介绍


配置 ZSH 终端

对比 Ubuntu 和 Kali 之后,觉得 Kali 的终端历史命令自动补全的功能真的是太好用了,还有命令输入正确和错误的高亮提示,简直不要太好用,原因就在于 Kali 2020 之后的版本默认终端为 zsh

Ubuntu 也可以安装 zsh 作为终端哦,不用再羡慕隔壁 Kali 啦,接下来用 zsh 打造一个究极好用的全新 Ubuntu 终端吧

参考文章:

  1. Ubuntu版本安装zsh、配置ohmyzsh及插件、主题更换_ubuntu ohmyzsh-CSDN博客
  2. 解决oh-my-zsh plugin ‘zsh-autosuggestions’ not found 与 plugin ‘zsh-syntax-highlighting’ not found问题 | BaKanTu union us (bktus.com)

注意:安装 zsh 后,以后所有要写入 ~/.bashrc 的配置全都只需要写入 ~/.zshrc 即可

安装 zsh

sudo apt update && sudo apt upgrade
sudo apt install zsh

为了配置 zsh,还必须安装 zsh 的配置工具 oh my zsh,安装:

sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

输入 y 将默认 shell 更改为 zsh

Looking for an existing zsh config...
Found /root/.zshrc. Backing up to /root/.zshrc.pre-oh-my-zsh
Using the Oh My Zsh template file and adding it to /root/.zshrc.

Time to change your default shell to zsh:
Do you want to change your default shell to zsh? [Y/n]

Linux虚拟机CTF环境搭建17.png

验证安装:

zsh --version

# zsh 5.8.1 (x86_64-ubuntu-linux-gnu)

添加原来 bash 的环境变量,将 ~/.zshrc 的第二行取消注释:

Linux虚拟机CTF环境搭建25.png

使配置生效:

source ~/.zshrc

一些可能的问题:

  1. 如果使用 zsh 过程中历史记录出现问题,报错如下:
zsh: corrupt history file /home/wyy/.zsh_history

删除原历史记录并重建:

mv ~/.zsh_history ~/.zsh_history_bad
strings -eS ~/.zsh_history_bad > ~/.zsh_history && fc -R ~/.zsh_history
sudo rm -rf ~/.zsh_history_bad

重启终端即可解决

  1. 如果出现以下报错:
zsh: no matches found: xxx

编辑 ~/.zshrc 文件:

sudo gedit ~/.zshrc

在文件最后加上一句:setopt no_nomatch

使配置生效:

source ~/.zshrc

配置 zsh-autosuggestions

这是一个历史命令智能提示插件,能帮助我们快速执行历史命令,实现终端历史命令自动补全

安装:

sudo apt install zsh-autosuggestions

打开 zsh 配置文件:

sudo gedit ~/.zshrc

搜索 plugins,在 plugins 后面添加插件 zsh-autosuggestions (注意与原有的 git 空格隔开)

并加入插件 zsh-autosuggestions 的默认保存地址:

plugins=(git zsh-autosuggestions)

source /usr/share/zsh-autosuggestions/zsh-autosuggestions.zsh

Linux虚拟机CTF环境搭建19.png

保存退出后,更新 ~/.zshrc 使配置生效:

source ~/.zshrc

如果报错:

➜  ~ source ~/.zshrc
[oh-my-zsh] plugin 'zsh-autosuggestions' not found

这是因为前面并没有把插件的代码仓库克隆到本地位置上,所以插件其实并没有被安装

将插件克隆到本地:

sudo git clone https://github.com/zsh-users/zsh-autosuggestions ~/.oh-my-zsh/custom/plugins/zsh-autosuggestions

更新 ~/.zshrc 使配置生效:

source ~/.zshrc

问题即可解决

安装 zsh-autosuggestions 前:

Linux虚拟机CTF环境搭建18.png

安装 zsh-autosuggestions 后:

Linux虚拟机CTF环境搭建20.png

灰色部分就是终端历史命令自动补全,与 Kali 终端一样


配置 zsh-syntax-highlighting

语法高亮插件,当在终端输入命令时,这个插件可以帮助纠错,命令为红色代表错误,绿色代表正确

方法和配置 zsh-autosuggestions 一样

安装:

sudo apt install zsh-syntax-highlighting

打开 zsh 配置文件:

sudo gedit ~/.zshrc

搜索 plugins,在 plugins 后面添加插件 zsh-syntax-highlighting (空格隔开)

并加入插件 zsh-syntax-highlighting 的默认保存地址:

plugins=(git zsh-autosuggestions zsh-syntax-highlighting)

source /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

Linux虚拟机CTF环境搭建21.png

将插件克隆到本地:

sudo git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ~/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting

更新 ~/.zshrc 使配置生效:

source ~/.zshrc

安装 zsh-syntax-highlighting 后:

Linux虚拟机CTF环境搭建22.png

命令为绿色代表正确,红色代表输入错误


更换 ZSH 终端主题

zsh 终端自带很多不同风格的主题,可以根据自己的喜好更换

查看 zsh 自带的主题:

cd ~/.oh-my-zsh/themes && ls

Linux虚拟机CTF环境搭建24.png

打开 zsh 配置文件:

sudo gedit ~/.zshrc

搜索 ZSH_THEME

Linux虚拟机CTF环境搭建23.png

默认主题是 robbyrussell,可以根据个人喜好自行修改

如果设置为:ZSH_THEME="random",则每次打开终端时,主题都是随机的

如果不知道选哪个主题好,也可以先将主题设置为随机,然后每次打开 zsh 后都会显示:
[oh-my-zsh] Random theme 'xxx' loaded
其中 xxx 就是该主题的名字,遇到喜欢的,就将其加到 ZSH_THEME

修改好后,更新 ~/.zshrc 使配置生效:

source ~/.zshrc

以下主题样式可供参考:

  1. af-magic

ZSH终端主题1.png

  1. bira

ZSH终端主题2.png

  1. fox

ZSH终端主题3.png

  1. xiong-chiamiov

ZSH终端主题4.png

  1. gianu

ZSH终端主题5.png

更多主题请查看:Themes · ohmyzsh/ohmyzsh Wiki (github.com)


切换 shell 终端

查看系统已安装的 shell:

cat /etc/shells

查看当前使用的 shell:

echo $SHELL
  1. 临时切换 shell:

直接输入 shell 的名称即可,切换 zsh 就终端输入 zsh,切换 bash 就终端输入 bash

  1. 永久切换 shell:
# 将终端永久切换为 zsh
sudo chsh -s /bin/zsh

编辑器和 IDE

安装 Pycharm/CLion

如果不想用了,可以参照官方卸载方法:卸载 PyCharm | PyCharm 文档 (jetbrains.com)

如果想安装专业版,参考文章:

  1. IntelliJ IDEA 2023.3.2最新激活破解教程(永久激活,亲测有效) - 异常教程
  2. 免费提供最新IDEA注册码, IDEA专属激活码, IDEA注册码在线生成

仅供学习交流,请支持正版

打开 Pycharm 后,如果界面显示异常,比如各种按键的方框显示不全:

Linux虚拟机CTF环境搭建5.png

一般虚拟机中的各种显示问题 bug,都和 VM 的 3D 图形加速有关,关掉即可正常显示:

Linux虚拟机CTF环境搭建6.png

Linux虚拟机CTF环境搭建7.png


Ubuntu 22.04

这里通过命令行安装,也可以直接在应用商店里面安装

以 Pycharm 为例:

sudo snap install pycharm-professional/pycharm-community(选其一) --classic

注意:CLion 只有专业版,没有免费的社区版

当然也可以参照下面 Kali 的方法自己通过安装包安装 (好处是可以自己指定版本)


Kali 2022.4

官网下载 Linux 版:Download PyCharm: Python IDE for Professional Developers by JetBrains

以 pycharm-community-2022.1.1.tar.gz 为例(专业版同理)

解压并移动到 /opt 下:

sudo tar -zxvf pycharm-community-2022.1.1.tar.gz
sudo mv pycharm-community-2022.1.1 /opt/

解压后进入 Pycharm 的 bin 目录,运行 Pycharm:

cd /opt/pycharm-community-2022.1.1/bin
sudo ./pycharm.sh

运行软件后:工具栏 –> Tools –> Create Desktop Entery 可以创建桌面快捷方式,并将图标加入开始菜单


安装 VScode

感觉不是很好用,作为编辑器还是不错的,用来写代码不错,但是使用 VScode 运行代码可能会有各种小问题需要解决
比如:文件相对路径问题(已解决)、gdb.attach 附加调试的终端问题(未解决)等等

Ubuntu 22.04

Ubuntu 可以直接在应用商店里安装,软件名为:code


Kali 2022.4

安装软件包:

sudo apt update
sudo apt install curl gpg software-properties-common apt-transport-https

导入 Microsoft GPG 密钥:

curl -sSL https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -

添加 VS Code APT 存储库:

echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" | sudo tee /etc/apt/sources.list.d/vscode.list

安装 Visual Studio Code:

sudo apt update  
sudo apt install code

当然也可以自己手动下载 VScode 的 deb 文件安装,详见本站《Ubuntu16.04虚拟机环境搭建》一文的《安装 VScode》一节


配置 C/C++

首先要安装好 gccg++gdb 环境

安装 C/C++Code Runner 插件

使用 VScode 调试:
新建 .vscode 文件夹,在 .vscode 文件夹下新建两个文件:launch.jsontasks.json

以后在其他的文件夹中要调试都要重建 .vscode 子文件夹并配置

  • launch.json 内容:
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "C/C++",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "preLaunchTask": "compile",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}
  • tasks.json 内容:
{
    "version": "2.0.0",
    "tasks": [{
            "label": "compile",
            "command": "g++",   // c 文件为 gcc, cpp 文件为 g++
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "problemMatcher": {
                "owner": "cpp",
                "fileLocation": [
                    "relative",
                    "${workspaceRoot}"
                ],
                "pattern": {
                    "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
                    "file": 1,
                    "line": 2,
                    "column": 3,
                    "severity": 4,
                    "message": 5
                }
            },
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

配置 Python

首先要安装好 python 环境

安装插件 Code Runner 即可,其他插件:PylancePython

Code Runner 插件的代码运行指令可在 扩展 -> Code Runner -> 扩展设置 -> Code-runner: Executor Map -> 在 settings.json 中编辑 进行自定义


使用和一些问题

如果是从 snap 商店安装的 VScode 可以直接使用,如果是自己通过 .deb 包安装,可能需要将 code 添加到环境变量

从终端打开 VScode:

code

使用 VScode 创建文件并编辑: (类似于 VIM)

code 文件名

注意:
在 VScode 中使用绝对路径一般没问题,但是使用相对路径 ./ 可能会出问题
这并不是路径错了,而是 VScode 默认的相对路径是针对 .vscode 文件夹所在的目录,而不是当前编辑的文件所在目录
.vscode 文件夹默认放置在用户家目录下:~/

解决办法:

  • 打开 VScode 设置,在 Code Runner 插件中搜索:File Directory As Cwd,将下面的选项打上勾,重新打开编辑的文件,即可正常

Linux虚拟机CTF环境搭建2.png

  • 如果不使用 Code Runner,而是直接使用 Python 插件,则在 Python 插件中搜索:Execute ln File Dir,将下面的选项打上勾,重新打开编辑的文件,即可正常

Linux虚拟机CTF环境搭建4.png


其他

安装 Chrome 浏览器

众所周知,“Chrome 是世界上最好的浏览器” (手动狗头)

Ubuntu 22.04

wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome-stable_current_amd64.deb

Kali 2022.4

wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome-stable_current_amd64.deb

安装过程中会报错,显示缺少 libu2f-udev
直接 apt 安装 (如果还缺其他的,同理安装即可):

sudo apt install libu2f-udev

然后在主菜单中搜索 Chrome,单击即可正常打开 Chrome 浏览器

但是这时如果 Kali 2022.4 没有配置全局代理 (终端的代理不算),会发现 Chrome 无法走代理,也就无法使用 Google 的服务了

这时候只需打开主菜单,搜索 Chrome,右键 --> 编辑应用程序

Linux虚拟机CTF环境搭建27.png

然后在“命令”一栏的最后,加上参数:-proxy-server="xxx" (记得与前面的参数之间加上一个空格隔开),其中 xxx 就是你的代理服务器地址

Linux虚拟机CTF环境搭建26.png

然后重新打开 Chrome,就可以连接上代理啦


安装搜狗输入法

Ubuntu 22.04

下载 Linux 版搜狗输入法:搜狗输入法linux-首页 (sogou.com)

  1. 官方安装步骤:搜狗输入法linux-安装指导 (sogou.com)
  2. 参考安装步骤:Ubuntu 22.04安装搜狗输入法_ubuntu22搜狗输入法_Mr_Sudo的博客-CSDN博客

2023 年底,我发现我 Ubuntu 22.04 虚拟机上的搜狗输入法突然无法正常使用,无论如何都无法切换出中文输入,之前一切正常,不知道是否是系统更新或是其他未知 bug 的缘故,问题版本为 V4.2.1

猜测是 fcitx 出现问题,如果你遇到和我一样的问题,可以按照下述操作来解决,但如果使用 fcitx4 后搜狗输入法仍然无法正常使用(我就是),那可能只能暂时使用 fcitx5 了

目前在 2024 年 4 月找到了一种解决上述问题的方法:

/etc/environment 文件中添加如下内容

GTK_IM_MODULE=fcitx  
QT_IM_MODULE=fcitx  
XMODIFIERS=@im=fcitx

重启后即可切换出中文输入法,搜狗输入法也可以正常使用了

无法切换出中文输入的具体原因还是未知,网上一堆方法也都没有作用,但终于是折腾好了

删除所有输入框架:

sudo apt purge fcitx* ibus*

重新安装 fcitx4:

sudo apt-get install fcitx

# 如果出现报错:sudo apt install -f

或者安装 fcitx5(与 fcitx4 选其一即可):

sudo apt install fcitx5 fcitx5-*

注意:fcitx5 和搜狗输入法是不能共存的,因此只需要选择 fcitx4 + 搜狗输入法 或者 fcitx5 的组合之一就行

fcitx5 自带的输入法如下:

Linux虚拟机CTF环境搭建28.png

安装 gnome-tweaks 来设置 fcitx5 开机自启动:

sudo apt install gnome-tweaks
gnome-tweaks

或者也可以直接使用 ibus(与 fcitx4、fcitx5 不共存,选其一):

sudo apt install ibus
sudo im-config -s ibus
sudo apt install ibus-gtk ibus-gtk3
sudo apt install ibus-pinyin

将中文输入法添加到输入源选项中,即可使用


Kali 2022.4

下载 Linux 版搜狗输入法:搜狗输入法linux-首页 (sogou.com)

参考安装步骤:在kali Linux2021中安装搜狗输入法(详细教程)_kali怎么下载输入法-CSDN博客


安装 Typora

参考文章:Typora最新版激发(Ubuntu) - 知乎

仅供学习交流,请支持正版

查看电脑架构:

uname -m

下载对应的 Typora 安装包:

# x86(amd64)
wget https://download2.typoraio.cn/linux/typora_1.6.6_amd64.deb --output-document typora.deb
  
# ARM
wget https://download2.typoraio.cn/linux/typora_1.6.6_arm64.deb --output-document typora.deb

安装 Typora:

sudo dpkg -i typora.deb

新建 md 文本文件:

typora md文件名

在终端通过 typora 来打开 md 文件:

# 一般情况下,typora 为默认的 md 文本编辑器,直接使用这条命令即可
open md文件名

# -----------------------------------------

# 如果 typora 不是默认的 md 文本编辑器
open -a typora md文件名

# 也可以直接将 open -a typora 取一个别名,比如:typora,避免繁琐的输入

# 如果使用了 zsh 终端则打开 ~/.zshrc,如果使用默认终端则打开 ~/.bashrc
sudo vim ~/.zshrc

# 将以下两虚线之间的命令写入 zshrc 文件的末尾:
# ----------------------------------------
alias typora="open -a typora"
# ----------------------------------------

# 使配置生效:
source ~/.zshrc

# 然后就可以通过以下命令使用 typora 打开 md 文件:
typora md文件名

虚拟机代理

虚拟机走物理机代理(推荐)

将虚拟机网络模式设置为 NAT 或桥接模式 (两种方式下对应的物理机 IP 地址不一样虚拟机在 NAT 模式下走物理机的 VMnet8 虚拟网卡桥接模式下走物理机的 VMnet0 虚拟网卡

这里以 NAT 模式为例,假设物理机 IP 为 192.168.148.1


通过 clash 走代理

物理机在 clash 主界面中打开“局域网代理”(Allow LAN),并查看代理端口,以 7890 为例

在虚拟机中按参数手动设置代理即可:

Linux虚拟机CTF环境搭建12.png


通过 v2rayN 走代理

物理机在 v2rayN 中打开:设置 -> 参数设置 -> 允许来自局域网的连接

在 v2rayN 主界面中,查看局域网的 socks5 和 http 端口号:

Linux虚拟机CTF环境搭建10.png

在虚拟机中按参数手动设置代理即可:

Linux虚拟机CTF环境搭建11.png


虚拟机自身安装 clash

下载:GitHub - Dreamacro/clash: A rule-based tunnel in Go.

以 clash-linux-amd64-v1.6.5.gz 为例

右键解压并重命名:

mv clash-linux-amd64 clash

为方便在任何位置启动 clash,将其移动到 /usr/bin 目录下,并启动 clash 进行初始化:

chmod +x clash
sudo mv clash /usr/bin/
clash

初始化执行 clash 会默认在 ~/.config/clash/ 目录下生成配置文件和全球 IP 地址库:config.yamlCountry.mmdb

直接将你的 yaml 配置文件替换 ~/.config/clash/ 目录下的 config.yaml 即可

开启 clash 后,浏览器输入:http://clash.razord.top/#/proxies 进入 clash 的控制台 (浏览器的设置中,代理选项可能需要设置为使用系统代理)


Ubuntu 22.04 配置

每次使用 clash 前,在设置中将代理设为手动,参数如下: (最底下那个可以不用管)

Linux虚拟机CTF环境搭建1.png


Kali 2022.4 配置

进入 /etc/profile.d 目录,新建文件 proxy.sh

cd /etc/profile.d
sudo vim proxy.sh


# 加入下面两个----之间的内容
-----------------------------------------------------------------
export proxy="http://127.0.0.1:7890"
export http_proxy=$proxy
export https_proxy=$proxy
export HTTP_PROXY=$proxy
export HTTPS_PROXY=$proxy
-----------------------------------------------------------------

执行脚本文件:

source proxy.sh

开启 clash,检查网络代理服务器是否配置成功:

clash

# 另开一个终端
curl google.com

# 如果配置失败:
# curl: (7) Failed to connect to 127.0.0.1 port 7890 after 0 ms: Couldn't connect to server

# 如果配置成功:
# <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
# <TITLE>301 Moved</TITLE></HEAD><BODY>
# <H1>301 Moved</H1>
# The document has moved
# <A HREF="http://www.google.com/">here</A>.
# </BODY></HTML>

以上配置的是终端的代理,浏览器的代理需要在浏览器中单独设置

在火狐浏览器中,搜索代理,将参数设置为:

Linux虚拟机CTF环境搭建3.png


创建桌面快捷方式并添加到开始菜单

以 IDA 为例,在桌面打开终端

新建一个 IDA-Freeware-8.2.desktop 文件:

cd ~/桌面
sudo vim IDA-Freeware-8.2.desktop

并写入以下内容: (注意按照自己实际情况修改路径)

[Desktop Entry]
Version=0.9.4
Type=Application
Name=IDA Freeware 8.2
Comment=Interactive Disassembler Freeware 8.2
Icon=/opt/idafree-8.2/appico64.png
Exec=/opt/idafree-8.2/ida64
Terminal=false
MimeType=application/octet-stream;application/mac-binary;application/macbinary;application/octet-stream;application/x-binary;application/x-macbinary
StartupNotify=true
参数含义必要性
[Desktop Entry]文件头,每个 Desktop 文件都以这个标签开始必选
Version标明 Desktop Entry 的版本可选
TypeDesktop 的类型, 常见值有 Application 和 Link必选
Name程序名称,可自定义必选
Comment程序描述,可自定义可选
Icon设置快捷方式的图标,支持 png 和 svg可选
Exec程序的启动命令, 可以带参数运行, 当 Type 为 Application 时有效必选
Terminal是否在终端中运行, 当 Type 为 Application 时有效 (对于没有图形界面的程序很有用)可选
MimeType设置该程序可以打开的文件类型可选
StartupNotify程序启动通知可选

其他 MimeType 可打开的文件类型:完整的 mime type 列表-CSDN博客

增加执行权限:

sudo chmod +x IDA-Freeware-8.2.desktop

最后将 .desktop 文件存放到 /usr/share/applications/ 目录下

程序就会现在开始菜单中,同时也可以在 右键 -> 使用其他应用程序打开 中找到,然后也可以自己将应用固定到任务栏,方便打开

cd ~/桌面
sudo mv IDA-Freeware-8.2.desktop /usr/share/applications/

jetbrains 全家桶等等创建桌面快捷方式就简单了,运行软件后:工具栏 –> Tools –> Create Desktop Entery

以 Pycharm 自动创建的图标为例:

[Desktop Entry]
Version=1.0
Type=Application
Name=PyCharm Professional Edition
Icon=/opt/pycharm-2022.3/bin/pycharm.svg
Exec="/opt/pycharm-2022.3/bin/pycharm.sh" %f
Comment=Python IDE for Professional Developers
Categories=Development;IDE;
Terminal=false
StartupWMClass=jetbrains-pycharm
StartupNotify=true

创建软连接将应用添加到终端启动

以 IDA 为例:

sudo ln -s "/opt/idafree-8.2/ida64" /usr/bin/ida

这样在终端输入 ida 即可打开 IDA

/usr/bin/ida 中的 ida 名字可以自定义

这样只是在 /usr/bin/ 下创建了一个软链接,指向 /opt/idafree-8.2/ida64
若想删除软链接:

unlink 软链接

尽量不要用 rm -rf 删除软链接,如果不小心加上 '/' 就会删除源文件,例如:rm -rf filename/


终端将 cd 命令与 ls 命令连用

其实就是将 cd xxx 命令变为 cd xxx && ls,好处也显而易见:可以少敲一条命令,方便~

但是 Ubuntu 不支持 chdir,所以不能直接用 alias 实现目录内容的显示

注:以下操作对 Kali Linux 同样适用

如果你的 Ubuntu 配置了 zsh 终端,编辑 ~/zshrc 配置文件(Kali Linux 自带 zsh 终端):

sudo gedit ~/.zshrc

# 如果没有配置 zsh 终端,则打开 ~/.bashrc
sudo gedit ~/.bashrc

在文件最后加入以下内容,保存退出:

alias cd=cdls;
function cdls()
{
    builtin cd "$1" && ls
}

然后使配置生效:

source ~/.zshrc

# 如果没有配置 zsh 终端,则使用如下命令
source ~/.bashrc

然后就可以看到效果了:

Linux虚拟机CTF环境搭建29.png

如果想顺便显示当前所在路径,只需将前面的内容改为:

alias cd=cdls;
function cdls()
{
    builtin cd "$1" && pwd && ls
}

然后就可以看到效果了:

Linux虚拟机CTF环境搭建30.png


配置 SSH 服务端

Linux 默认只安装了 SSH 客户端,有时候在执行 ssh 或者 scp 命令时会出现:ssh: connect to host port 22: Connection refused 拒绝连接

客户端和服务端的关系:
如果 A 机器想被 B 机器远程控制,那么 A 机器需要安装 SSH 服务端,B 机器需要安装 SSH 客户端
例如:B 机器通过 ssh 连接 A 机器,或者 B 机器通过 scp 上传文件到 A 机器

查看 ssh 服务:

dpkg -l | grep ssh

如果只显示有 openssh-client 没有 openssh-server,说明未安装 SSH 服务端

安装:

sudo apt install openssh-server

确认 ssh-server 是否启动:

ps -e | grep ssh

如果看到 sshd 就说明 ssh-server 已经启动

如果出现其他问题的话,查看 SSH 服务端状态:

service ssh status

重启 SSH 服务端:

sudo service ssh restart

相关命令:

  • 连接服务端机器,假设 IP 为 192.168.1.1,用户名为 user (Windows、Linux 通用)
ssh user@192.168.1.1
  • 从客户端机器上传当前目录下的 test 文件到服务端机器的 ~/E:\ 目录下,假设 IP 为 192.168.1.1,用户名为 user
# 服务端为 Linux
sudo scp -r test user@192.168.1.1:~/

# 服务端为 Windows
sudo scp -r test user@192.168.1.1:E:\

其实只传文件的话,不需要 -r 参数,但是传文件夹需要,索性直接加上 -r 更方便

如果使用 ssh 连接出现如下报错:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
......
Host key verification failed.
lost connection

此报错是由于远程的主机的公钥发生了变化导致的

解决办法:清除 ssh 所连接的 IP

sudo ssh-keygen -R 出问题的IP地址

然后再使用 ssh 重新连接即可


安装 wine 8

使用 wine 可以在 Linux 下运行 Windows 程序

感觉有些软件还是不太稳定,可以体验一下,但是不用太过依赖,看个人习惯吧

官方文档:Ubuntu 22.04 – How to Install Wine on Ubuntu 22.04

查看是否安装 32 位架构:

dpkg --print-foreign-architectures

若输出 i386 则跳过下面一步,否则安装 32 位架构:

sudo dpkg --add-architecture i386

下载并添加 WineHQ 存储库密钥:

sudo wget -O /etc/apt/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key

添加官方 Wine 存储库(针对 Ubuntu 22.04 LTS "Jammy Jellyfish" 或基于它的 Linux 发行版,如 Linux Mint 21.x):

sudo wget -NP /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/jammy/winehq-jammy.sources

编辑 /etc/apt/sources.list.d/winehq-jammy.sources 文件,修改为国内源:

sudo vim /etc/apt/sources.list.d/winehq-jammy.sources


# 将整个文件内容替换为下面两个----之间的内容
-----------------------------------------------------------------
Types: deb
URIs: https://mirrors.tuna.tsinghua.edu.cn/wine-builds/ubuntu
Suites: jammy
Components: main
Architectures: amd64 i386
Signed-By: /etc/apt/keyrings/winehq-archive.key
-----------------------------------------------------------------

更新数据库并安装 wine:

sudo apt update
sudo apt install winehq-stable

安装好后默认在 /opt/wine-stable 文件夹下

验证安装:

Linux虚拟机CTF环境搭建14.png

使用方法:

wine exe程序

以 wine 启动 Windows 下的 x64dbg 为例:

Linux虚拟机CTF环境搭建16.png

Linux虚拟机CTF环境搭建15.png


更新 snap 商店

如果有小伙伴喜欢在 snap 商店中安装软件,就会发现当在 snap 商店中更新软件的时候,更新到 Snap Store 时总是会报错,提示无法更新(其实原因很简单,只是单纯因为 snap 商店无法自己更新自己。。。)

更新 snap 商店需要在终端进行:

sudo snap refresh snap-store

如果报错:

错误:cannot refresh "snap-store": snap "snap-store" has running apps
         (ubuntu-software), pids: 2150

说明 snap 商店正在运行,pid 为 2150,需要先关闭 snap 商店再进行更新:

sudo kill 2150   # 注意改为自己的 snap 商店 pid
sudo snap refresh snap-store