pwn做题技巧

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

注:当然方法还有别的,只要达到目的都可行。

posted @ 2023-03-15 21:00  白榆-  阅读(195)  评论(0)    收藏  举报