주소창의 기본값은 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 |