这三个是常见的gdb插件,学习pwn必备。

安装插件

Waring:安装下列插件请自行选择好目录,并注意配置文件中的目录问题,修改为自己文件所在目录。

安装pwndbg

执行下列命令::

1
2
3
git clone https://github.com/pwndbg/pwndbg
cd pwndbg
./setup.sh

测试运行,发现没有报错,正常运行。

(这样安装前提是没有装过插件,如果装过,需要手动修改插件路径,参考后两个插件安装时修改gdbinit文件,.gdbinit一般在当前用户家目录下)

安装peda

执行下列命令(配置gdbinit文件时,新增peda.py目录):

这里需要根据你的文件路径进行修改。

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

测试运行,发现没有报错,正常使用。

安装gef

执行下列命令:

1
2
3
4
5
wget https://github.com/hugsy/gef/raw/master/scripts/gef.sh
chomod u+x gef.sh
./gef.sh
wget https://github.com/hugsy/gef/raw/master/gef.py
echo source /root/Tools/gef/.gdbinit-gef.py >> ~/.gdbinit

测试运行,根据错误提示发现,少两个库。

我们执行下面的命令安装:

1
2
pip install keystone-engine
pip install ropper

设置插件切换

gdb默认使用配置文件中最后一个插件

每次我们想要切换插件都需要手动注释掉.gdbinit中其它两个插件

为了灵活的调用三个插件,我们可以使用插件切换脚本进行切换。

我们打开.gdbinit文件(默认在用户家目录下,我的在root目录)。

我们在文件最后加入一个可以被识别的字符串,并把配置注释掉:

#this place is controled by user’s shell

(这里有个坑,需要在这个文本下面多加几个空行。不然执行shell脚本无法插入文本)

gdbinit1.png

然后,我们编写一个shell脚本:

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
#!/bin/bash
function Mode_change {
name=$1
gdbinitfile=root/.gdbinit #这个路径按照你的实际情况修改
# gdbinitfile=/root/Desktop/mode

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

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

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

把sh文件放到环境变量指向的路径中,我这里是放到了/usr/local/sbin目录下面。

gdbinit2.png

然后加上运行权限

1
chmod 700 gdb.sh

最后运行gdb.sh查看是否成功:

gdbinit3.png