강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

작성자 없음

작성자 정보가 삭제된 글입니다.

모의해킹 실무자가 알려주는, 파일 업로드 취약점 공격 기법과 실무 사례 분석 : PART 1

[실습4-6] Null Byte 문자를 통한 다양한 환경에서의 검증 로직 우회 기법 실습

49 강좌 null byte 3번째 입력관련 문의

작성

·

9

·

수정됨

0

안녕하세요 아래 강좌를 듣고 있습니다^^

49. [실습4-6] Null Byte 문자를 통한 다양한 환경에서의 검증 로직 우회 기법 실습

의 17:00 의 강좌를 보면

null byte 를 cookie 헤더값에 수정하여

test.php(null) 을 보내서 스크립트를 실행할 수 있도록 강좌에는 진행되고 있습니다.

 

하지만, 제가 실행하는 코드 및 버프스위트에서는 마지막 쿠키 헤더에만 null 값이 계속 들어가지지 않고 있어서 혹시 제가 무언가 실수한 부분이 있는지 문의드립니다^^;

 

 

index.php

<?
    header("content-type: text/html; charset=UTF-8");
    setcookie("gubun", "file");
?>

<form action="upload.php" method="POST" enctype="multipart/form-data">
<input type="file" name="userfile">
<input type="submit" value="UPLOAD">
</form>

 

 

upload.php

<?
    header("Content-Type: text/html; charset=UTF-8");

    $gubun = $_COOKIE["gubun"];
    if(empty($_FILES["userfile"]["name"])) {
        echo "<script>alert('파일을 업로드하세요!');history.back(-1);</script>";
        exit();
    }

    $path = "./upload/";
    $filename = $gubun."_".$_FILES["userfile"]["name"];

    $file_info = pathinfo($path.$filename);
    $ext = strtolower($file_info["extension"]); //업로드 되는 파일의 확장자는 모든것을 소문자로 변환해주겠다.
   
    $ext_arr = array("php", "php3", "php5");

    if(in_array($ext, $ext_arr)) {
        echo "<script>alert('허용되지 않은 확장자입니다.');history.back(-1);</script>";
        exit();
    }

    if(!move_uploaded_file($_FILES["userfile"]["tmp_name"], $path.$filename)) {
        echo "<script>alert('파일을 업로드에 실패하였습니다.');history.back(-1);</script>";
        exit();
    }
?>

<li>업로드 성공 : <?=$path.$filename?></li>

 

버프스위트에서 repaet 에 계속 널바이트가 넘어오지 않아서 아래 구문을 추가해서 실행해보았는데도 null 이 적용되지 않고 있습니다.

 

    var_dump($_COOKIE["gubun"]);
    echo "HEX: " . bin2hex($_COOKIE["gubun"]);
    exit();

 

 

버프스위트 실행화면 (hex값 확인)

image.png

 

 

버프스위트 실행화면 ( null 적용 안됨 )

image.png

 

답변 2

0

원인을 찾았습니다.

body 에 디코딩하던 방식을

쿠키에서 %00 이 아닌 디코딩으로 넣다보니 안되는 문제였습니다. 감사합니다^^

0

안녕하세요, 인프런 AI 인턴입니다. 몽상가님.

현재 질문 주신 내용은 Null Byte를 활용한 URL 또는 쿠키 변조의 문제로 보입니다. 질문 주신 버프스위트와 쿠키 처리 방식에서 Null Byte가 의도한 대로 적용되지 않는 것 같군요. 이 문제는 시스템의 버전 차이나 PHP 설정에 따라 다르게 작동할 수 있습니다.

  1. 버프스위트 사용 방식: 버프스위트를 통한 요청 시, 헤더의 특정 값에 Null Byte를 설정할 때 일부 구성 요소 또는 네트워크 장비가 이 값을 무시하거나 제거할 수 있습니다. 이는 엔트로피를 줄이고 보안을 높이기 위한 설정 때문일 수 있습니다.

  2. PHP 버전 및 설정 관련 문제: 최신 PHP 버전에서는 Null Byte 처리가 다르게 이루어질 수 있습니다. 예를 들어, magic_quotes_gpc 설정이 있다면 Null Byte가 인식되지 않을 수도 있습니다. 해당 설정값을 Off로 설정해 보시길 권장드립니다. 이는 이전 질문 중 하나에서도 다루어졌습니다.

  3. 설치 환경의 차이: APM, XAMPP, 또는 비트나미와 같은 서버 구성을 사용할 때 설정 차이가 생길 수 있습니다. 특히, 특정 버전이나 플랫폼은 보안 처리를 강화하기 위해 Null Byte 인식 방법이 다를 수 있습니다.

관련하여 도움이 될만한 질문 및 답변 링크를 제공드리겠습니다:
- NULL 바이트 질문 드립니다. - Magic quotes 설정과 관련된 문제 해결 사례
- bitnami 사용중인데 널바이트 입력 시 fatal error가 발생합니다 - 설치 환경의 특성과 Null Byte 처리를 설명한 사례

위 내용을 참고하시고, 추가적인 실험이나 설정 수정을 통해 문제를 해결해 보실 수 있을 것입니다. 만약 추가적으로 궁금한 점이 있으시면 언제든지 질문해 주세요.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기