@1. 基本思路
控制eip使程序流程流向glibc函数,而不是shellcode所在的堆栈上。system(),exit()……
@2. 规划如下:
缓冲区 --> 溢出
ebp --> 溢出
eip --> system()地址
vars --> 填充内容(一般是4个字节,作为system()返回之后的eip)
--> '/bin/sh'
@3. write vuln2.c and compile it with order 'gcc -mpreferred-stack-boundary=2 -fno-stack-protector -o viln2 vuln2.c ' 去掉"-z execstack"是加上堆栈不可执行。
@4. 关闭地址随机化,echo 0 > /proc/sys/kernel/randomize_va_space
@5. find where is glibc's system() and where is "/bin/sh"
在gdb里面寻找: (gdb) print system
$1 = {<text variable, no debug info>} 0xb7e52260 <__libc_system>
使用程序search.c寻找:
编译search.c出错:在函数‘main’中:
控制eip使程序流程流向glibc函数,而不是shellcode所在的堆栈上。system(),exit()……
@2. 规划如下:
缓冲区 --> 溢出
ebp --> 溢出
eip --> system()地址
vars --> 填充内容(一般是4个字节,作为system()返回之后的eip)
--> '/bin/sh'
@3. write vuln2.c and compile it with order 'gcc -mpreferred-stack-boundary=2 -fno-stack-protector -o viln2 vuln2.c ' 去掉"-z execstack"是加上堆栈不可执行。
@4. 关闭地址随机化,echo 0 > /proc/sys/kernel/randomize_va_space
@5. find where is glibc's system() and where is "/bin/sh"
在gdb里面寻找: (gdb) print system
$1 = {<text variable, no debug info>} 0xb7e52260 <__libc_system>
使用程序search.c寻找:
编译search.c出错:在函数‘main’中: