[문제]
[풀이]
문제를 살펴보면 터미널 창의 파일 목록을 확인했을 때 볼 수 있는 결과 값을 확인할 수 있다.
url을 살펴보면 file에 hello가 들어가 있는데, 문제를 통해 확인해보면 hello.php 가 hello로 변환되어 있다는 것을 볼 수 있다.
http://webhacking.kr:10001/?file=hello
그렇다면 flag.php 파일 또한 flag로 입력하면 보일 것이라 생각되는데, 직접 실행해보면 다음과 같다.
이렇게 FLAG is in the code라는 문자열만 출력되고 flag를 획득할 수 없다.
flag.php 소스코드를 읽어야 flag를 획득할 수 있는데 서버 내에 존재하는 flag.php 파일을 읽기 위해서는 LFI 취약점을 이용해야 한다.
http://webhacking.kr:10001/?file=php://filter/convert.base64-encode/resource=flag 를 입력하면 소스코드가 base64 인코딩된 형태로 출력된다.
이를 디코딩 하면
flag를 획득할 수 있다.
[핵심]
wrapper: 실제 데이터의 앞에서 어떤 틀을 잡아 주는 데이터 또는 다른 프로그램이 성공적으로 실행되도록 설정하는 프로그램
- 원래 php wrapper는 개발자들의 개발을 돕기 위해서 만들어진 기능
www.[우리가 공격할 웹 사이트의 주소].index.php?page=../../../../../../../../etc/passwd/(널바이트)
- 널바이트는 주소 뒤에 붙을 확장자(.php, .txt)등을 떼어내 주는 역할
- php가 버전 5 이상이 되면서 path 중간에 널바이트가 오면 주소 더 이상 읽지 않는 취약점이 사라짐
LFI(Local File Inclusion) 취약점
: 파일이 공격 대상의 서버에 위치할 때 이용할 수 있는 취약점
1. expect://
expect wrapper: system command 실행
ex) expect wrapper 가 필터링 당하지 않았다면 www.[공격할 웹 사이트의 주소].index.php?page=expect://ls
-> system command로 ls를 보냈기 때문에 디렉토리 목록 확인 가능
2. php://filter
php://filer wrapper: 다양한 I/O스트림을 다루는데 사용하는 wrapper
- encode/decode 옵션 사용해 서버 속 존재하는 문서 열람 가능
ex) www.[우리가 공격할 웹 사이트의 주소].index.php?page=php://filter/convert.base64-encode/resource=/etc/passwd
-> base64 방식으로 인코딩 된 etc/passwd의 값 획득 가능
3. zip://
zip:// wrapper: zip파일의 압축을 풀고 압축을 푼 파일안에 있는 코드를 실행시켜 주는 기능
ex) www.[우리가 공격할 웹 사이트의 주소].index.php?page=zip://file.zip#shell.php
-> web shell 실행
4.php://stdin, php://stdout and php://stderr
stdin, stdout, stderr로 연결.
5.php://fd/<fd number>
파일 디스크립터에 연결한다.
6.php://input
http의 body,즉 post 데이터를 입력받는다.
file_get_contents를 이용해 웹 상의 파일을 읽을 수 있다.
php include 취약점
php의 Include 함수는 인자로 전달된 파일을 읽은 후 해당 파일의 내용을 출력한다. 파일의 내용 중 php 코드 구문이 존재하면 해당 코드를 실행 한다.
include함수는 동적으로 다른 php 페이지를 로드해야할 때 사용한다.
include 함수는 파일의 확장자 또는 파일의 타입과는 상관없이 파일의 내용의 php 코드를 실행시킨다.
[출처]
https://opentutorials.org/module/4291/26819
https://watchout31337.tistory.com/m/148?category=901404
'Wargame > Webhacking.kr' 카테고리의 다른 글
[Webhacking.kr] Old - 27 (0) | 2021.08.19 |
---|---|
[Webhacking.kr] Old-19 (0) | 2021.08.12 |
[Webhacking.kr] Old-54 (0) | 2021.08.11 |
[Webhacking.kr] Old-39 (0) | 2021.08.11 |
[Webhacking.kr] Old 26 (0) | 2021.08.04 |