章节大纲

  • 要利用目标程序中的缓冲区溢出漏洞,我们需要准备一个 payload,并将其保存在 badfile 中。 我们将使用 Python 程序来实现此目的。我们提供了一个名为 exploit.py 的示例程序,其包含于实验设置文件中。 代码不完整,你需要替换一些重要的值。

    #!/usr/bin/python3
    import sys
    
    shellcode= (
      ""                    # 需要更改
    ).encode('latin-1')
    
    # 填充内容使用 NOP 指令
    content = bytearray(0x90 for i in range(517))
    
    ##################################################################
    # 将 shellcode 放在 payload 的某个地方
    start = 0               # 需要更改
    content[start:start + len(shellcode)] = shellcode
    
    # 决定返回地址的值
    # 并将该值放在 payload 中的某处
    ret    = 0x00           # 需要更改
    offset = 0              # 需要更改
    
    L = 4     # 使用 4 来表示32位地址,使用8来表示64位地址
    content[offset:offset + L] = (ret).to_bytes(L,byteorder='little')
    ##################################################################
    
    # 将内容写入一个文件中
    with open('badfile', 'wb') as f:
      f.write(content)

    完成后运行该程序,这将生成 badfile 的内容。然后运行易受攻击的程序 stack。如果您的 exploit 实现正确,则您应该能够获得一个 root shell:

    $./exploit.py     // 创建坏文件
    $./stack-L1       // 通过运行漏洞程序启动攻击
    # <---- 中彩票了!你获得了root shell!

    在你的实验报告中,除了提供截图来展示你的调查和攻击外,还需要解释你在 exploit.py 文件中使用的值是如何决定的。这些值是攻击中最重要的一部分,因此详细的说明可以帮助老师来评估你的报告。仅演示成功的攻击而不解释为什么这个攻击起作用将不会获得很多分数。