带有 C 包装器的脚本上的 Setuid

mah*_*ooL 0 php c linux centos suid

我只想使用具有 root 权限的 php 脚本和像本教程一样的 C 包装器。

ls -l :

-rwsr-xr-x. 1 root root 6466 Aug 15 03:07 createConfig
-rwxrwxrwx. 1 root root  102 Aug 15 04:23 test.php
-rw-r--r--. 1 root root  822 Aug 14 21:35 index.php
Run Code Online (Sandbox Code Playgroud)

创建配置.c:

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>

int main(void) {
    system("/usr/bin/php /var/www/html/test.php");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

测试.php:

<?php
mkdir("/root/ourDir");
?>
Run Code Online (Sandbox Code Playgroud)

索引.php :

<?php
exec("/var/www/html/createConfig");
?>
Run Code Online (Sandbox Code Playgroud)

但是当在浏览器上运行 index.php 时,我收到了这个错误:

sh: /var/www/html/createConfig: Permission denied
Run Code Online (Sandbox Code Playgroud)

谢谢

Las*_*lko 5

你应该setgid(getegid()); setuid(geteuid())在打电话之前放system()

作为旁注,在您的示例中设置文件权限的方式,您的“解决方案”是完全不安全的。任何用户都可以更改要由该 setuid C 程序运行的 .php 脚本的内容,然后使用 C 程序将更改后的内容作为 .php 执行root