提权的时候遇到了这种情况,故简单记录一下。
通过 find 命令执行命令 whoami ,可以看到确实是 root 用户:
但如果我们尝试使用 nc 反弹 shell 回来,会发现权限还是普通用户 alice:
这就很奇怪了,所以决定探究一下。
使用 find 执行 id 命令:
在反弹回的 shell 中执行 id 命令:
经过对比发现,find 执行 id 时,有一个 euid 为 root 权限,但是反弹 shell 中并没有。
何为 euid?euid 就是我们通常说的 suid, 或者叫 excute user id,它使文件执行时拥有该文件所有者的权限。
为了查看反弹 shell 的 euid,我通过执行 id -u 来查看:
可以看到该 shell 的 euid 为 1000,所以当然没有 root 权限。
现在搞清了出为什么 find 反弹回来的 shell 不具有 root 权限,那怎样才能是反弹回来的 shell 具有 root 权限呢?——这就需要使用到 bash 命令的 -p 参数。
默认情况下 bash 在执行时,如果发现 euid 和 uid 不匹配,会将 euid(即 suid) 强制重置为uid 。如果使用了 -p 参数,则不会再覆盖。
我们尝试使用如下命令获取 shell:
find test -exec /bin/bash -p ;
可以看到获取的 shell 为 root 权限。
ps:这里也说明,我们获取 shell 不一样非得通过 nc 反弹~