kali下PWN环境配置 暨pwndbg踩坑
0x00 Kali下载最新版本安装
0x01 kali换源
如果你熟悉使用vim的话,你可以直接使用
sudo vim /etc/apt/sources.list
如果不熟悉vim可以先安装一个gedit:
sudo apt install gedit
gedit 只是个编辑器而已,ubuntu下默认安装,kali下默认安装的是mousepad,所以可以用以下命令换源:
sudo mousepad /etc/apt/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
如下图:
图1
保存退出,然后在命令行执行
sudo apt-get update
等待几分钟就好了
0x02 pip换源
首先你要保证自己已经安装了pip,这个一般是装系统的时候就默认安装好的。
可以使用pip -V来查看pip版本,如图2
图2
pip 换源有两种方式一种是临时换源:
pip install 你要安装的包名 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip 永久换源,推荐使用永久换源,因为有些安装脚本也使用pip安装,如果使用临时换源,安装脚本里使用的源仍然是国外源,由于伟大的GFW你的下载速度将惨不忍睹。下边的多个源你选一个就行,也推荐清华的。
# 清华源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple # 阿里源 pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ # 腾讯源 pip config set global.index-url http://mirrors.cloud.tencent.com/pypi/simple # 豆瓣源 pip config set global.index-url http://pypi.douban.com/simple/ # 换回默认源pip config unset global.index-url
附带pip升级教程 :
python3 -m pip install --upgrade pip
0x03 安装pwntools
注意执行完前两步后再执行这步,否则不换源就下载容易失败。
sudo apt install python3 python3-pip python3-dev git libssl-dev libffi-dev build-essential -y pip3 install --upgrade pwntools
安装完成后在python里边输入:
from pwn import * pwn.asm("xor eax,eax")
如果输出'1\xc0'
则表示成功安装pwntools
0x04 安装pwndbg
dep文件安装:不推荐
推荐安装pwndbg,不再建议安装peda了,peda没有pwndbg好用。
一般网上安装pwndbg都是用git clone命令,然后cd pwntools....,这样的教程基本上是在Ubuntu下的源码安装,你在Kali下安装会报错packaging<24.0,but you have...之类的错误,然后还有psutil的一个错误。原因是其安装脚本里边会执行sudo apt update命令,然后你的kali的package版本就变成最新版本的了,所以你即使使用Kali的历史版本也无法安装pwndbg。根本原因是Kali系统使用了一些库比如psutil,这些库对pwndbg来说版本过高,但是由于系统使用了更高版本库,所以你也无法降级安装,也就无法通过源码安装,我试过,源码安装会出现循环依赖的问题。这个pwndbg用源码安装死难安装,有的教程还让你自己编译gdb的,头疼的很。但基本没有什么教程能让你在kali上真正安装上pwndbg的,于是我决定还是得看官方文档啊!
所以该如何在kali下安装pwndbg哪——看官方文档:
图3
图3是github中的readme文档截图,如果你安装的kali是32位版本推荐你使用portable版本,但是需要自己将portable版本的位置加入到环境变量里。
然后我本看到一个加粗字体写的Installation on DEB-based Systems (Debian/Ubuntu/Kali):有关键字kali!下边使用apt 安装了一个.deb文件,所以我们要先下载这个.deb文件。
图4
图4红色框里就是.deb下载链接点进去,然后将页面最底下有个Assets,选取最新版本的.deb文件。因为我是64位的电脑安装的kali也是64位的所以选的应该是pwndbg_20**.**.**_amd64.deb文件,中间用**代替的是日期,选最近的日期就好。还要注意的是不要下载成arm64了,那CPU指令架构都不一样了,咱们电脑一般都是选amd64的,手机才是arm架构。这里给一个pwndbg_2024.02.14.amd64.deb文件的超链接。
下载好后在kali里边,注意换成你自己下载的文件名
apt install ./pwndbg_2024.02.14.amd64.deb
这时候pwndbg就作为一个单独的应用程序看待,而不是一个gbd插件,所以调用pwndbg使用
pwndbg 要调试的程序
图5
以上是第一种方法,但存在缺点:这个pwndbg启动需要在bash界面输入pwndbg才能启动,无法配合pwntools在python脚本中使用:即在exp.py文件中如果使用gdb.attach()启动的仍然是普通gdb。
这就衍生出第二种方法了。(额,其实第一种方法在某些地方稍加改动就成第二种方法了)
portable版本安装:推荐
1.下载portable版本:
自己去github下载,右侧有个release,点进去就是下图:
我的是64位的电脑所以下载这个amd64的,你们注意不要下载成arm的了,指令集都不一样了。
2.使用sudo apt remove gdb卸载原有的gdb。
3.然后使用tar指令解压。我的是解压到了/home/hath/pwndbg文件夹下面。
在上图bin文件夹里有一个pwndbg文件,将其重命名为gdb。实际上这个文件是一个shell脚本文件,我们只要稍加修改就能让gdb变成pwndbg。该脚本文件内容如下:
#!/bin/sh dir="$(cd -- "$(dirname "$(dirname "$(realpath "$0")")")" >/dev/null 2>&1 ; pwd -P)" export PYTHONHOME="$dir" exec "$dir/lib/ld-linux-x86-64.so.2" "$dir/exe/gdb" --quiet --early-init-eval-command="set auto-load safe-path /" --command=$dir/exe/gdbinit.py "$@"
脚本十分简单,就是获取了解压路径,然后将加载路径作为启动参数传递给gdb了!我们要修改第二行的dir=“解压路径”。我的电脑就是/home/hath/pwndbg。然后将其复制到/usr/bin/目录和/bin目录下即可。
我的电脑上该脚本被修改为:
这种方法安装的pwndbg启动时使用gdb启动,也可以在exp.py文件里配合pwntools使用,这是个完美的解决方案!
0x05 安装patchelf
你是否还为自己的libc版本与靶机版本或者老师演示的版本不一致而感到困惑,你是否经常发现你找出的libc版本和函数地址和老师给出的教程里的地址不一致?你是否由于和教程不一致的运行环境而导致你无法找到libc进而无法get shell?
你现在需要patchelf
首先给个github的国内镜像源:https://gitclone.com/使用方法是先进入这个网站,搜你要安装的项目名,点复制克隆地址。更直接的是将原本的https://换成https://gitclone.com/ 比如
#原来的git地址 git clone https://github.com/matrix1001/glibc-all-in-one #镜像的git地址 git clone https://gitclone.com/github.com/matrix1001/glibc-all-in-one
好了,讲完了如何给git换源我们回到正题。预防出错,先安装依赖库:
sudo apt-get install autoconf automake libtool
#推荐直接用apt安装
sudo apt install patchelf
使用方法:
一般题目会给你一个libc文件,直接在bash里运行这个libc文件就能输出一些版本信息。用ldd 运行可执行文件也会打印出这个可执行文件使用到的动态库和链接器。
注意这个截图里的libc是我没有patchelf之前使用的,实际上就是我这个版本kali上的libc文件,为了演示patchelf用法,就将libc的路径由一个链接文件改成一个当前文件夹下的libc。
┌──(hath㉿kali)-[~/…/CTF/stackoverflow/ret2libc/ret2libc3] └─$ ./libc6_2.38-12.1_i386.so GNU C Library (Debian GLIBC 2.38-12.1) stable release version 2.38. Copyright (C) 2023 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Compiled by GNU CC version 13.2.0. libc ABIs: UNIQUE IFUNC ABSOLUTE Minimum supported kernel: 3.2.0 For bug reporting instructions, please see: <http://www.debian.org/Bugs/>.
首先先根据输出的(Debian GLIBC 2.38-12.1)找到对应的ld.so文件,我这个就是系统自带的就不用改了,修改方法是:
patchelf --set-interpreter ld_addr file_name
然后将链接路径修改为自己的libc文件。我们先看看示例程序原来是什么样的:
ldd 可执行文件名
可以看出原来的示例程序是libc.so.6然后一个箭头指向一个绝对路径,也就是说这个libc.so.6是一个链接文件,类似于windows下的快捷方式。我们打算将这个原来的链接文件修改为本路径下的libc6_2.38-12.1_i386.so文件。
我们将libc.so.6称为old_link;将要修改成的libc路径称为new_link 那么使用方式是
patchelf --replace-needed old_link new_link 可执行文件名
如下图:
可以看到patch后的文件已经更换成了本路径下的libc了,并且可执行文件也可以正常运行。
0x06 安装IDA
IDA作为静态分析工具是必备的!初步学习只需要装IDA Free版就好了,你也可以自行寻找IDA破解版安装。
Free版下载链接:IDA
下载好后给下载文件添加可执行权限:
chmod 777 ./idafree84_linux.run
然后运行,一步步安装就好。完成后桌面有个图标,双击运行。
0x07 交叉编译环境支持
一般安装的kali都是64位的,但是一些pwn题目是32位的,我们想自己编译32位程序的时候会报这个缺少头文件<bits/wordsize.h>的错误
/usr/include/features-time64.h:20:10: fatal error: bits/wordsize.h: No such file or directory 20 | #include <bits/wordsize.h> | ^~~~~~~~~~~~~~~~~
实际上是没有支持交叉编译的库,安装一下就好
sudo apt-get install gcc-multilib
0x08 checksec
这个是用来检查可执行文件保护措施的,必装软件。
sudo apt install checksec
使用方法:
checksec --file=./main
0x09 Ropgadget
这个是搜索可执行文件gadgets的小程序,也是必备,用apt装就行
版权声明:
本博客为本人原创于博客园,由于担心博客园倒闭,故迁移到CSDN,版权归本人所有,谢绝转载。
CSDN迁移博客链接 :https://blog.csdn.net/kenwblack/article/details/142652042
另外:为倡导互联网分享精神,本博客供人类免费阅读,但是为防止二道贩子,故不允许分发、转载。