如何判断libc的版本呢?

2024-09-03

我们知道做retlibc题目一定要注意libc版本一不一样,那我们要这么看libc版本呢?

前言

上一篇文章我讲了做retlibc题目为什么要注意libc版本和本地的一不一样,现在我告诉大家这么判断两个libc版本一不一样

判断的方法

1. 判断本地默认的libc版本(可执行程序默认使用的libc)

使用ldd --version即可

ldd –version使用后的结果如下:

pwn

这里可以看到我当前ubuntu系统默认使用的libc版本是2.35

这里用ldd 可执行文件名,同样可以查看当前可执行程序使用的libc和ld版本

2. 判断题目附件(远程靶机)给的libc.so.6的版本

使用strings ./libc.so.6 | grep "Ubuntu GLIBC"即可

使用strings ./libc.so.6 | grep "Ubuntu GLIBC"后的结果如下:

pwn

可以看到题目给的libc.so.6,他的版本号也是2.35

所以远程靶机和我的虚拟机默认使用的libc版本号是一致的

这时候即使我不使用patchelf去修改可执行程序使用的libc版本,同样可以本地和远程同时打通。

这里我补充另一种查看题目附件libc.so.6的版本的方式:

就是使用ida打开libc.so.6,然后在字符串窗口搜索GNU就好了

具体使用结果如下:

pwn

该方法参考至pwn 查看陌生libc的版本

3.用patchelf修改为正确的libc版本

方法参考以下文章:

CTF-PWN中patchelf更换libc和ld的完整详细过程

修改完之后用,执行一下 ldd 可执行文件名 即可查看是否更换完成

结语

以上内容参考引用了PWN题获取细分版本libc方案