본문 바로가기

Webhacking.kr

old-28

취약점 분석

우선 문제 페이지를 보자.

우선, 다음과 같은 일반적인 Webshell 업로드를 시도해 본다.

<?php $_GET['cmd']?>

결과

이 문제는 파일 내용을 통해 PHP코드를 올리려고 하면 “<”문자를 “”으로 필터링 해버리기 때문에 PHP 코드를 통한 익스플로잇은 불가하다.

혹시 .htaccess 형식의 파일은 필터링하는지 확인해 보기로 했다.

일단 이 파일을 업로드 하는 것을 필터링하지 않는다면 이를 이용해 서버의 설정을 바꿔볼 수 있다.

비록 .htaccess라는 파일 내용을 브라우저로 볼 수는 없으나, 최소한 업로드는 된다.

그럼 이점을 이용해 Apache의 필요한 설정을 수정한다.

 

익스플로잇

  • 문제에서는 Mission : read ./upload/flIanPW53NTd/flag.php 라고 하였다.
  • ./upload/flIanPW53NTd/flag.php가 실행된 페이지를 보는 것이 아니라, flag.php 코드가 소스코드 그대로 브라우저에 드러나도록 하여야한다.
  • 이를 위해, .htaccess파일에 PHP 스크립트의 실행을 중지하는 설정을 넣는다.

시도 1

# /source 폴더에서 PHP 코드 보기용
RemoveHandler .php
RemoveType .php
AddType text/plain .php

 

결과:

Internal Server Error

시도 2

<FilesMatch "\.php$">
    SetHandler text/plain
</FilesMatch>

에러 발생 원인 : PHP-FPM 환경 (요즘 대부분 이 방식)

  • SetHandler text/plain 또는 RemoveHandler 같은 구문이덮어씌워지면서 충돌이 발생
  • Apache의 mod_proxy_fcgi(PHP-FPM 핸들러)에 의해 이미 점유된 .php 확장자에

Payload

# .htaccess 파일을 만들어 다음 내용으로 업로드
php_flag engine off
  • 이 설정은 서버의 PHP 스크립트의 실행을 정지하는 명령이다.
  • 이 설정은 mod_php 환경에서는 즉시 적용되어 PHP 실행이 멈추고, 브라우저에는 PHP 소스 코드가 그대로 출력된다.
  • 단, PHP-FPM(즉, proxy_fcgi, php-fpm.sock)을 사용하는 경우엔 이 설정이 무시된다.

위 파일을 올리고 접속해보자.

 

Reference

https://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=qna_install&wr_id=83427

 

WWW.PHPSCHOOL.COM

개발자 커뮤니티 1위 PHPSCHOOL.COM 입니다.

www.phpschool.com

 

'Webhacking.kr' 카테고리의 다른 글

old-43 RevengE  (0) 2026.05.13
baby toctou(Race Condition)  (0) 2026.05.12
old-30  (0) 2026.05.12
old-40  (0) 2026.05.12
old-22  (0) 2026.05.12