문제에 들어가면 쿼리스트링으로 file에 hello가 전달되고 있다. 페이지는 현재 경로의 파일들을 보여주는 듯하며 file에 파일명을 입력하면 내용을 보여주는 듯 보였다.
당연히 file에 flag를 넘겨 보았다.
다음과 같은 문자열만 나올 뿐 내가 원하는 flag는 나오지가 않았다. 가만 생각해보니 php 코드는 프론트에서 보이지 않기 때문에 개발자가 의도적으로 echo를 해주지 않는 이상 보이지가 않는게 당연하다.
당연히 flag는 echo를 해주고 있지 않을거기 때문에 flag.php를 그대로 볼 수 있는 방법이 없나 생각했다.
php wrapper을 이용해서 base64 인코딩된 값으로 가지고 오도록 했다.
이 값을 디코딩하면 flag.php의 전체 코드일 것이다.
php wrapper
먼저 wrapper, 래퍼란 말 그대로 감싸준다는 의미를 가진다. 래퍼는 실제 데이터 앞에서 어떤 틀을 잡아주는 프로그램이다. 인터넷 상에서 흔히 쓰는 http:// 또한 래퍼라고 볼 수 있다.
php는 다양한 내장 래퍼들을 지원하며, fopen(), copy(), file_exists(), filesize() 같은 것들이 있다.
심지어 커스텀하여 사용도 가능하다고 한다.
php가 지원하는 래퍼들 중 LFI나 RFI 취약점에 이용이 가능한 래퍼가 있다.
1. except://
system command를 실행해준다.
ex) http://mooji.kr?page=except://ls
2. php://filter
다양한 I/O 스트림을 다룬다.
ex) http://mooji.kr?page=php://filter/convert.base64-encode/resource=/etc/password
convert.base64-encode: 데이터를 base64로 인코딩
resource: 필터링할 stream을 명시
3. zip://
zip파일을 풀고 zip파일 안에 있는 특정 파일을 실행한다.
ex) http://mooji.kr?page?zip://file.zip#shell.php
이외에도 다양한 래퍼들이 존재한다!
'Web Hacking > Webhacking.kr' 카테고리의 다른 글
[Webhacking.kr] old-27 write up (0) | 2024.03.01 |
---|---|
[Webhacking.kr] old-23 write up (5) | 2024.03.01 |
[Webhacking.kr] old-38 write up (2) | 2024.02.26 |
[Webhacking.kr] old-24 write up (0) | 2024.02.26 |
[Webhacking.kr] old-54 write up (2) | 2024.02.26 |