章节大纲

  • 本任务的目标是让服务器打印出其内存中的一些数据(我们将继续使用 10.9.0.5)。数据只是在服务器端打印出来,攻击者无法看到它。因此,这不是一个有意义的攻击,但是在此任务中使用的技术对于后续任务至关重要。
      • 这个任务的目标是打印出栈上的数据。你的输入会被放在栈上,你需要让服务器打印出你输入数据的前四个字节。你需要使用多少个 %x 格式说明符才能实现这个目的?你可以在输入数据的开始放一些特殊的数字(4字节),当它们被打印出来时,你就可以清楚地看到。  
      •  
        有一个秘密消息(一个字符串)存储在堆区域,你可以从服务器打印输出中找到这个字符串的地址。你的工作是打印出这个秘密消息。为了实现这个目标,你需要在格式化字符串中放置秘密消息的地址(以二进制形式)。
         
        大多数计算机是小端机器,所以存储一个地址 0xAABBCCDD(32 位机器上的四个字节)在内存中,最低有效字节 0xDD 存储在较低的地址,最高有效字节 0xAA 存储在较高的地址。因此,当我们在缓冲区中存储地址时,我们需要按照这个顺序保存它: 0xDD,0xCC,0xBB,然后是 0xAA。在 Python 中,你可以这样做:   
         
        number  = 0xAABBCCDD
        content[0:4]  =  (number).to_bytes(4,byteorder='little')