我班上的一名学生想出了一种利用我以前从未见过的缓冲区溢出的技术。 (坦率地说,我很惊讶它有效。)我很好奇是否(1)任何人之前已经看到过这样的事情,以及(2)这种类型的攻击是否过于“脆弱”而无法正常工作。
基本上,利用的想法是提供表单的输入
AA...A BBBB CC...C,
在stdin上,AA...A
导致溢出;保存的eip被BBBB
覆盖;而CC...C
是shellcode。然而,他没有用堆栈中CC...C
的地址覆盖保存的eip,而是用stdin内存中的地址覆盖了保存的eip(实际上,stdin+length(AA...A BBBB)
)。
(对于那些好奇的人:他这样做的原因是因为堆栈上CC...C
的地址包含一个空字节,因此很难用该值覆盖保存的eip。)
如果这一般起作用,似乎这是规避ASLR的另一种方式。
思想?