首页
论坛
课程
招聘
什么是Canary保护

零基础入门PWN

该课程为付费课程,如需学习完整课程请购买
作者: Roger
发布时间: 2020-2-15
最后修改: 2020-7-10
5874

上一节 :
下一节 :
章节评论 (4)
xiaofei0115 2020-4-26
 举报
@Roger  杨老师,有两个问题请问一下,局部变量是不是存在栈上?如果开启了Canary保护,是不是每个局部变量都会有保护,如果两个局部变量挨在一起我能不能从一个溢出到另一个局部变量中?
hackbs 2020-7-12
 举报
Pwn                学习第四课打卡!
0x00:堆栈内存对齐
{
    and  esp,0xfffffff0
    主流编译器的编译规则规定“程序访问的地址必须向16字节对齐”,被16整数。
    内存对齐之后可以提高访问的效率。
}

0x01:GDB简单查看寄存器、内存值命令
[
//查看寄存器eax的值
p/x  $eax
x/x  $eax
//查看内存单元地址
p/x  [$ebp-0x18]
p/x  *Address
x/x  [$ebp-0x18]
p/x  *Address
//查看内存数据
p/nfu  addr= 
n  代表要显示内存的长度
f  代表显示的格式
u  表示从当前地址往后请求字节数  默认4Bytes 
{
                d:整数integer
       s:字符串string
       c:字符char
       u:无符号整数  unsigned  integer
       o:八进制格式显示变量
       x:十六进制格式
       f:  浮点数格式float
}
{
        b:表示一个字节显示
       h:表示双字节显示
        默认:四个字节显示
}

x/10cb  0x56555680
//标识显示10个数据,字符型,一个字节。
]

Cannary保护辨别,原理
原理:
{
在需要保护的开始地方,先把gs段:偏移0x14数据放入[ebp-0xc],最后函数结尾的地方把gs段:偏移0x14数据拿出来  和[ebp-0xc]进行异或比较,查看内容是否有被修改,如果有被修改则  call  _stack_chk_fail_local,无则正常运行。
}
辨别:
{
      0x565555ae  <main+17>        mov        eax,  dword  ptr  gs:[0x14]
      0x565555b4  <main+23>        mov        dword  ptr  [ebp  -  0xc],  eax
      0x565555b7  <main+26>        xor        eax,  eax
      ....
      0x565555d8  <main+59>        mov        edx,  dword  ptr  [ebp  -  0xc]
      0x565555db  <main+62>        xor        edx,  dword  ptr  gs:[0x14]
      0x565555e2  <main+69>        je          main+76  <main+76>
}
hackbs 2020-7-12
 举报
@xiaofei0115    Cannary  主要是防止通过缓冲区溢出覆盖函数返回地址的吧,你栈上的变量他又管不到,他主要是每次程序运行时候置入Cookie,  通过随机不同函数返回地址前的  canary  code  程序每次运行时  Cookie  的种子都不相同,用来对比置入的Cookie和缓冲区地址前也就是[ebp-0xc]比较看是否相同,否则判断被缓冲区溢出然后进行处理
【讲师回复】 非常正确
2020-8-2
头像不好看了 2020-10-15
 举报
@hackbs  他怎么防止缓冲区溢出的啊?假如说,我地址跳转或者覆盖成了另一个函数,获取到了shell,这个cookie还有用吗?还是说这个cannery保护是保护什么的啊?
【讲师回复】 群里回复您了,我把另一个同学的解释发给你:这个是塞在返回地址前的,相当于守卫,只允许一种人过,就是自己人,要想越过门卫进入城内,就必须先伪造成自己人,才能进去。这个保护是针对变量的,当有写入变量的时候这个保护才有用。只有允许你写数据的时候,这个保护才开启。为了防止你过多的写数据,覆盖它的返回地址。它在返回地址前面的4(32位)字节里面填入随机数据,会在你向里面写时候,并且你已经写完的时候检查。如果你数据写过了,或者已经写到返回地址处了,这个随机数就不正确,程序就会直接宕机报错崩溃
2020-10-15
域名:加速乐 | SSL证书:亚洲诚信 | 安全网易易盾| 同盾反欺诈| 服务器:绿盟科技
©2000 - 2020 看雪学院 / 沪ICP备16048531号-1 / 沪公网安备 31011502006611号