학습 기록일지

Dreamhack - PHP 본문

워게임/웹

Dreamhack - PHP

KRMP 2021. 7. 8. 21:59

웹 2레벨 문제. 예전에 안풀어서 풀어봄

힌트

힌트가 너무 친절하다...

flag파일의 절대경로와, 어떤 취약점이 이용되는지까지 알려줌

 

LFI 도움(PHP Wrapper) : https://opentutorials.org/module/4291/26819

 

<소스설명>

index.php

첫번째 index.php 파일은, 맨 하단에 php스크립트로 page 인자를 받아와 .php를 붙여 include 해주는걸 알수있음

include 함수는 해당하는 파일의 내용을 출력하고, 스크립트가 있다면 실행한다.

따라서 PHP 취약점에 종종 사용되곤 함

 

list.php

두번째 list.php 파일의 소스를 해석하자면, ../uploads/ 경로 내의 파일을 읽어서 <li> 태그로 감싸 출력해준다.

결과는 아래 이미지 참고

 

view.php

마지막으로 view.php 는 file 인자로 해당 파일 안에 내용을 조회한다.

인자로 들어온 값중에 flag 와 : 를 필터링시키며 대소문자를 구분하지 않는다

file_get_contents 함수는 문자열로 전체 파일을 읽는 함수이다

 

<화면설명>

list.php

차례대로 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으로 변환시켰을 때

암호화된 값이 개발자도구를 통해 보이는데, rot13.com 사이트에서 변환 가능하다.

 

'워게임 > ' 카테고리의 다른 글

Dreamhack - login-1  (0) 2021.07.07
Dreamhack - file-csp-1  (0) 2021.06.29