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 |