학습 기록일지
Dreamhack - PHP 본문
웹 2레벨 문제. 예전에 안풀어서 풀어봄
힌트가 너무 친절하다...
flag파일의 절대경로와, 어떤 취약점이 이용되는지까지 알려줌
LFI 도움(PHP Wrapper) : https://opentutorials.org/module/4291/26819
<소스설명>
첫번째 index.php 파일은, 맨 하단에 php스크립트로 page 인자를 받아와 .php를 붙여 include 해주는걸 알수있음
include 함수는 해당하는 파일의 내용을 출력하고, 스크립트가 있다면 실행한다.
따라서 PHP 취약점에 종종 사용되곤 함
두번째 list.php 파일의 소스를 해석하자면, ../uploads/ 경로 내의 파일을 읽어서 <li> 태그로 감싸 출력해준다.
결과는 아래 이미지 참고
마지막으로 view.php 는 file 인자로 해당 파일 안에 내용을 조회한다.
인자로 들어온 값중에 flag 와 : 를 필터링시키며 대소문자를 구분하지 않는다
file_get_contents 함수는 문자열로 전체 파일을 읽는 함수이다
<화면설명>
차례대로 List버튼으로 이동했을 때와, 해당 파일을 확인할 때 이다.
flag가 들어있는 flag.php는 확인이 불가능하며, 그 외 파일은 안에 내용들을 확인 가능하다.
위 취약점을 이용하면 크리티컬한 passwrd 파일 내용을 긁어올수도 있음
하지만 우리가 얻고자하는건 flag.php
처음에 flag 와 : 를 어떻게 우회해서 뚫을수 있지 않을까 생각하고 여러차례 시도를 했으나, 코드를 제대로 안봐서 여기서 삽질함
해결책은 index.php 에 include 함수를 이용하는것
버튼을 통한 이동만한다면 url 의 '경로'와 '쿼리'부분은 정해진대로만 바뀌게되는데 구조는 이러하다. /?page=list
처음 index.php 파일의 내용을 보면 파일의 인자를 가져와 .php를 붙여주고,
include함수가 .php 확장자를 붙여주고, 경로를 통한 파일을 불러올 수 있다는 것도 알았으니 힌트로 주어진 flag.php 파일의 경로를 입력
can you see $flag? 라고만 나오며 플래그는 긁어오질 못한다.
아마 스크립트로 작성되서 그런건듯
인터넷 강의를 뒤져보다 인코딩방식을 사용하여 파일 내용을 가져올수 있다는걸 알게됨
php://filter/convert.base64-encode/resource="변환될인자" : 파일의 내용을 base64로 인코딩
php://filter/string.rot13/resource="변환될인자" : 파일의 내용을 rot13으로 인코딩
암호화된 값이 개발자도구를 통해 보이는데, rot13.com 사이트에서 변환 가능하다.
'워게임 > 웹' 카테고리의 다른 글
Dreamhack - login-1 (0) | 2021.07.07 |
---|---|
Dreamhack - file-csp-1 (0) | 2021.06.29 |