原文地址:https://github.com/wizardforcel/sploitfun-linux-x86-exp-tut-zh/blob/master/7.md
这一节是简单暴力的一节,作者讲的很清楚,有些坑我在之前的说明中也已经说过了。这次说一个坑,我调了很久,不一定每个人都会遇到。
TypeError: execv() arg 2 must contain only strings的问题
这个是问题真的很坑啊,就是地址计算会产生一个call不识别的字符(看起来是这样,具体没有细究)
在前几节中,遇到这个问题,建议换个语言,比如爆破使用C而不是Python,想绕真的不容易
我试过了str(buf)和“%s” % buf两种办法,并不好使,解决的办法是,换一个不容易踩到坑的地址,反正Exploit有技巧的成分,也有运气的成分
比如我的exit的偏移地址是0x33400,和上边的libc地址加和后,总是报错,因此,使用
jourluohua@jourluohua-virtual-machine:~/work/test7$ readelf -s /lib/i386-linux-gnu/libc-2.19.so | grep exit 111: 00033830 58 FUNC GLOBAL DEFAULT 12 __cxa_at_quick_exit@@GLIBC_2.10 139: 00033400 45 FUNC GLOBAL DEFAULT 12 exit@@GLIBC_2.0 446: 00033870 268 FUNC GLOBAL DEFAULT 12 __cxa_thread_atexit_impl@@GLIBC_2.18 554: 000b6704 24 FUNC GLOBAL DEFAULT 12 _exit@@GLIBC_2.0 609: 0011cc40 56 FUNC GLOBAL DEFAULT 12 svc_exit@@GLIBC_2.0 645: 00033800 45 FUNC GLOBAL DEFAULT 12 quick_exit@@GLIBC_2.10 868: 00033630 84 FUNC GLOBAL DEFAULT 12 __cxa_atexit@@GLIBC_2.1.3 1037: 00127490 60 FUNC GLOBAL DEFAULT 12 atexit@GLIBC_2.0 1380: 001ab204 4 OBJECT GLOBAL DEFAULT 31 argp_err_exit_status@@GLIBC_2.1 1491: 000f9950 62 FUNC GLOBAL DEFAULT 12 pthread_exit@@GLIBC_2.0 2087: 001ab154 4 OBJECT GLOBAL DEFAULT 31 obstack_exit_failure@@GLIBC_2.0 2240: 00033430 77 FUNC WEAK DEFAULT 12 on_exit@@GLIBC_2.0 2383: 000fa4c0 2 FUNC GLOBAL DEFAULT 12 __cyg_profile_func_exit@@GLIBC_2.2
最有可能的offset是0x33400,但是这不是不好使么,发现存在一个_exit@@GLIBC_2.0的项,使用这个偏移成功爆破。