找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 2255|回复: 1

浅析security cookie原理

[复制链接]
发表于 2015-8-23 00:11:38 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
老话题了,前几天遇到了,这里便总结一下,没什么新意~~,(不是从网上摘的,保证原创)
定义在vc源码目录下secchk.c:
  1. extern UINT_PTR __security_cookie;
  2. void __declspec(naked) __fastcall __security_check_cookie(UINT_PTR cookie)
  3. {
  4.     /* x86 version written in asm to preserve all regs */
  5.     __asm {
  6.         cmp ecx, __security_cookie
  7.         jne failure
  8.         rep ret /* REP to avoid AMD branch prediction penalty */
  9. failure:
  10.         jmp __report_gsfailure
  11.     }
  12. }
复制代码

编译器生成二进制机器码后,便通过某种逻辑硬性指定了__security_cookie
  1. 在用到栈变量的函数中,函数序言部分:
  2. 013C7210  push        ebp  
  3. 013C7211  mov         ebp,esp  
  4. 013C7213  sub         esp,10Ch  
  5. 013C7219  mov         eax,dword ptr [___security_cookie (141E078h)]  
  6. 013C721E  xor         eax,ebp  
  7. 013C7220  mov         dword ptr [ebp-4],eax  

  8. 函数结语部分:
  9. 013C723F  mov         ecx,dword ptr [ebp-4]  
  10. 013C7242  xor         ecx,ebp  
  11. 013C7244  call        @ILT+370(@__security_check_cookie@4) (13C5177h)  
  12. 013C7249  mov         esp,ebp  
  13. 013C724B  pop         ebp  
  14. 013C724C  ret
复制代码


栈桢:
_________________
........
_________________
cookie=ebp^eax       预存的溢出检测数据
_________________


10Ch

_________________
ebp
_________________
返回地址
_________________




一般溢出的范围是一段地址,而非单个DWORD,因此溢出到返回地址的位置时,cookie也会被改写,所以这里__security_check_cookie@4通过检测cookie值是否能和固定值匹配上决定是否栈溢出



回复

使用道具 举报

发表于 2015-8-24 20:51:42 | 显示全部楼层
有没有绕过的可能?
回复 赞! 靠!

使用道具 举报

本版积分规则

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-12-22 21:55 , Processed in 0.031114 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表