我认为shellcode中不允许使用空字节。在理解一些shellcode的同时,我似乎遇到了一些包含null的代码并且工作完美,为什么会这样?
答案 0 :(得分:3)
shellcode中空字节的问题仅适用于使用C标准字符串库在字符串处理中使用溢出注入的情况,其中空字节表示字符串的结尾,因此复制将停止在其上。利用C风格字符串利用缓冲区溢出是90年代中期最流行的shellcode注入方法。目前,大多数C代码是(AFAIK)使用其他函数(OpenBSD strlcpy / strlcat集,* _s()集或本地函数)来保护它们,以及较旧的环境,因为C ++已经有了没有空字节的字符串库终止。目前,大多数漏洞使用一些编程错误作为太小的缓冲区,或者当它应该在某些边界之间时传入值错误检查。
我没有分析您链接的代码,但似乎在二进制数据中使用了错误的TLV处理。无论如何,由于二进制数据处理(但以另一种方式可利用),它无效。
答案 1 :(得分:1)
这些使用环境变量中的空指针....探索!!!