我从这里了解到有两种方法可以控制特权活动:setuid
和capability
。
但是当我在我的机器上玩时ping
,它似乎可以绕过这两种机制。
首先,确认我的机器/usr/bin/ping
有cap_net_raw
能力并且它使用SOCK_RAW
:
$ ll /usr/bin/ping
-rwxr-xr-x 1 root root 72K Jan 31 2020 /usr/bin/ping
$ getcap /usr/bin/ping
/usr/bin/ping = cap_net_raw+ep
$ strace -e socket ping <some-ip>
socket(AF_NETLINK, SOCK_RAW|SOCK_CLOEXEC, NETLINK_ROUTE) = 5
Run Code Online (Sandbox Code Playgroud)
复制二进制文件会删除该功能,但它仍然有效:
$ cp /usr/bin/ping ~
$ ll ~/ping
-rwxr-xr-x 1 user user 72K Nov 4 16:54 /home/user/ping
$ getcap ~/ping
[empty result]
$ ~/ping <some-ip>
[it works]
Run Code Online (Sandbox Code Playgroud)
我正在使用Ubuntu 20.04
和5.4.0-52-generic
。