SlowTurtle_

천천히 그러나 끝까지 완주

Webhacking-Write-Up/Dreamhack

[Dreamhack] Command Injection Advanced

SlowTurtle_ 2023. 1. 11. 12:58
728x90

[Dreamhack] Command Injection Advanced

필요한 코드만 가져와서 봤다.

    <?php
        if(isset($_GET['url'])){
            $url = $_GET['url'];
            if(strpos($url, 'http') !== 0 ){
                die('http only !');
            }else{
                $result = shell_exec('curl '. escapeshellcmd($_GET['url']));
                $cache_file = './cache/'.md5($url);
                file_put_contents($cache_file, $result);
                echo "<p>cache file: <a href='{$cache_file}'>{$cache_file}</a></p>";
                echo '<pre>'. htmlentities($result) .'</pre>';
                return;
            }
        }else{
        ?>

url파라미터를 통해서 입력값을 받고 http문자열로 시작하는지 검사한다. http로 시작한다면 shell_exec함수를 통해서 curl명령어를 실행하고 그렇지 않다면 http only를 출력한다. 입력받은 주소를 md5해싱한 후 그 결과를 파일 이름으로 저장하고 curl명령어의 결과를 파일내용에 cache 디렉토리에 저장한다. 

1~3주차 때 만들어서 호스팅한 서버를 입력해봤다.

cache 디렉터리 하위에 저장된 것을 볼 수 있다. 

링크를 누르니 단순 html만 띄워지는 것을 알 수 있다. 음 실험은 여기까지하고 위 코드를 보면 escapeshellcmd함수로 shell 메타 문자를 사용할 수 없게 했다. 그러나 escapeshellcmd함수는 -를 막는 것은 아니기에 -o옵션을 이용하여 파일을 생성할 수 있다. -h옵션이 사용가능한지 먼저 한 번 확인해보자.

된다 ! 과거에 연습삼아 만들어 호스팅한 서버에 webshell.php을 올렸고 webshell.php엔 웹셸 코드를 출력하는 소스코드를 담았다.

제출하면 

이후 링크에 접속해보면

성공적으로 접속할 수 있었다. 그럼 이제 원래 폼에서 /cache/webshell.php에 들어가자. 들어간 후 ls -al /로 확인해봤다.

flag값이 실행 권한만 있다는 것을 알 수있었다.

/flag파일을 실행시켜보면 flag값을 획득할 수 있다.

728x90

'Webhacking-Write-Up > Dreamhack' 카테고리의 다른 글

[Dreamhack] Apache htaccess  (0) 2023.01.11
[Dreamhack] File Vulnerability Advanced for linux  (0) 2023.01.11
[Dreamhack] phpMyRedis  (0) 2023.01.11
[Dreamhack] csrf-2  (0) 2023.01.11
[Dreamhack] NoSQL-CouchDB  (0) 2023.01.11