章节大纲

  • C 语言中的 printf() 函数被用来根据格式打印字符串。它的第一个参数被称为格式化字符串,它定义了字符串应该如何被格式化。格式化字符串使用占位符,这些占位符由 % 字符标记,供 printf() 函数在打印时填充数据。格式化字符串的使用不仅限于printf()函数,许多其他函数,如 sprintf()、fprintf() 和 scanf() 也使用格式化字符串。一些程序允许用户提供格式化字符串的全部或部分内容。如果这些内容未经过滤,恶意用户可以利用这个机会使程序运行任意代码。这样的问题被称为格式化字符串漏洞。

    本实验的目标是让大家通过将课堂上学到的关于该漏洞的知识付诸实践,亲身体验格式化字符串漏洞。你将获得一个带有格式化字符串漏洞的程序,你的任务是利用这个漏洞以实现以下目的:

    1. 使程序崩溃
    2. 读取程序的内部内存
    3. 修改程序的内部内存
    4. 最严重的,使用受害者程序的权限注入并执行恶意代码

    本实验涵盖以下主题:

    • 格式化字符串漏洞和代码注入

    • 栈布局

    • Shellcode

    • 反向 Shell