进阶 stack smashing--canary 报错利用 && environ泄露栈地址
这部分是对进阶stack smashing的使用,以及对 environ的认识,我们可以看一个buu上具体的题目
题目连接 https://buuoj.cn/challenges#wdb2018_guess
看一下保护,pie没有开
64位ida载入看一下
那么在ida里面看见还是挺麻烦的,首先程序打开了flag文件,然后把flag读取到的栈上的buf数组中,有三次输入的机会,而且gets存在栈溢出
那么思路是通过找到偏移我们可以把puts_got表的地址打印出来,然后得到libc的地址之后可以找到environd的地址,这里解释一下这个environ。
environ在Linux C中,environ是一个全局变量,它储存着系统的环境变量。它储存在libc中因此environ是沟通libc地址与栈地址的桥梁。简而言之就是这里面存着环境变量的地址,也就是可以通过这个,找到栈上的地址,然后计算偏移找到buf存的flag地址,最后一次输入在输入flag的地址就可以打印出flag
看一下environ存的值
然后再找一下我们输入内容的地址和__libc_argv[0] 指针所指向的字符串的偏移
计算一下偏移0x7fffffffe5d8-0x7fffffffe4b0 = 0x128,那么只要我们输入0x128个垃圾数据之后再输入puts got表的地址就可以泄露出puts的真实地址了,那么就可以拿到一系列的地址
然后我们找一下环境变量距离flag位置的偏移
那么偏移为0x7fffffffe5e8 - 0x7fffffffe480 = 0x168,然后得到了flag的偏移就可以完善一下脚本了
exp:
标签:进阶,--,smashing,flag,libc,地址,environ,报错,偏移 From: https://www.cnblogs.com/CH13hh/p/18130291