ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > ИНФО > Статьи > Авторские статьи
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Некоторые уязвимости Php.
  #1  
Старый 15.09.2007, 16:05
Аватар для NOmeR1
NOmeR1
Познавший АНТИЧАТ
Регистрация: 02.06.2006
Сообщений: 1,188
Провел на форуме:
6023777

Репутация: 2642


Отправить сообщение для NOmeR1 с помощью ICQ
Thumbs up Некоторые уязвимости Php.

Решил написать, с какими проблемами и уязвимостями я столкнулся и как я их решал, писав свои скрипты. Думаю, будет полезно почитать всем.

Авторизация, кукисы.
{

Подмена cookies

Пример уязвимого кода:
PHP код:
<?
...
$mysql mysql_fetch_array(mysql_query("SELECT * FROM `users` WHERE `id` = '".mysql_escape_string($_COOKIE['id'])."'"));
if(
$_COOKIE['user'] == $mysql['user'])
{
 include(
'edituser.php'); // или просто изменение юзера
}
...
?>
Обнаружение уязвимости:
Если вы заметили, что в кукисах есть только ваш логин и возможно ID, то вероятно, что здесь есть уязвимость.

Использование уязвимости:
Конечно, кукисы можно подменять, и, использовав это, можно воспользоваться правами любого юзера.
Ну а так же часто в таких случаях возможно провернуть SQL-инъекцию.

Устранение уязвимости:
Лучше в кукисы (если уж работа в кукисах) сохранять не только логин, но и хеш пароля, и сверять всё. Например:
PHP код:
<?
...
$mysql mysql_fetch_array(mysql_query("SELECT * FROM `users` WHERE `id` = '".mysql_escape_string($_COOKIE['id'])."'"));
if(
$_COOKIE['user'] == $mysql['user'] && $_COOKIE['hash'] = $mysql['pass'])
{
 include(
'edituser.php'); // или просто изменение юзера
}
...
?>
Но если же вы не хотите, чтобы была возможность угнать кукисы, то лучше работать в сессиях.


Обход капчи

Пример уязвимого кода картинки:
PHP код:
<?
...
$imageCode rand(10000,99999);
setcookie('imageCode'md5($imageCode));
...
?>
Обнаружение уязвимости:
Просмотрите все кукисы с данного сайта, если вы найдёте кукис вроди imageCode, то вероятно, что здесь есть уязвимость.

Использование уязвимости:
Пользуясь тем, что можно подменить кукисы, мы просто меняем этот кукис на хеш любого слова и в запросе уже используем это слово.

Устранение уязвимости:
В защищающих картинках лучше использовать сиссии, а после проверки сразу уничтожать её с помощью session_destroy();
PHP код:
<?
...
$imageCode rand(10000,99999);
$_SESSION['imageCode'] = md5($imageCode);
...
?>

Уязвимость благодаря недочёту в операторе if или elseif

Пример уязвимого кода:
PHP код:
<?
...
$mysql mysql_fetch_array(mysql_query("SELECT * FROM `admins` WHERE `name` = '".mysql_escape_string($_POST['name'])."'")); //Даже если нет SQL-инъекции

if($_POST['password'] != $mysql['password'] && $_POST['login'] != $mysql['name'])
 exit(
'Вы ввели неверный пароль');

...
?>
Обнаружение уязвимости:
С виду кажется, что здесь нет уязвимости, но это не так. Попробуйте ввести правильный логин, а пароль любой.

Использование уязвимости:
Если вы знаете правильный логин, то введя его и любой пароль, вы сможете, например войти в админку.

Устранение уязвимости:
Достаточно просто "&&" заменить на "||", так как "&&" - означает "И", а "||" - "ИЛИ".
PHP код:
<?
...
$mysql mysql_fetch_array(mysql_query("SELECT * FROM `admins` WHERE `name` = '".mysql_escape_string($_POST['name'])."'"));

if(
$_POST['password'] != $mysql['password'] || $_POST['login'] != $mysql['name'])
 exit(
'Вы ввели неверный пароль');

...
?>
}
Чтение файлов и т.п..
{

file_get_contents()

/* Многие считают её инклудом, но это далеко не так
* У readfile() такая же проблема, но читать файлы ей нельзя */


Пример уязвимого кода:
PHP код:
<?
...
echo 
file_get_contents($_GET['get']);
...
?>
Обнаружение уязвимости:
Если вы хотя бы новичёк, то вас должен привлечь запрос вида index.php?get=news.html, и подставив любое значение, можно увидеть ошибку, это значит, что вероятно, уязвимость здесь есть.

Использование уязвимости:
Есть возможность прочитать любой файл на сервере а так же получить cookies жертвы.

Устранение уязвимости:
Этот код должен выглядеть примерно так:
PHP код:
<?
...
$_GET['get'] = preg_replace('|([^A-Za-z0-9_-]+)|','',$_GET['get']);
echo 
file_get_contents('http://'.$_SERVER["HTTP_HOST"].'/'.$_GET['get'].'.php');
...
?>
}

Вот вроди бы и всё, если найду ещё, то обязательно напишу о них.

(c) NOmeR1

Последний раз редактировалось NOmeR1; 15.09.2007 в 20:00..
 
Ответить с цитированием

  #2  
Старый 15.09.2007, 17:06
Аватар для Piflit
Piflit
Banned
Регистрация: 11.08.2006
Сообщений: 1,522
Провел на форуме:
5128756

Репутация: 2032


Отправить сообщение для Piflit с помощью ICQ
По умолчанию

1.
Цитата:
Уязвимость благодаря недочёту в операторе if или elseif
с трудом представляю, что можно перепутать && и || . если конечно не быть совсем новичком (а новички скрипты такого типа не пишут)

2.
Цитата:
echo file_get_contents($_GET['get']);
аналогично 1.

3.
Цитата:
echo file_get_contents('http://'.$_SERVER["HTTP_HOST"].'/'.$_GET['get'].'.php');
не полностью безопасно, т.к. юзер может прочитать некоторые файлы, которые без использования данной функции ему будут forbidden.
 
Ответить с цитированием

  #3  
Старый 15.09.2007, 17:13
Аватар для NOmeR1
NOmeR1
Познавший АНТИЧАТ
Регистрация: 02.06.2006
Сообщений: 1,188
Провел на форуме:
6023777

Репутация: 2642


Отправить сообщение для NOmeR1 с помощью ICQ
По умолчанию

Цитата:
Сообщение от Piflit  
2.
аналогично 1.

3.
не полностью безопасно, т.к. юзер может прочитать некоторые файлы, которые без использования данной функции ему будут forbidden.
Не понял как и второе, так и третье.

А на счёт первого, бывает и такое, и у меня бывает, тем более там !=, а с ним геморойней чем с ==.
 
Ответить с цитированием

  #4  
Старый 15.09.2007, 17:19
Аватар для Piflit
Piflit
Banned
Регистрация: 11.08.2006
Сообщений: 1,522
Провел на форуме:
5128756

Репутация: 2032


Отправить сообщение для Piflit с помощью ICQ
По умолчанию

еще раз

2. это может и типичная ошибка, но только у новичков. может и не так, но это мое мнение

3. допустим, у нас на сервере есть файл admin.php, который становится доступен только после предварительной авторизации, а так его может выполнить любой желающий. хоть и редкий случай, но все же.

ЗЫ я сам новичек в пхп. если я говорю неправильно, поправьте=)
 
Ответить с цитированием

  #5  
Старый 15.09.2007, 17:20
Аватар для Digimortal
Digimortal
Banned
Регистрация: 22.08.2006
Сообщений: 608
Провел на форуме:
6144796

Репутация: 1095


По умолчанию

>> Уязвимость благодаря недочёту в операторе if или elseif

я так и не понял какие это недочеты в операторах if и elsif.. )
недочеты тока в моске прогера, который писал приведенный пример..
 
Ответить с цитированием

  #6  
Старый 15.09.2007, 17:31
Аватар для NOmeR1
NOmeR1
Познавший АНТИЧАТ
Регистрация: 02.06.2006
Сообщений: 1,188
Провел на форуме:
6023777

Репутация: 2642


Отправить сообщение для NOmeR1 с помощью ICQ
По умолчанию

Цитата:
Сообщение от Digimortal  
>> Уязвимость благодаря недочёту в операторе if или elseif

я так и не понял какие это недочеты в операторах if и elsif.. )
недочеты тока в моске прогера, который писал приведенный пример..
Я специально написал уязвимый код и не уязвимый, чтобы если не понятно что-то кому-то, то могли сравнить код и понять
 
Ответить с цитированием

  #7  
Старый 15.09.2007, 19:01
Аватар для Sn@k3
Sn@k3
Познавший АНТИЧАТ
Регистрация: 13.04.2006
Сообщений: 1,738
Провел на форуме:
5151669

Репутация: 1198


Отправить сообщение для Sn@k3 с помощью ICQ
По умолчанию

Номер, непонятно зачем это, повторение-мать ученье?? помнишь статейка от задохлика на ха? ... а так молодец
 
Ответить с цитированием

  #8  
Старый 15.09.2007, 19:09
Аватар для n1†R0x
n1†R0x
Постоянный
Регистрация: 20.01.2007
Сообщений: 787
Провел на форуме:
2924346

Репутация: 1719


Отправить сообщение для n1†R0x с помощью ICQ
По умолчанию

Цитата:
я так и не понял какие это недочеты в операторах if и elsif.. )
угу

по поводу file_get_contents - твой "фикс" - дыра) локальный инклуд.
если magic_quotes_gpc 1, то можно прочитать любой php-файл (при наличии полного пути), при выключенных - %00 и вперед.

вообще я бы не сказал, что все это - уязвимости пхп-функций, т.к. такое прокатит не всегда. уязвимости скорее возникают из-за кривых программистов
 
Ответить с цитированием

  #9  
Старый 15.09.2007, 19:18
Аватар для NOmeR1
NOmeR1
Познавший АНТИЧАТ
Регистрация: 02.06.2006
Сообщений: 1,188
Провел на форуме:
6023777

Репутация: 2642


Отправить сообщение для NOmeR1 с помощью ICQ
По умолчанию

Цитата:
Сообщение от n1†R0x  
угу

по поводу file_get_contents - твой "фикс" - дыра) локальный инклуд.
если magic_quotes_gpc 1, то можно прочитать любой php-файл (при наличии полного пути), при выключенных - %00 и вперед.

вообще я бы не сказал, что все это - уязвимости пхп-функций, т.к. такое прокатит не всегда. уязвимости скорее возникают из-за кривых программистов
Мой "фикс" - не инклуд. Инклуд - это include(...);

P.S. Поправил малец.
 
Ответить с цитированием

  #10  
Старый 15.09.2007, 22:21
Аватар для n1†R0x
n1†R0x
Постоянный
Регистрация: 20.01.2007
Сообщений: 787
Провел на форуме:
2924346

Репутация: 1719


Отправить сообщение для n1†R0x с помощью ICQ
По умолчанию

Цитата:
Сообщение от NOmeR1  
Мой "фикс" - не инклуд. Инклуд - это include(...);

P.S. Поправил малец.
Спасибо, я знаю, что такое инклуд.
Это что-то меняет? все равно код бажный, или теперь через file_get_contents нельзя ретривить какие-либо файлы?
пс: я имел в виду уязвимость local inclusion, в народе локальный инклуд.
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Books PHP FRAGNATIC PHP, PERL, MySQL, JavaScript 186 21.02.2010 02:41
На PHP, как на "Новые ворота"... Mertvii-Listopad Чужие Статьи 7 18.09.2006 12:42
Безопасность в Php, Часть Iii k00p3r Чужие Статьи 0 11.07.2005 19:02
Защищаем Php. Шаг за шагом. k00p3r Чужие Статьи 0 13.06.2005 11:31



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ