缓冲区溢出是一种高级的攻击手段,通过对缓冲区写超长度内容从而造成溢出,
缓冲区溢出漏洞简介
。破坏程序堆栈使程序执行其他命令,从而达到制造ROOT权限的目的,不过只有将溢出送到能够以ROOT权限运行命令的区域才能见效果,哈哈哈.缓冲区利用程序将能运行的指令放在了能运行ROOT权限的内存中,从而一旦运行这些指令,我们就以ROOT权限控制了计算机。给个例子看看:
[root@redhat] # cat example0.c
/*将examplel.c文件内容输出*/
Void function (char* str) {
Char(buffer,str);
}
上面的ftrcpg ( ) 直接将str 的内容复制到缓冲区中。这样只要str 的长度大于16 ,就会造成缓冲区的溢出,使程序出错。
在相似 strcpg 的问题的标准函数还有 strcat ( ) \ sprintf (). 以及在循环内的:getc ( ) fgetc ( )
Getchar( ) 还有 在这里就不多说了。
缓冲溢出就是在缓冲区写入过多的数据,我们来看下面的:
[root@redhat root] # cat example2.c
Void function (char* str) {
Char buffer,str [16]
strcpy (buffer,str);
}
Void main ( ) {
Char large_string[256]
Int I ;
Forci=0; I<225; i++)
Lrge_string[i] ‘A’ ;
Function(large_string);
}
哈哈哈这个吗就是一个缓冲区溢出编码错误,函数将一个字符串不经过边界检查,复制到另一内存区域,
电脑资料
《缓冲区溢出漏洞简介》(https://www.unjs.com)。程序的执行结果就成为了“segme ntation fault(core dumped)”或类似的出错信息:因为从buffer 开始的256个字节都将被*str 的内容A覆盖,包括sft , ret 甚至 *str。A的十六进值是 0x41 ,所以函数的返回地址变成了0x41414141,这超出了地址空间,所以出现段错误。缓冲区溢出允许我们改变一个函数的返回地址。哈哈哈哈 只要我们知道这种方式就可以改变程序的执行顺序。了解了这个原理,只要我们费心构造一些可执行代码,便可轻松的得到系统的shello . <不过遗憾的是还要麻烦我们精确的计算出相关的EBP 和 EIP>。在最后我想咨询一下,有关《格式化漏洞》的信息。有原理和示例更欢迎 。请不要说我有点自私阿哈哈哈。
为了发掘大家的潜力我在这里介绍一下格式化漏洞的优点:
我们可以利用程序覆盖上面所提到的 main ( ) 的返回地址。利用prin tf ( ) 函数的格式化字符串漏洞:我们可以任意读取和写入数据,哈哈哈不用说了 如果我们想执行有效的shell
就不是什么问题了。
本帖属于黑基原创