Перенаправление вывода из сценария оболочки в Linux перенаправляется в странное место после вызова из PHP exe c () - PullRequest
0 голосов
/ 22 марта 2020

Существует сценарий оболочки (bash), работающий на CentOS с SE Linux, установленным на Permissive, и он имеет только одну цель - записать что-то в файл:

[root@centos ~]$ cat /var/www/html/test.php
<?php
$output=shell_exec("/opt/sms/script.sh");
var_dump($output);
?>
[root@centos ~]$ cat /opt/sms/script.sh
#!/bin/bash

whoami > /tmp/a.txt

cat /tmp/a.txt
[root@centos ~]$ php -f /var/www/html/test.php
string(5) "root
"
[root@centos ~]$

Все хорошо уже! Но теперь давайте назовем его через PHP exe c, используя Apache, и вы получите в своем браузере следующее:

string(7) "apache "

, что все еще хорошо, пока вы не сделаете это:

[root@centos ~]$ cat /tmp/a.txt
root
[root@centos ~]$

что?

И затем вы делаете это:

[root@centos ~]$ find / -name a.txt 2>/dev/null
/tmp/systemd-private-689e87297de1452e98dcfaa5bd686a1f-httpd.service-gMJKi0/tmp/a.txt
/tmp/a.txt
[root@centos ~]$ cat /tmp/systemd-private-689e87297de1452e98dcfaa5bd686a1f-httpd.service- 
gMJKi0/tmp/a.txt
apache
[root@centos ~]$ cat /tmp/a.txt
root
[root@centos ~]$

Вопрос: почему вывод записывается в этот / tmpp / systemd - * / tmp. Файл .txt вместо простого /tmp/a.txt? Я предоставил АБСОЛЮТНЫЙ путь, который должен служить очень очевидной цели. Как / где контролируется, что мой вывод записан в другом месте?

1 Ответ

0 голосов
/ 22 марта 2020

Это часто называется "ch root jail", после системного вызова chroot (и команды оболочки), который позволяет вам установить каталог root процесса на что-то другое. Это эффективно помещает процесс в определенный подкаталог. Все абсолютные пути будут интерпретироваться относительно этого каталога root.

Это класс c и хорошо известная техника безопасности. Если один из ваших сценариев PHP пригоден для использования, злоумышленнику будет разрешено работать с файлами в тюрьме ch root, а остальная часть системы будет изолирована.

(systemd вероятно использует Linux пространства имен, а не chroot, но идея та же самая)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...