본문 바로가기

Wargame(hacking)/webhacking.kr

Webhacking.kr : old-25

 

< 문제 해결 >

 

 

그림 1

 

그림 1과 같이 파라미터에 flag를 요청하면, "FLAG is in the code"라는 메시지가 출력된다. 하지만 페이지 내를 살펴보고, 패킷을 잡아봐도, flag에 대한 아무런 단서가 보이지 않았다. 이 문제는 PHP-include 함수, PHP-Wrapper, LFI 취약점( 서버 로컬 파일을 include 하는 취약점 )과 관련이 있다.

 

 해당 문제에서는 아래 코드1과 같이, php://filter/ 를 사용해 해결하였다. 

 

<코드 1>
http://webhacking.kr:10001/?file=php://filter/convert.base64-encode/resource=flag

 

그림 2

 

그림 2와 같이 php-wrapper를 사용하여, base64로 인코딩 된 결과를 출력하게끔 만들었다.  해당 결과를 디코딩 해준다면, 아래 코드 2와 같은 php 코드를 볼 수 있으며, FLAG를 획득하게 된다. 

 

< 코드 2>
<?php
  echo "FLAG is in the code";
  $flag = "FLAG{this_is_your_first_flag}";
?>

 

 

< 주요 PHP Wrapper >

 

1. expect:// -> system command 실행 가능. 

 

2. php://filter  

 

3. zip:// : 압축을 풀고 그 안에 있는 파일의 코드 실행. (ex. 웹쉘 )

 

 

 

 

한줄 평: PHP-Wrapper..? 전혀 몰랐다.

 

 

 

< 참고 >

 

 

https://www.php.net/manual/en/wrappers.php

 

PHP: Supported Protocols and Wrappers - Manual

Even though their names will be the same, you can have more than one //memory or //temp stream open concurrently; each time you fopen() such a stream, a NEW stream will be opened independently of the others.This is hinted at by the fact you don't add any u

www.php.net