对sudo缓冲区溢出(影响sudo版本<1.8.26)的分析,以及如何使用GCC编译公开可用的漏洞利用代码
Sudo 1.8.25p - 'pwfeedback' 缓冲区溢出(PoC)
Sudo 的 pwfeedback 选项可用于在用户输入密码时提供视觉反馈。每次按键时,都会打印一个星号。该选项是为了回应用户对标准 Password: 提示符禁用按键回显的困惑而添加的。虽然上游版本的 sudo 默认未启用 pwfeedback,但某些系统(如 Linux Mint 和 Elementary OS)会在其默认的 sudoers 文件中启用该选项。
分析
Sudo 缓冲区溢出 tryhackme 演练
CVE-2019-18634 分析
首先,我们通过 SSH 登录 tryhackme 实例
该漏洞是由于 pwfeedback 函数存在堆缓冲区溢出漏洞所致。要利用此漏洞,我们首先通过运行 sudo –version 命令来确认机器上存在易受攻击的 sudo 版本(sudo <1.8.26)
CVE-2019-18634 分析
首先,我们通过 SSH 登录 tryhackme 实例
该漏洞是由于 pwfeedback 函数存在堆缓冲区溢出漏洞所致。要利用此漏洞,我们首先通过运行 sudo –version 命令来确认机器上存在易受攻击的 sudo 版本(sudo <1.8.26)

确认机器上存在易受攻击的 sudo 版本后,我们现在验证 pwfeedback 函数是否存在。这可以通过两种方式完成:调用 sudo 并在密码提示符中输入任意内容,输入密码字符时应显示“*”;第二种更技术性的方式是使用 sudo -l 命令,但这同样要求用户具有适当的权限,允许他们查看有关 sudo 的信息或能够连接 sudoers 文件

我们现在将通过使用 exploit-db 上的测试用例来确认缓冲区溢出是否可能发生 https://www.exploit-db.com/exploits/47995
perl -e 'print(("A" x 100 . "\x{00}") x 50)' | sudo -S id ^^上面的代码行如下:
添加 100 个 A 字符并将其通过管道输入到 sudo 命令中,这些字符最终将进入 pwfeedback 堆缓冲区。

Sudo 随后将抛出一个段错误,因为它不知道如何继续 sudo 进程
这是因为一旦静态堆缓冲区被淹没,它将开始淹没 CPU 寄存器和指令指针,而指令指针负责维护下一条指令的流程。
我们可以运行该漏洞利用程序,它将导致缓冲区溢出并赋予我们对系统的 root 访问权限 https://www.exploit-db.com/exploits/47995
