PHP에서 다음과 같은 코드가 있습니다.
header("Content-Type: text/plain");
exec("/bin/bash -c 'ls --color=always'", $result);
echo implode("\n", $result);
그리고 결과가 있습니다 (탈출이 보이지 않음)
Makefile
README
Yann Tiersen - Comptine d'un autre ete L'apres midi.mp3
bush-src.js
bush.js
bush.min.js
[0m[01;34mcgi-bin[0m
config.json
[01;34mcss[0m
favicon.ico
foo.png
index.php
[01;34mlib[0m
ls.txt
test.php
test.php~
[01;32mtest.txt[0m
디렉토리 및 실행 파일에 대한 ANSI 이스케이프 코드를 표시하지만 명령 줄에서 호출하면
php -r "exec('bash -c \"ls --color=always\"', \$result);echo implode(\"\\n\", \$result);" | less
나는 이것을 얻었다 :
bush.js
bush.min.js
bush-src.js
ESC[0mESC[01;34mcgi-binESC[0m
config.json
ESC[01;34mcssESC[0m
favicon.ico
ESC[01;35mfoo.pngESC[0m
index.php
ESC[01;34mlibESC[0m
ls.txt
Makefile
README
test.php
test.php~
ESC[01;32mtest.txtESC[0m
ESC[00;36mYann Tiersen - Comptine d'un autre ete L'apres midi.mp3ESC[0m
png 및 mp3에는 ANSI 이스케이프 코드가 있는데, 웹 페이지의 php exec가 반환하지 않는 이유는 무엇입니까?
당신은 아마이 $LS_COLORS
사용자의 환경 변수에 정의 된 곳 ~/.bashrc
/ ~/.zshrc
(아마의 호출을 개입을 ... eval "$(dircolors)"
).
은 php
해당 포함하여 쉘의 환경을 상속 명령 줄에서 실행하는 것이 $LS_COLORS
변수입니다.
에 의해 시작된 사람은 그 안에있을 것 같지 않은의 환경을 apache2
상속받습니다 . 대화 형으로 실행되지 않을 때 ( / /에 의해 호출되는 경우를 제외하고) 읽지 않습니다 (어쨌든 아파치를 실행하는 사용자의 경우 ).apache2
$LS_COLORS
bash
~/.bashrc
~/.bashrc
sshd
rshd
telnetd
주의 php
의 exec()
당신이 (특히 다른 일을 시작할 필요가 없습니다 이미는 쉘을 시작 bash
서쪽에있는 느린 쉘입니다).
exec('ls --color=always', $result);
충분해야합니다.
$ strace -fe execve php -r 'exec("bash -c echo\ test");'
execve("/usr/bin/php", ["php", "-r", "exec(\"bash -c echo\\ test\");"], [/* 49 vars */]) = 0
[pid 3608] execve("/bin/sh", ["sh", "-c", "bash -c echo\\ test"], [/* 49 vars */]) = 0
[pid 3608] execve("/bin/bash", ["bash", "-c", "echo test"], [/* 48 vars */]) = 0
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다