我正在开发一个项目(实际上是一个竞赛)来利用在远程服务器上运行的应用程序。我确实有他们编译的二进制文件与一些调试信息(没有源代码)和没有堆栈保护。 我设法将shellcode注入到堆栈中并覆盖返回地址,这样它也可以毫无问题地执行。
唯一的问题是我注入了一个硬编码的返回地址。我想地址可能会有很小的差异,具体取决于操作系统和架构(应该是32位)。
我不知道服务器是否使用ASLR执行二进制文件。但它已被停用 - 是否有一种方法可以注入动态合适的返回地址?
我还在本地试图通过连接到在我自己的机器上运行的服务器来强制执行可能的ASLR地址。由于如果返回地址不正确,分叉进程崩溃,则不会释放文件描述符,并且在1024尝试之后不再有可能进行连接。 是否有可能对地址进行暴力破解?
谢谢!
答案 0 :(得分:0)
是否有一种方法可以注入动态合适的返回地址?
是的,但它几乎不取决于应用程序,您将寻找泄漏的指针,允许您计算可用的地址,如模块基地址。 How do ASLR and DEP work?
您也可以 - 假设没有ASLR - 确定您可以发送到远程服务器并尽可能大地设置nop雪橇的最大数据量,然后尝试跳入其中。这会略微增加你的成功机会。
是否有可能对地址进行暴力破解?
有一种可能性,但你可能不想依赖它的概率 - 特别是如果它是64位应用程序。这篇论文仍然可能让您感兴趣:Protecting Against Address Space Layout Randomization ...
玩得开心,祝你好运!