Canary
对抗canary策略1,泄露canary值
2,泄露fs:28H内的值
3,覆写fs:28H副本值
4,劫持stack_chk_fail
5,stack smashing
6,逐字节爆破(BROP gadget,相对限制多)
GOT(global offset table)| PLT(procedure linkage table)
GOT和PLT的理解对漏洞成因分析是很重要的,同时理解也是很绕的,分享一下各位大神的分析(望大家多多支持各位作者的分享精神)。
1.GOT表 和 PLT表[这篇看完基本做PWN题就能搞懂了]
2.这里附个视频讲解的,给看文字比较难懂的同学
3.二进制漏洞挖掘之栈溢出-开启RELRO[这篇分析的很详细,加深对LINUX保护机制的理解,后半部分理解需要一定的知识积累]
4.Linux二进制ELF程序查找symbol过程分析[这篇跟3类似,从保护机制上分析PLT和GOT的内容]
建议:为了加深理解印象,最好自己一步一步调试跟进去看看。
过程:
1,gdb调试看看got表,查看哪些函数还未被加载。
2,这里看个PUTS函数,下断
3,断下si跟进
4,来到plt表
5,重新运行,直接n步过
6,继续看看got表
已被填入puts真正地址
7,查看上面plt表中第一个jmp [got表里面的地址](0x804a014)
结论:plt 表中,jmp [地址]。
第一次还未装载函数时,地址=got表地址(去找到函数真正地址);
第二次执行,地址=函数真正地址。
泄露libc地址
原理:动态连接程序中,本程序中含有的函数达不到需要实现的目的,需要借助动态链接库中的函数实现其目的。
查找使用的动态链接库信息
原理:由于在分页机制,在LINUX系统下是以4k为单位,即12位(2^12=4k),所以利用此规则,即便开启了地址随机化保护机制,地址的后三位(在页中的偏移)也是不变的。
下图举例说明:
然后在在线libc库查就好了
这里的offset都是偏移RVA。还需要得出
基址=puts(VA) - puts(offset)
在线工具网站1
在线工具网站2
注:当然方法还有别的,只要达到目的都可行。
标签:PLT,技巧,地址,plt,做题,GOT,pwn,got,函数 From: https://www.cnblogs.com/xibro-baiyu/p/17220018.html