yehey's 공부 노트 \n ο(=•ω<=)ρ⌒☆

challenge (old25) 본문

wargame 풀이/webhacking.kr

challenge (old25)

yehey 2021. 1. 21. 21:30

25번 풀이

25번 문제는 리눅스에서 ls 명령어를 사용하는 것과 비슷한 페이지가 보인다

URL에서 ?file=hello인 것으로 보아 현재 텍스트 창에 출력되는 파일은 hello.php라고 생각했다.

 

그래서 한번 file에 flag를 넣어보았다.

 

이제 힌트를 얻은 것 같다!

FLAG는 flag.php의 코드 내에 있다는 것을 알 수 있다.

하지만 php는 페이지 코드 확인을 통해 코드를 얻어낼 수 없다.

그래서 php 취약점을 이용해서 코드를 얻어보자

 

이번에 사용할 취약점은 LFI 취약점이다!

 

LFI 취약점 (Local File Inclusion)
공격할 서버(local)에 있는 파일을 사용해서 공격을 수행하는 취약점
php로 만들어진 웹 사이트에서 include, require, require_once, file_get_contents, fopen 등의 함수를 사용할 때 발생한다.
예를 들어 include 함수를 사용할 때, include 함수는 받아온 입력 값을 경로 뒤에 그대로 추가하기 때문에 디렉터리 트래버설 공격과 같은 로컬 파일에 접근이 가능해진다.

LFI 취약점을 이용해서 flag.php의 코드를 불러오기 위해 php wrapper를 사용해보자

 

wrapper: 실제 데이터의 앞에서 어떤 틀을 잡아주는 데이터 또는 다른 프로그램이 성공적으로 실행되도록 설정하는 프로그램

php wrapper 종류는 다양하지만 그 중에서도 공격할 때 유용하게 사용하는 wrapper 3개만 보자!

 

1.expect://  - system command를 실행시켜줄 수 있는 wrapper

www.[우리가 공격할 웹 사이트의 주소].index.php?page=expect://ls 와 같이 사용할 수 있다. (그럼 ls 명령어가 실행되겠죵)

 

2. php://filter  - 다양한 I/O stream을 다룰 때 사용하는 wrapper, encode/decode 옵션을 사용해서 서버 안에 존재하는 문서들을 열람할 수 있음 (우리가 사용할 wrapper!)

www.[우리가 공격할 웹 사이트의 주소].index.php?page=php://filter/convert.base64-encode/resource=/etc/passwd

Base64 방식으로 encode된 etc/passwd 값을 얻을 수 있음

 

3. zip://  - zip 파일의 압축을 풀고 압축을 푼 파일 안에 있는 코드를 실행시킴

www.[우리가 공격할 웹 사이트의 주소].index.php?page=zip://file.zip#shell.php (web shell을 실행시킬 수 있음)

 

이제 php://filter wrapper를 이용해서 서버에 존재하는 flag.php를 열어보자!

 

base64로 encoding된 flag.php가 출력되었다.

콘솔창에서 atob 함수를 이용해서 base64 encode를 decode 해보면 flag.php 코드를 얻을 수 있다.

 

 

'wargame 풀이 > webhacking.kr' 카테고리의 다른 글

challenge (old-23)  (0) 2021.02.07
challenge (old-41)  (0) 2021.01.31
challenge (old-42)  (0) 2021.01.19
challenge (old-6)  (0) 2021.01.19
challenge (old-45)  (0) 2021.01.15
Comments