Har*_*ari 10 c security buffer-overflow shellcode
我想理解这两种攻击之间的确切区别.据我所读:
缓冲区溢出:它覆盖堆栈上的ret地址,指向插入恶意代码的代码的另一部分.如此有效 - 在这里我们需要修改程序的源代码来实际执行攻击.
返回Libc-这里不使用修改源代码,而是使用C库提供的运行时函数调用(比如打开shell).这里用于函数调用的参数也在覆盖缓冲区中传递,最后在堆栈的ret部分之后.
以上是准确的描述吗?
另一个相关问题 - 是否有可能在没有实际修改原始程序的源代码的情况下进行缓冲区溢出攻击?可能是我们编写一个新程序并允许它修改某些内存部分(这是原始程序损坏的堆栈中的新的ret地址).然后,我认为这可能是不可能的,因为内核中的进程之间提供了内存保护.
caf*_*caf 12
在经典的缓冲区溢出漏洞中,溢出的堆栈缓冲区充满了要执行的机器代码(称为shellcode,因为它通常调用shell进程)和新的返回地址.新的返回地址将被精心设计为指向溢出的堆栈缓冲区本身.显然,这需要知道或猜测受攻击进程中该堆栈缓冲区的地址.
在那些日子里,进程的内存布局通常是高度确定性的 - 攻击者通常可以很好地预测堆栈缓冲区的位置(特别是如果他们确切知道目标软件的哪个版本受到攻击).为了在涉及一些猜测时提高成功的机会,活动shellcode通常会在大量可执行机器代码之前执行,这些代码不执行任何有用的操作 - 称为"NOP sled"或"NOP slide",其中"NOP"是执行"无操作"的机器代码指令的典型名称.返回到NOP雪橇中的任何位置都会产生预期的效果.
另一方面,"返回libc"漏洞不会导致被劫持的进程直接返回shellcode.相反,它会使进程逐个返回到库函数链的开头.这些库函数可能直接执行攻击者想要的操作,但更常见的是它们将用于间接执行攻击者的shellcode.
| 归档时间: |
|
| 查看次数: |
7625 次 |
| 最近记录: |