minhui study
Webhacking.kr 25번 본문
Challenge 25 - 150 Points
25번을 누르면 첫 화면은 다음과 같다.
url에 file=hello.php라고 입력했을 때는 아무것도 나오지 않는다.
그래서 flag.php을 열기 위해서 주소창에 flag를 입력해보면 FLAG is in the code가 나온다.
이를 통해 아마도 flag.php코드를 본다면 flag를 얻을 수 있을 것이라는 걸 짐작할 수 있다.
여기서 잠깐 필요한 지식인 lfi라고 알려진 취약점과 php wrapper에 대해 짚고 넘어가보자
* lfi란 local file inclusion의 약자로 우리가 공격할 서버에 있는 파일을 사용하여 공격을 수행하는 방법이다. lfi취약점은 php로 만들어진 웹 사이트에서 include, require, require_once, file_get_contents, fopen 등의 함수를 사용했을 때 발생한다.
lfi공격은 다음과 같은 형식으로 구성되어 있다.
www.[우리가 공격할 웹 사이트의 주소].index.php?page=../../../../../../../../etc/passwd/(널바이트)
여기서 널 바이트는 주고 뒤에 붙을 확장자(.php, .txt)등을 떼어내 주는 역할이다. 그러나 php가 버전 5이상이 되면서 path중간에 널바이트가 오면 주고를 더 이상 읽지 않는 취약점이 사라졌기 때문에 php wrapper를 사용하여 lfi공격을 수행해야 한다. php wrapper에는 수많은 종류들이 존재하지만 그 중에서 우리가 유용하게 사용할 수 있는 wrapper 3가지에 대해서 알아보자
(1) expect://
expect wrapper는 우리에게 system command를 실행시켜준다.
www.[우리가 공격할 웹 사이트의 주소].index.php?page=expect://ls
위의 예시에서는 system command로 ls를 보냈으므로 우리에게 디렉토리들을 보여줄 것이다.
( expect wrapper가 필터링 당하지 않았다는 가정하에)
(2) php://filter
php://filter wrapper는 다양한 I/O스트림을 다루는데 사용하는 wrapper이다.
이것을 사용할 때 우리는 encode/decode 옵션을 사용하여 서버 안에 존재하는 문서들을 열람할 수 있다.
www.[우리가 공격할 웹 사이트의 주소].index.php?page=php://filter/convert.base64-encode/resource=/etc/passwd
위의 방식으로 공격을 진행하면 우리는 base64방식으로 인코딩된 etc/passwd값을 얻을 수 있다.
(3) zip://
zip://wrapper는 zip파일의 압축을 풀고 압축을 푼 파일 안에 있는 코드를 실행시켜 주는 기능을 한다.
www.[우리가 공격할 웹 사이트의 주소].index.php?page=zip://file.zip#shell.php
우리는 flag.php 코드를 확인해야 하므로 사용할 php wrapper는 php://filter이다.
php://filter/convert.base64-encode/resource=
위와 같은 명령을 통해 사용할 수 있는데 이 공격의 목표는 flag.php 라는 페이지의 소스를 긁어오는 것이므로
주소?pages=php://filter/convert.base64-encode/resource=flag 를 적어보자.
다시 한 번 말하지만 여기서 .php를 적지 않는 이유는 위에서 시도해본 결과 파일이름에 .php가 붙는 것으로 보이기 때문이다.
입력하고 나면 base64 인코딩된 값이 화면에 출력되는데 이 값을 decode 해서 다음의 사이트에서 확인해보자.
그럼 다음과 같이 flag가 나오게 된다. 이제 auth창에 입력만 해주면 문제는 해결된다~
'Hacking > Webhacking.kr' 카테고리의 다른 글
Webhacking.kr 31번 (0) | 2020.02.15 |
---|---|
Webhacking.kr 27번 (0) | 2020.02.14 |
Webhacking.kr 19번 (0) | 2020.02.14 |
Webhacking.kr 54번 (0) | 2020.02.14 |
Webhacking.kr 15번 (0) | 2020.02.13 |