确定glibc版本,以指定glibc运行程序
前言
CTF题目中经常会给出libc的文件,首先需要做的就是确定libc的版本,对程序进行针对性的攻击。最直接的确定方法就是直接运行该libc./libc.so.6
,但通常由于本机ld版本与libc版本不匹配,发生段错误。
确定完大版本号还不够,因为就算是同一版本的libc也会有较大的变动。比方说,与最开始的2.29版本相比,gnu libc库的release/2.29/master分支的tcache_perthread_struct->counts
的变量类型都变了;__libc_malloc
中取用tcache的判定,也由判断指针是否为空变成了判断counts是否大于0。这些细节很大程度上影响了exploit的书写。
下面以pwnable.tw re-alloc的libc为例,写一写我的经验。