zoukankan      html  css  js  c++  java
  • GS 原理及破解 《0day安全》

    1.原理:

      在main函数之前,会调用__security_init_cookie函数(win10,vs2017,release,x86);

      

      进入__security_init_cookie函数内部:

      __security_cookie(随机数,产生于ntdll.dll的函数,通过栈回溯,下.data+4的硬件断点,可以追踪,看的我头疼,不想弄)

      存在当前程序.data段的第4个字节,并将它按位取反,放入了.data的第0个字节。

      

      进入main函数:

      从.data+4的位置把__security_cookie取出来与当前栈的esp进行异或,得到的结果放入[ebp-4](这个位置不是固定的,不过都距离栈底较近)

      

      当函数返回之前:

      将[ebp-4]中的数据取出来,与esp异或,比较得到的结果与[.data+4]中的数据是否一致,来判断[ebp-4]的位置是否被修改过。

           

      

    2.GS的优点与缺陷(不考虑DEP,ALSR,优化等)(源于<<0day安全>>)

      ①修改栈帧中函数返回地址的经典攻击将被 GS 机制有效遏制;

      ② 基于改写函数指针的攻击,如 C++虚函数的攻击,GS 机制仍然很 难防御;

      ③ 针对异常处理机制的攻击,GS 很难防御;

      ④GS 是对栈帧的保护机制,因此很难防御堆溢出的攻击。

    3.方法

      可以修改.data+4的数据(如果可以的话),人工计算向栈内填值,骗过__security_check_cookie函数

  • 相关阅读:
    NC20565 生日礼物(双指针)
    NC20566 游戏(二分图)
    NC19833 地斗主(dp+矩阵快速幂)
    CF505C Mr. Kitayuta, the Treasure Hunter(dp)
    HDU5493 Queue(线段树)
    HDU5489 Removed Interval (LIS+分治)
    CF1158C Permutation recovery(线段树优化建图)
    NC20811 蓝魔法师(树形dp)
    NC20857 Xor Path(dfs)
    chrony同步时间
  • 原文地址:https://www.cnblogs.com/jf-blog/p/12357344.html
Copyright © 2011-2022 走看看