본문 바로가기
[웹해킹]/[Webhacking.kr]

[Webhacking.kr] 25번

by Hevton 2020. 10. 5.
반응형

이런 창이 나온다.

 주소창의 기본값은 file=hello 이다.

따라서 file=index도 해봤는데 아무것도 출력되지 않고

file=flag를 해보니 아래와 같이 출력된다.

flag is in this code라고 적혀있다.

이 php 파일의 전체코드를 읽어오면 될 것 같다.

(flag is in this code는 해당 php파일의 실행 결과인 것 뿐이고)

 

 

LFI 취약점을 이용한 공격에 대한 문제다.

 

LFI (Local File inclusion) : 서버에 있는 파일에 접근하여 공격하는 방식.

해당 취약점은 php로 만들어진 웹 사이트에서 include, require, fopen 등의 함수를 사용했을 때 발생한다.

해당 문제에서 index.php파일의 메타데이터로 file이란 키를 통해 다른 파일들을 읽어들이고 있으니, 위의 함수들을 사용했겠죠?

(아마 include($_GET['file'].'.php'); 예상)

 

받아온 입력값을 경로에 추가하기 때문에 발생하는 취약점이다.

 

이런 LFI 취약점에 대한 공격으로, 경로값에 NULL Byte를 추가하는 널 바이트 인젝션을 시도했었는데, php 버전 5 부터 NULL Byte가 오면 주소를 더 이상 읽지 않던 취약점이 사라졌다.

 

그래서 PHP wrapper 란 것을 이용한다.

PHP Wrapper는 원래 개발자를 위한 도구 정도인데, 이런 취약점에서도 이용할 수 있다.

그리고 그 중 php://filter라는 것을 이용한다.

 

▶︎ php://filter

php://filer wrapper는 다양한 I/O스트림을 다루는데 사용하는 wrapper입니다.

이 wrapper를 사용할 때 우리는 encode/decode 옵션을 사용하여 서버 안에 존재하는 문서들을 열람 할 수 있습니다.

예를 들어 

www.[우리가 공격할 웹 사이트의 주소].index.php?page=php://filter/convert.base64-encode/resource=/etc/passwd

처럼 활용할 수 있습니다.

위의 방식으로 공격을 진행하게 되면 우리는 base64 방식으로 인코딩 된 etc/passwd의 값을 얻을 수 있을 것 입니다.

- 출처 https://www.opentutorials.org/module/4291/26819

 

 

우리는 현재 디렉토리에 있는 flag.php의 파일을 읽어와야 하므로,

php://filter/convert.base64-encode/resource=flag 를 입력해준다.

확장자 php를 안붙이는 이유는, 문제 사이트에서 디폴트로 떼서 보내길래 빼서 적어줬다.

 

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

 

그럼 이런 값이 나온다

PD9waHAKICBlY2hvICJGTEFHIGlzIGluIHRoZSBjb2RlIjsKICAkZmxhZyA9ICJGTEFHe3RoaXNfaXNfeW91cl9maXJzdF9mbGFnfSI7Cj8+Cg==

 

이걸 base64 디코딩을 해주면

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

이렇게 flag.php의 소스 코드를 전부 확인해 볼 수 있다.

 

 

FLAG{this_is_your_first_flag} 이 값을 webhacking.kr 사이트의 Auth 메뉴에 가서 넣어주면 끝.

 

반응형

'[웹해킹] > [Webhacking.kr]' 카테고리의 다른 글

[Webhacking.kr] 27번  (0) 2020.10.07
[Webhacking.kr] 26번  (0) 2020.10.05
[Webhacking.kr] 24번  (0) 2020.10.05
[Webhacking.kr] 23번  (0) 2020.10.03
[Webhacking.kr] 21번  (0) 2020.10.02