write-ups/websec.fr

websec.fr level24 write up

2018. 7. 4. 15:15




오늘도 어김없이 에이프릴 이나은으로 시작하는 write up



 해당 문제는 webshell upload로 푸는 문제이다. webshell 이라는 확신이 들었던 이유는 다음 코드가 있었기 때문. (진짜 이 문제 풀려고 좀 시간 많이 투자했었는데 너무 허무하게 풀림ㅋㅋ)


if (strpos($data'<?')  === false && stripos($data'script')  === false) {  # no interpretable code please.
    file_put_contents($_GET['filename'], $data);
    die (
'<meta http-equiv="refresh" content="0; url=.">');
}


해당 코드는 <? 를 필터링하여 웹쉘의 업로드를 막는다. 그리고 filename 에 {$filename}.php 가 들어갈 수 있기 때문에 웹쉘을 업로드하는데 생각보다 어려운 점은 없었다. 


 근데 우리는 파일 업로드를 하는 부분에서 file_put_contents() 함수를 이용하는 것을 유심히 보아야 한다. 해당 함수는 PHP의 Stream을 지원하는 함수이기 때문에 생각보다 쉬운 우회가 가능해진다. 따라서 php://filter/convert.base64-decode/resource={$filename}.php 를 이용하면 base64로 파일 내용을 필터링하는 if clause를 bypass 할 수 있기 때문에 webshell을 execution하여 문제를 풀 수 있다. 


[*] exploit code : https://github.com/ch4n3-yoon/write-ups/tree/master/websec.fr/level24 

'write-ups > websec.fr' 카테고리의 다른 글

websec.fr level09 write up  (0) 2018.07.10
websec.fr level22 write up  (0) 2018.07.04
websec.fr level10 write up  (0) 2018.07.03
websec.fr level25 write up  (0) 2018.07.03
websec.fr level28 write up  (1) 2018.06.28