-
-
[讨论]关于栈溢出利用时,如何正确绕过canary、NX、ASLR防护机制?
-
发表于:
2018-11-26 19:37
18128
-
[讨论]关于栈溢出利用时,如何正确绕过canary、NX、ASLR防护机制?
目前pwn中常见的栈溢出保护机制有:canary、NX、ASLR。
面对具体的含栈溢出的pwn题时,有几个场景不是很确定思路,把自己的理解说一下,不知道是否准确,求助大家指导。
由于是栈溢出,因此,只要NX开启,则只能利用ret2libc的方式执行shellcode。
以下讨论都是基于栈溢出和NX开启:
1. ASLR关闭,已知libc
地址固定,且libc已知,则直接ret至libc的shellcode即可。
若开启了canary保护,则需要先通过栈溢出,泄露canary(即题目中必须有两处越界才行。第一次泄露canary,第二次才是劫持运行逻辑),然后利用canary,劫持运行逻辑至libc的shellcode。
2. ASLR关闭,无libc
若开启了canary,则需要先通过栈溢出,泄露canary(即题目中必须有两处越界才行。第一次泄露canary,第二次才是劫持运行逻辑),然后利用canary,劫持运行逻辑,泄露syscall地址或libc(system()、”/bin/sh”)地址,然后再次劫持到前面泄露的地址
writeup中,使用的是泄露syscall的方式;可以尝试泄露libc的方式编写shellcode。
3. ASLR开启,已知libc
泄露某个libc函数地址,然后根据偏移,计算出system地址、/bin/sh地址,然后再次劫持运行逻辑,准备参数,跳转至system。
4. ASLR开启,无libc
通过
Memory Leak & DynELF
内存泄露技术,可以主动搜索libc中的system()地址。
但是无法泄露”/bin/sh”地址,还需要read来输入到.bss段;然后再劫持到
system()地址。最终获取shell
5. canary开启
由于canary是栈溢出的第一步防线,想绕过canary,是不是要求题目中给出两次栈溢出场景才行?
第一次,泄露canary值;
第二次,真正利用栈溢出来劫持程序逻辑。
问题是,如果题目没有两次栈溢出的话,如何绕过canary?
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!