PWN

自我思考

操纵栈的基本条件是获得栈的读写权。scanf的错误在于可以向一个指针指向的地方无限不经检查的添加数据,因此当该指针是指向栈内空间时自由。

1
2
3
char s[5];
scanf("%s",s);
参数个数无所谓,从高向低压,不会逆向增长。

当可以自由执行时,就可以让函数跳到任意地址并通过栈构造参数来执行任意函数。即使是一般权限的shell拿到后也可以查看许多数据,获得这个程序的相关权限,扩大可执行任务。如果这个程序属于高权限用户并且有suid运行时权限提升的话,那么将会使低权限用户获得高权限。

若该程序对外提供服务,则可以用网络攻击。

软件层漏洞。