[webhacking.kr] old-19 문제

2026. 1. 29. 23:23·워게임/webhacking.kr

1. 문제 정보

  • 문제 번호 : old -19
  • 문제 점수 : 25점

2. 문제 분석

문제 19번에 들어가면 파일이 업로드하는 창이 나온다.

파일을 올리면 done이 나오고 아무 일도 안 일어난다.

 

소스코드를 보면 ., <, >,/를 파일 이름에서 필터링한다.

./{upload}/에 파일이 올라간다.

 

ini_set 함수는 PHP 환경 설정을 코드로 직접 제어할 수 있게 해 준다.

ini_set으로 변경한 설정은 해당 스크립트(페이지)의 실행이 끝나면 없어진다.

display_errors 값: 0 (끄기) 또는 1 (켜기) 설명: 스크립트 실행 중 발생한 에러를 화면에 보여줄지 결정한다. 주로 개발 중에는 1로 설정해 디버깅을 하지만, 실제 운영 중인 사이트에서는 경로 정보나 DB 구조 같은 민감한 정보가 노출될 수 있어 반드시 0으로 꺼두어야 한다.

<?php
  include "../../config.php";
  include "./inc.php";
  if($_GET['view_source']) view_source();
  error_reporting(E_ALL);
  ini_set("display_errors", 1);
?><html>
<head>
<title>Challenge 41</title>
</head>
<body>
<?php
  if(isset($_FILES['up']) && $_FILES['up']){
    $fn = $_FILES['up']['name'];
    $fn = str_replace(".","",$fn);
    $fn = str_replace("<","",$fn);
    $fn = str_replace(">","",$fn);
    $fn = str_replace("/","",$fn);

    $cp = $_FILES['up']['tmp_name'];
    copy($cp,"./{$upload_dir}/{$fn}");
    $f = @fopen("./{$upload_dir}/{$fn}","w");
    @fwrite($f,$flag);
    @fclose($f);
    echo("Done~");
  }
?>
<form method=post enctype="multipart/form-data">
<input type=file name=up><input type=submit value='upload'>
</form>
<a href=./?view_source=1>view-source</a>
</body>
</html>

 


3. 풀이

이 문제의 핵심은 코드가 숨기고 있는 $upload_dir 경로를 알아내는 것이다.

 

ini_set("display_errors", 1); 설정이 여기서 결정적인 힌트가 된다.

서버가 에러를 감추지 않고 우리에게 보여주도록 설정되어 있기 때문이다.

 

운영체제마다 파일 이름이나 전체 경로의 길이에 제한이 있다. 만약 이 제한을 넘어서는 아주 긴 이름의 파일을 업로드하려고 시도하면, PHP의 copy 함수는 파일을 복사하지 못하고 에러를 발생시킬 것이다.

 

burp suite로 파일이름을 아주 길게 요청하면 

 

에러 메시지가 나오고 파일 경로가 나오게 된다.

 

파일이름에. 을 뺀 상태로 요청하면 Flag가 나온다

 


4. 요약

  • ini_set 설정으로 인해 에러 메시지가 출력된다는 점을 이용해 소스코드에 은닉된 업로드 경로를 파악해야 한다.
  • 파일 이름을 시스템 허용 길이보다 길게 조작하여 전송함으로써 강제로 에러를 유발하면 경고 메시지에서 전체 경로가 노출된다.
  • 확인된 경로를 통해 업로드한 파일에 접근하면 소스코드 로직에 의해 파일 내부에 쓰인 플래그를 획득할 수 있다.

 

 

'워게임 > webhacking.kr' 카테고리의 다른 글

[webhacking.kr] old-51 문제  (0) 2026.01.30
[webhacking.kr] old-43 문제  (0) 2026.01.30
[webhacking.kr] old-1문제  (0) 2026.01.27
[webhacking.kr] old-23문제  (1) 2026.01.27
[webhacking.kr] old-36문제  (0) 2026.01.27
'워게임/webhacking.kr' 카테고리의 다른 글
  • [webhacking.kr] old-51 문제
  • [webhacking.kr] old-43 문제
  • [webhacking.kr] old-1문제
  • [webhacking.kr] old-23문제
yt_5246
yt_5246
yt5246 님의 블로그 입니다.
  • yt_5246
    yt의 공부 블로그
    yt_5246
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 분류 전체보기 (61)
      • IT (1)
      • Security (11)
        • 시스템해킹 (3)
        • 리버싱 (6)
        • 암호학 (0)
        • tools (2)
      • Book (0)
      • 자격증 (3)
      • 워게임 (46)
        • DVWA (7)
        • WebGoat (4)
        • webhacking.kr (35)
      • 버그바운티 (0)
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
yt_5246
[webhacking.kr] old-19 문제
상단으로

티스토리툴바