技术宅的结界

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

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 974|回复: 1
收起左侧

浅析security cookie原理

[复制链接]

273

主题

451

帖子

4870

积分

用户组: 真·技术宅

UID
2
精华
61
威望
148 点
宅币
3687 个
贡献
131 次
宅之契约
0 份
在线时间
623 小时
注册时间
2014-1-25
发表于 2015-8-23 00:11:38 | 显示全部楼层 |阅读模式

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

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

x
老话题了,前几天遇到了,这里便总结一下,没什么新意~~,(不是从网上摘的,保证原创)
定义在vc源码目录下secchk.c:
[C++] 纯文本查看 复制代码
extern UINT_PTR __security_cookie;
void __declspec(naked) __fastcall __security_check_cookie(UINT_PTR cookie)
{
    /* x86 version written in asm to preserve all regs */
    __asm {
        cmp ecx, __security_cookie
        jne failure
        rep ret /* REP to avoid AMD branch prediction penalty */
failure:
        jmp __report_gsfailure
    }
}

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

函数结语部分:
013C723F  mov         ecx,dword ptr [ebp-4]  
013C7242  xor         ecx,ebp  
013C7244  call        @ILT+370(@__security_check_cookie@4) (13C5177h)  
013C7249  mov         esp,ebp  
013C724B  pop         ebp  
013C724C  ret 


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


10Ch

_________________
ebp
_________________
返回地址
_________________




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



回复

使用道具 举报

0

主题

76

帖子

6735

积分

用户组: 真·技术宅

UID
604
精华
0
威望
1 点
宅币
804 个
贡献
5853 次
宅之契约
0 份
在线时间
97 小时
注册时间
2014-12-20
发表于 2015-8-24 20:51:42 | 显示全部楼层
有没有绕过的可能?

本版积分规则

QQ|申请友链||Archiver|手机版|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图  

GMT+8, 2020-7-16 12:42 , Processed in 0.091926 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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