linux下/etc/shadow备忘以及竞争条件获取提权的原理

1、默认/etc/shadow的权限是000,对于linux下边权限000的文件只能root读取和写入,即使这个文件属于非root用户,该用户也不能读取写入该文件

2、/etc/shadow中保存了用户密码的密文,一般使用的是md5加salt的形式生成,例如明文密码是12345,保存在/etc/shadow 中的是 $1$qY9g/6K4$KTVzAcT.TMgkASuMWh6kJ1,

这一串密文中$1指明了使用md5算法,具体解释可以man crypt查看c语言中crypt函数的介绍,$1$qY9g/6K4$整个部分是salt部分,可以用crypt函数验证:

crypt("12345","$1$qY9g/6K4$");//结果就是$1$qY9g/6K4$KTVzAcT.TMgkASuMWh6kJ1

这样linux中shadow对密码的验证原理也就明了了。当然对于shadow中的密文,不仅可以使用md5的形式,还可以使用crypt原来就支持的des变种算法,例如密码是test,salt是tt,则调用crypt("test", 'tt')得到密文ttXydORJt50wQ,至于这里为什么用了des而不是md5可以看crypt的man文档

3、suid 权限的例子 例如passwd命令 ,passwd命令的权限user是root 但是额外设置了suid权限,这样,非root用户调用passwd就可以得到root的操作权限,所以普通用户使用passwd间接的修改了只有root可以改变的/etc/shadow文件

4、对于suid权限,c中access函数不能检测得到,我也是被坑了才发现的,access 对于文件读写执行权限的检查用的是真实调用者的权限

5、竞争条件获取提权关键点在于suid和symbolink

传送门:点击打开链接(竞争漏洞实验)

注意这个博客中的access用法错误!!!!

你可能感兴趣的:(linux,c/c++)