自我思考
操纵栈的基本条件是获得栈的读写权。scanf的错误在于可以向一个指针指向的地方无限不经检查的添加数据,因此当该指针是指向栈内空间时自由。123char s[5];scanf("%s",s);参数个数无所谓,从高向低压,不会逆向增长。
当可以自由执行时,就可以让函数跳到任意地址并通过栈构造参数来执行任意函数。即使是一般权限的shell拿到后也可以查看许多数据,获得这个程序的相关权限,扩大可执行任务。如果这个程序属于高权限用户并且有suid运行时权限提升的话,那么将会使低权限用户获得高权限。
若该程序对外提供服务,则可以用网络攻击。
软件层漏洞。