我认为shellcode中不允许空字节。在理解一些shellcode的同时,我似乎遇到了一些包含null的代码,并且完美地工作,为什么这样呢?shellcode中的空字节?
http://pastie.org/private/feg8du0e9kfagng4rrg
我认为shellcode中不允许空字节。在理解一些shellcode的同时,我似乎遇到了一些包含null的代码,并且完美地工作,为什么这样呢?shellcode中的空字节?
http://pastie.org/private/feg8du0e9kfagng4rrg
shellcode中空字节的问题仅适用于在使用C标准字符串库的字符串处理中使用溢出注入的情况,其中空字节表示字符串结束,因此复制应停止。利用C风格的字符串开发缓冲区溢出是90年代中期最流行的shellcode注入方法。目前,大多数C代码使用其他函数(OpenBSD strlcpy/strlcat set,* _s()set,或本地生成的函数)来保护(AFAIK),并且C++已经获得了没有空字节的字符串库终止。目前,大多数漏洞使用一些编程错误,因为它们的缓冲区太小,或者在某些边界之间发生传入值错误检查。
我没有分析你链接的代码,但似乎它使用不正确的二进制数据中的TLV处理。无论如何,由于二进制数据处理(但以另一种方式可以利用),它是无效的。
这些使用空指针在环境变量....探索!
断开你的调试器并找出答案。询问不会帮助你学到很多东西。 – 2012-03-19 19:53:00