0

我正在开发一个项目(实际上是一个竞赛)来利用在远程服务器上运行的应用程序。我确实有它们编译的二进制文件,其中包含一些调试信息(无源代码)并且没有堆栈保护。我设法将 shellcode 注入堆栈并覆盖返回地址,以便它也可以毫无问题地执行。

唯一的事情是我注入了一个硬编码的返回地址。我想根据操作系统和体系结构(应该是 32 位),地址可能会有小的差异。

我不知道服务器是否使用 ASLR 执行二进制文件。但它被停用了——有没有一种方法可以注入一个动态的合适的返回地址?

我还在本地尝试通过连接到我自己机器上运行的服务器来暴力破解可能的 ASLR 地址。由于如果返回地址不正确,分叉的进程会崩溃,文件描述符不会被释放,并且在 1024 次尝试后不再有连接是可能的。是否有可能暴力破解地址?

谢谢!

4

1 回答 1

0

有没有办法注入一个动态的合适的返回地址?

是的,但它几乎不依赖于应用程序,您将寻找一个泄露的指针,允许您计算可用地址,如模块基地址。ASLR 和 DEP 是如何工作的?

您还可以 - 假设没有 ASLR - 确定可以发送到远程服务器的最大数据量并设置一个尽可能大的 nop sled,然后尝试跳入它。这将略微增加您的成功机会。

是否有可能暴力破解地址?

总有一种可能性,但您可能不想依赖它的可能性——特别是如果它是一个 64 位应用程序。您仍然可能对这篇论文感兴趣:防止地址空间布局随机化...

玩得开心,祝你好运!

于 2013-08-16T11:13:40.217 回答