本文最后更新于 2024-08-28,文章内容可能已经过时。

kali中安装gdb及其插件Peda|pwndbg|gef

什么是GDB?

​ 随着网络安全领域的不断发展,Kali Linux 作为一款专为渗透测试和安全研究设计的 Linux 发行版,受到了广大安全爱好者的喜爱。在 Kali Linux 中,GNU 调试器(GDB)是一个强大的工具,用于调试程序,特别是当程序出现崩溃、挂起或其他异常行为时。

GDB(GNU Debugger)是一个强大的程序调试工具,它允许用户在程序运行时观察、控制和修改程序的状态。在 Kali Linux 中,GDB 通常预装在系统中,用户可以通过命令行轻松访问。

如果你的 Kali Linux 系统中没有预装 GDB,你可以通过以下命令进行安装:

sudo apt-get update
sudo apt-get install gdb

pedapwndbggef是GDB常用的插件可以用来PWN和逆向分析。由于安装过程繁琐和出问题频繁,所以特此在这里记录安装过程中的命令和出现的各种问题,本文不涉及原理问题,只记录安装的过程。

​ 强烈建议:安装之前一定要打一个备份或者虚拟机快照

安装过程中出错的可能性很大。

安装过程

首先先安装GDB,安装好后安装三个插件

peda:

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

image-20240828192236567

gef:

wget -q -O ~/.gdbinit-gef.py https://github.com/hugsy/gef/raw/master/gef.py
echo source ~/.gdbinit-gef.py >> ~/.gdbinit

image-20240828192444816

下载完后发现是空的

(这里的git地址已经失效,需要需要手动下载后替换https://github.com/hugsy/gef/blob/main/gef.py)

image-20240828203605597

pwndbg:

pip install pwntools
sudo apt-get install gdb python3 python3-pip python3-dev git libglib2.0-dev libcairo2-dev
git clone https://github.com/pwndbg/pwndbg
cd pwndbg
./setup.sh

image-20240828193014552

安装过程中报错,按照提示输入安装python虚拟环境:,再次执行./setup.sh安装脚本

apt install python3.12-venv
./setup.sh

image-20240828193302526

​ 由于这三个插件不能同时运行,下载完后,如果想要切换,只能通过修改root下的.gdbinit文件,要解决这个问题可以参考如下的连接:

https://infosecwriteups.com/pwndbg-gef-peda-one-for-all-and-all-for-one-714d71bf36b8

大致翻译以下:

首先,可以先把下载的pwndbg文件夹重命名为pwndbg-src(可以不做,但是后面直接复制,为了方便,可以将名称改为跟作者一样),运行,这两个语句即可:

mv pwndbg ~/pwndbg-src
echo "source ~/pwndbg-src/gdbinit.py" > ~/.gdbinit_pwndbg

随后将.gdbinit文件(在根目录下的隐藏文件)清空,将下列命令复制进去:

define init-peda
source ~/peda/peda.py
end
document init-peda
Initializes the PEDA (Python Exploit Development Assistant for GDB) framework
end

define init-pwndbg
source ~/.gdbinit_pwndbg
end
document init-pwndbg
Initializes PwnDBG
end

define init-gef
source ~/.gdbinit-gef.py
end
document init-gef
Initializes GEF (GDB Enhanced Features)
end

然后在/usr/bin目录下建立三个文件,gdb-pedagdb-pwndbggdb-gef

分别写入:

#!/bin/sh
exec gdb -q -ex init-peda "$@"

#!/bin/sh
exec gdb -q -ex init-pwndbg "$@"

#!/bin/sh
exec gdb -q -ex init-gef "$@"

最后给每个文件加上可执行权限,直接输入gdb-pedagdb-pwndbggdb-gef即可分别独立运行。

遇到的问题

安装GBD的时候发现问题。如果你尝试直接进行$ apt install gdb安装后应该是最新版的gdb 并且后续尝试安装peda后再启动将会出现from six.moves import range报错

image-20240828191308592

输入gdb后发现如下报错。

image-20240828191156816

2024版的kali的python3是python3.11版本,而peda中的six库支持的是3.11之前的。而gdb13是支持python3.12的。

image-20240828191349222

有趣的一点是,当我们在gdb中查看python版本的时候是3.12.4

(gdb) python import sys; print(sys.version_info)

image-20240828191532973

sys.version_info(major=3, minor=12, micro=4, releaselevel=‘final’, serial=0)

(gdb) python import sys; print(sys.version_info)

/usr/bin/python (真实情况是软连接指向python3.11)

跟进路径发现是一个用于开发和编译与 Python 3.12 版本相关的程序和模块

image-20240828191639955

(gdb) python import sys; print(sys.path)

[‘/home/maptnh/peda/lib/’, ‘/usr/share/gdb/python’]

image-20240828191707136跟进/home/maptnh/peda/lib/发现存在six.py。

image-20240828191804310

解决方案

1.下载gdb 13

$ sudo apt install gdb

2.下载gdb-peda

$ git clone https://github.com/longld/peda.git ~/peda;echo "source ~/peda/peda.py" >> ~/.gdbinit

3.安装python12替换软连接

$ sudo apt install python3.12

$ sudo ln -sf $(which python3.12) /usr/bin/python

$ sudo ln -sf $(which python3.12) /usr/bin/python3
```python
$ if [[ $(python --version 2>&1) == *"Python 3.12"* ]] && [[ $(python3 --version 2>&1) == *"Python 3.12"* ]]; then
    echo "[+] Success"
else
    echo "[-] Failure"
fi

输出Success即可

4.替换备份six模块

启动gdb,获取库路径

$ gdb
(gdb) python import sys; print(sys.path)

修改/peda/lib/six.py文件,使他不起作用

$ mv ~/peda/lib/six.py ~/peda/lib/six.py.bak

再次启动gdb,成功将peda插件载入(上面有报错不用管(是正则表达式的警告),有peda就可以了)

在运行 gdb-gef 时遇到了多个 SyntaxWarning,这些警告是由于正则表达式中的无效转义序列引起的。这些警告不会阻止程序运行,但建议修复以避免潜在问题。

解决方法:

修正正则表达式

/root/peda/peda.py 文件中,您可以查找并修改所有带有无效转义序列的正则表达式。将 \[\s\d 等修改为原始字符串格式,例如:

p = re.compile(r"(.*)\[(.*)\]")  # 使用原始字符串

忽略警告

  • 如果您不想立即修复这些警告,可以选择忽略它们,程序仍然可以正常运行。

image-20240828210147361

image-20240828205052182

如果想不启动时候不显示(忽略)这些错误可以使用如下命令启动

PYTHONWARNINGS="ignore" gdb-peda

image-20240828210224121

放一张安装完成的全家福:

image-20240828210541638

参考:

https://blog.csdn.net/qq_51886509/article/details/141227182

https://blog.csdn.net/weixin_74861133/article/details/132948262