150점인 25번 문제를 풀어보자.
file에 file명을 입력하면 자동으로 php가 붙어 include 되는 것으로 보인다.
LFI 취약점을 이용해 보자. 우리는 php wrapper를 사용해서 LFI 사용해보자.
- php wrapper란?
우선 wrapper란 실제 데이터의 앞에서 어떤 틀을 잡아 주는 데이터 또는 다른 프로그램이 성공적으로 실행되도록 설정하는 프로그램입니다. 원래 php wrapper는 개발자들의 개발을 돕기 위해서 만들어진 기능이지만 우리는 이 기능을 사용한 lfi에 대해 알아보도록 하겠습니다. 우리가 php wrapper를 사용한 lfi공격에 대해 알아야 하는 이유는 앞에서 배운 기본적인 lfi공격은 다음과 같은 형식으로 구성되어 있었습니다. www.[우리가 공격할 웹 사이트의 주소].index.php?page=../../../../../../../../etc/passwd/(널바이트) 여기서 널바이트는 주소 뒤에 붙을 확장자(.php, .txt)등을 떼어내 주는 역할을 수행합니다. 그러나 php가 버전 5 이상이 되면서 path 중간에 널바이트가 오면 주소 더 이상 읽지 않는 취약점이 사라졌습니다.
이 때문에 우리가 php wrapper를 사용하여 lfi공격을 수행해야 하는 것입니다. php wrapper에는 수많은 종류들이 존재하지만 그 중에서 우리가 유용하게 사용할 수 있는 wrapper를 세 가지 소개하도록 하겠습니다.
1. expect:// expect wrapper는 우리에게 system command를 실행시켜 줍니다. 예를 들어 expect wrapper 가 필터링 당하지 않았다면 www.[우리가 공격할 웹 사이트의 주소].index.php?page=expect://ls 와 같은 방식으로 활용할 수 있습니다. 위의 예시에서는 system command로 ls를 보냈기 때문에 우리에게 디렉토리들을 보여줄 것입니다.
2. 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의 값을 얻을 수 있을 것 입니다.
3. zip:// zip:// wrapper는 zip파일의 압축을 풀고 압축을 푼 파일안에 있는 코드를 실행시켜 주는 기능을 합니다. 예를 들어 www.[우리가 공격할 웹 사이트의 주소].index.php?page=zip://file.zip#shell.php 와 같은 방식으로 활용하여 web shell을 실행시키는 등 다양한 기능을 수행할 수 있습니다. |
URL에 http://webhacking.kr:10001/?file=php://filter/convert.base64-encode/resource=flag 를 입력해보자.
해당 문자열을 Base64 decode 해보면 다음과 같은 코드가 나오게 된다.
webhacking의 auth페이지로 이동해 해당 flag를 제출하자.
'CTF & WarGame > webhacking.kr' 카테고리의 다른 글
[webhacking.kr] 27번 문제 (0) | 2020.03.10 |
---|---|
[webhacking.kr] 26번 문제 (0) | 2020.03.10 |
[webhacking.kr] 24번 문제 (0) | 2020.03.09 |
[webhacking.kr] 23번 문제 (0) | 2020.03.09 |
[webhacking.kr] 22번 문제 (0) | 2020.03.09 |