任务 8:击败地址随机化
章节大纲
-
在 32 位 Linux 机器上,堆栈只有 19 比特的熵,这意味着堆栈基地址可以有
种可能性。这个数字不算高,并且很容易通过暴力破解方法被穷尽。 在这个任务中,我们将使用这样的方法来击败我们的32位虚拟机上的地址随机化防御机制。 首先,我们使用以下命令开启 Ubuntu 的地址随机化功能。然后我们再次针对 stack-L1 运行相同的攻击,请描述和解释你的观察结果。
$ sudo /sbin/sysctl -w kernel.randomize_va_space=2
接着,使用暴力破解方法反复地攻击易受攻击的程序,希望我们放在 badfile 中的内容最终是正确的。我们将仅尝试针对 32 位 的 stack-L1 程序进行攻击。 你可以使用以下 Shell 脚本在无限循环中运行该漏洞程序。如果你的攻击成功,脚本会停止;否则它将继续运行。请耐心等待,因为这可能需要几分钟时间,但如果你非常不幸运,则可能需要更长时间。请描述你的观察结果。
#!/bin/bash SECONDS=0 value=0 while true; do value=$(( $value + 1 )) duration=$SECONDS min=$(($duration / 60)) sec=$(($duration % 60)) echo "$min minutes and $sec seconds elapsed." echo "The program has been running $value times so far." ./stack-L1 done
在 64 位程序上使用暴力破解攻击会更难,因为熵更大。尽管这不在要求范围内,但可以自由尝试一下,看看是否能幸运地成功。