URL을 자세히 보면 file 변수 값이 GET 방식으로 넘어간다는 것을 알 수 있고 file이라는 이름으로 전달된 파라미터 뒤에 .php가 자동으로 붙어 해당 내용을 회색 박스 내에 출력하고 있다.
file에 flag를 넘겼을 때, FLAG is in the code라는 문자열이 보인다. code를 분석해야 한다.
파일 경로 취약점을 알아보기 위해서 ?file=../../../../../../etc/passwd 와 같이 입력해주었으나(LFI 공격)
이 ../ 명령어가 필터링이 되어 file=etc/passwd로 인식되어 해당 공격이 실패한다는 것을 알았다.
이 이후로는 더 이상 해결방법을 모르겠어서 검색을 통해 이 문제에선 PHP wrapper를 이용한다는 정보를 알아냈다.
+) php가 버전 5 이상이 되면서 path 중간에 널바이트가 오면 주소를 더 이상 읽지 않는 취약점이 사라졌기 때문에 php wrapper를 사용하여 lfi 공격을 수행해야 하는 것이다.
◎ wrapper : 래퍼
래퍼는, 실제 데이터의 앞에서 어떤 틀을 잡아 주는 데이터 또는 다른 프로그램이 성공적으로 실행되도록 설정하는 프로그램이다.
php://filter wrapper
:: 다양한 I/O스트림을 다루는데 사용하는 wrapper 이다.
:: 사용자 입력과 같은 안전하지 않은 소스로부터의 데이타를 유효성 검사하여 필터링하는데 사용되는 방식이다.
이 wrapper를 사용할 때 우리는 encode/decode 옵션을 사용하여 서버 안에 존재하는 문서들을 열람할 수 있다.
ex) www.[우리가 공격할 웹 사이트의 주소].index.php?page=php://filter/convert.base64-encode/resource=/etc/passwd
처럼 활용할 수 있다.
위의 방식으로 공격을 진행하게 되면 우리는 base64 방식으로 인코딩 된 etc/passwd의 값을 얻을 수 있다.
출처 : https://opentutorials.org/module/4291/26819
참고 : https://www.php.net/manual/en/wrappers.php.php
http://webhacking.kr:10001/?file=flag
→ http://webhacking.kr:10001/?file=php://filter/convert.base64-encode/resource=flag
'WEB > WEB Hacking' 카테고리의 다른 글
[Webhacking.kr] Challenge(old) 27번 풀이 (0) | 2021.05.30 |
---|---|
[Webhacking.kr] Challenge(old) 26번 풀이 (0) | 2021.05.30 |
[Webhacking.kr] Challenge(old) 20번 풀이 (0) | 2021.05.23 |
[Webhacking.kr] Challenge(old) 19번 풀이 (0) | 2021.05.23 |
[Webhacking.kr] Challenge(old) 18번 풀이 (0) | 2021.05.23 |