nop sled 空操作雪橇

nop sled 是一种可以破解栈随机化的缓冲区溢出攻击方式。

攻击者通过输入字符串注入攻击代码。在实际的攻击代码前注入很长的  nop  指令 (无操作,仅使程序计数器加一)序列,

只要程序的控制流指向该序列任意一处,程序计数器逐步加一,直到到达攻击代码的存在的地址,并执行。

 

 

栈随机化指运行时栈的起始地址为随机的,所以程序中存放   各函数返回地址   的地址也会发生对应的改变。可防止运行相同

程序的相同系统因易预测栈地址而易于攻击。

 

 

由于栈地址在一定范围的随机性,攻击者不能够知道攻击代码注入的地址,而要执行攻击代码需要将函数的返回地址更改为攻击代码的地址(可通过缓冲区溢出的方式改写函数返回地址)。所以,只能在一定范围内(栈随机导致攻击代码地址一定范围内随机)枚举攻击代码位置(有依据的猜)

       若   :

             栈随机范围为 2 ^ 23  ,则需要枚举 2 ^23 个 返回地址。

而使用 nop sled  的方式  ,若  枚举 一个  255 字节的 nop sled ,则只需要枚举 (2 ^ 23) / (255+1)  个返回地址即可。(攻击代码本身有一个起始地址。所以为 255+1)

 

  即 :    

  不用 nop sled  ,   函数返回地址 ------->  攻击代码。

  使用 nop sled ,    函数返回地址 ------->  nop 序列(顺序执行) 直到攻击代码地址。

 

posted @ 2019-07-24 19:05  哼哼先生  阅读(3486)  评论(0编辑  收藏  举报