소스코드를 봐도 별 내용이 없고, hello.php가 실행된 것으로 보인다.
flag.php와 index.php를 실행시켜 보았다. 소스코드는 마찬가지로 별 내용이 없다.
FLAG is in the code 라는 문구가 출력된 것으로 보아, 서버에 있는 flag.php 파일에 접근해서 코드를 확인해야 할 것으로 보인다.
LFI(Local File Inclusion)
- 공격자가 공격 대상 서버에 위치한 파일을 실행, 공격에 활용하는 취약점.
- 공격 대상 서버에 있는 디렉토리로 접근하여 원하는 값을 열어볼 수 있도록 함.
- LFI 공격 시도를 위해 주로 Path Traversal 취약점을 이용함.
- Path Traversal 취약점: 접근 권한이 없는 웹 서버의 파일에 접근하기 위해 특정한 방식으로 주소를 수정하여 접근 권한이 없는 파일에 접근하는 것
- php 코드에서 include() 사용 시 input에 대한 적절한 보호장치나 필터링이 없을 때 주로 발생하는 취약점.
- url에 ?변수명=변수값 이 아닌 ?변수명=주소명 이 되면 LFI를 의심 가능.
- 또한, 변수명이 저장하는 느낌의 변수명이 아니고 page, command, file, document, folder, pg 등 어디서 많이 본 듯한 변수명이어도 LFI를 의심 가능.
LFI 취약점을 통해 flag.php 파일에 접근하려고 한다.
이 문제의 경우, php wrapper를 활용해 LFI 공격이 가능하다.
wrapper
- 실제 데이터의 앞에서 어떤 틀을 잡아 주는 데이터 또는 다른 프로그램이 성공적으로 실행되도록 설정하는 프로그램
실제로, LFI 공격을 하면서 유용하게 사용할 수 있는 php wrapper
1. expect://
- system command를 실행시켜줌. expect://ls의 경우 system command를 ls로 해서 디렉토리를 보여주게 됨.
2. php://filter/
- 서버 내의 문서들을 encode 또는 decode 형태로 열람할 수 있도록 함.
- www.공격할 웹사이트/?file=php://filter/convert.base64-encode/resouce=파일명(파일경로) 활용하면, base64로 인코딩된 파일이 반환됨.
3. zip://
- zip 파일의 압축을 풀고, 압축을 푼 파일 안에 있는 코드를 실행시켜줌.
이 문제의 경우, 2번 php://filter/ wrapper를 이용해 해결할 수 있다.
url에는 .php가 붙지 않았던 걸로 보아 자동으로 .php를 붙여서 실행한다고 유추할 수 있다.
base64로 인코딩된 파일의 소스코드가 반환되었다.
이를 디코딩해주면,
참고
'Web > wargame' 카테고리의 다른 글
[Webhacking.kr] old-05 (0) | 2022.01.16 |
---|---|
[Webhacking.kr] old-24 (0) | 2021.11.21 |
[Webhacking.kr] old-01 (0) | 2021.11.21 |
[Webhacking.kr] old-12 (0) | 2021.11.11 |
[HackCTF] Login (0) | 2021.11.09 |