Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (2) [1] 2  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Закрытая темаСоздание новой темыСоздание опроса

> Взлом авторизации
DrZeD  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 11
Пользователь №: 42098
На форуме: 1 год, 2 месяца, 10 дней
Карма:




Здравствуйте подскажите где может быть дыра в такой авторизации, заранее спасибо

function avtorized()
{
if (isset($_SESSION[$_SERVER['REMOTE_ADDR']]['ip']))
{
if (($_SESSION[$_SERVER['REMOTE_ADDR']]['time']) > time())
{
$this->SetError("error", "По пробуйте чуть позже");
return false;
}
else
{
$this->SetError("error", "По пробуйте чуть позже");
unset($_SESSION[$_SERVER['REMOTE_ADDR']]['ip']);
return false;
}
}

else
{
$login = $this->GetGP("login", "");
$pwd = $this->GetGP("pwd", "");
$pwd = md5($pwd);
$from = "FROM ".$this->table_name." WHERE username = '".$login."' and passwd = '".$pwd."' and is_active = '1'";
$sql = "SELECT admin_id ".$from;
$admin = $this->db->GetOne($sql, 0);
if ($admin > 0)
{
$this->history($login, "on");
$_SESSION["A_ID"] = $admin;
$sql = "SELECT pages FROM `admins` WHERE admin_id = '".$admin."'";
$temp = $this->db->GetOne($sql, "");
$mas = explode(',', $temp);
$this->Redirect ("/adm/".$mas[1]."/");
//return true;
}
else
{
$this->SetError("error", "Неверный логин или пароль");

$this->history($login, "off");
$time1 = time()-300;
$time = $time1+600;
$sql = "SELECT Count(*) FROM log WHERE news_date < '$time' and news_date > '$time1' and status='off'";
$total = $this->db->GetOne($sql, 0);
if ($total > 3)
{
$_SESSION[$_SERVER['REMOTE_ADDR']]['ip'] = $_SERVER['REMOTE_ADDR'];
$_SESSION[$_SERVER['REMOTE_ADDR']]['time'] = $time;
}
return false;
}
}
}


Это сообщение отредактировал DrZeD - 13.11.2015 - 12:01
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
DrZeD  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 11
Пользователь №: 42098
На форуме: 1 год, 2 месяца, 10 дней
Карма:




куки не использую
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
inpost  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Помагите Здесь живу!!!
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 22766
Пользователь №: 20039
На форуме: 7 лет, 1 месяц, 16 дней
Карма: 600




Ты бы ещё меньше кода показал ;) Можно даже так:
WHERE username = '".$login."'

И тогда 100% все тебе помогут, только прежде погадают по кофейной гуще...


--------------------
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
DrZeD  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 11
Пользователь №: 42098
На форуме: 1 год, 2 месяца, 10 дней
Карма:




Цитата (DrZeD @ 13.11.2015 - 11:51)
$from = "FROM ".$this->table_name." WHERE username = '".$login."' and passwd = '".$pwd."' and is_active = '1'";
  $sql = "SELECT admin_id ".$from; 


не особо понял что не понятно в этом запросе?

получаем id пользователя если такой логин и пароль есть или получаем 0
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 15118
Пользователь №: 4190
На форуме: 8 лет, 11 месяцев, 17 дней
Карма: 449




Цитата (DrZeD @ 13.11.2015 - 11:51)
$login = $this->GetGP("login", "");
$pwd = $this->GetGP("pwd", "");

Это что за функция, откуда она получает логин и пароль? Из данных, введенных пользователем и переданных через гет-параметры?


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
andrey888  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 793
Пользователь №: 27801
На форуме: 5 лет, 8 месяцев, 13 дней
Карма: 14




Цитата
$this->SetError("error", "По пробуйте чуть позже");

вот тут дыра.. между словами "по" и "пробуйте"


--------------------
Прогноз на следующие 5 лет : Россия, Китай - две величайшие державы.
США в Ж*пе. Справедливость восторжествует. )
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
DrZeD  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 11
Пользователь №: 42098
На форуме: 1 год, 2 месяца, 10 дней
Карма:




Цитата (DrZeD @ 13.11.2015 - 11:51)
$login = $this->GetGP("login", "");
  $pwd = $this->GetGP("pwd", "");
  $pwd = md5($pwd);
  $from = "FROM ".$this->table_name." WHERE username = '".$login."' and passwd = '".$pwd."' and is_active = '1'";
  $sql = "SELECT admin_id ".$from; 
  $admin = $this->db->GetOne($sql, 0);


GetGP функция обрабатывает массив $_GET и $_POST для безопасной передачи данный в mysql, соответственно функция $this->GetGP("login", ""); получает значения логина веденного через форму

далее если пользователь есть гуд делаем редирект на страницу к которой у него есть доступ

если нет делаем ряд манипуляций что бы предотвратить попытку взлома методом подбора пароля, три не верных в хода делаю ограничения пользователя по ip на 5 минут

функция history записывает в логи все действия и удачный и не удачные авторизации
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 15118
Пользователь №: 4190
На форуме: 8 лет, 11 месяцев, 17 дней
Карма: 449




Цитата (DrZeD @ 13.11.2015 - 13:53)
GetGP функция обрабатывает массив $_GET и $_POST для безопасной передачи данный в mysql,

То есть, данные уже прошли через real-escape-string (или как там эта функция для Мускуля называется)? Если да, то всё ОК. Если нет, т.е. они просто получены из ГЕТ/ПОСТ и никак не обработаны, то тогда как раз тут дыра и будет.


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
DrZeD  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 11
Пользователь №: 42098
На форуме: 1 год, 2 месяца, 10 дней
Карма:




только вот беда в логах отображается в ход с первого раза, валидные логин и пароль вводятся хотя пароль поменял, при чем думал, что троян(или еще какая фигня с компом) поменял на другом компе, так же был вход

спасает только одно ставить пароль через htaccess но это плохая идея
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Лысый и злой
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26055
Пользователь №: 21350
На форуме: 6 лет, 10 месяцев, 9 дней
Карма: 727

Не курю:
1 год, 3 месяца, 25 дней


DrZeD
$this->GetGP

показывай код этого безопасно творящего из всего всё метода.


--------------------
Халявные ответы кончились.
Если нужен готовый код - готовьтесь заплатить.
Райкин тоже был артист

Возле дома был сарай
А когда всё хорошо
Можно просто покурить

user posted image
http://ufa102.xyz/
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5557
Пользователь №: 35718
На форуме: 4 года, 2 месяца, 3 дня
Карма: 170




Цитата (andrey888 @ 13.11.2015 - 12:42)
вот тут дыра.. между словами "по" и "пробуйте"

зачёт smile.gif


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
DrZeD  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 11
Пользователь №: 42098
На форуме: 1 год, 2 месяца, 10 дней
Карма:




function GetGP ($key, $defValue = "")
{
$toRet = $defValue;
if (array_key_exists ($key, $_POST)) $toRet = trim ($_POST [$key]);
elseif (array_key_exists ($key, $_GET)) $toRet = trim ($_GET [$key]);
str_replace ($toRet, "<", "");
str_replace ($toRet, ">", "");
return (get_magic_quotes_gpc ()) ? stripslashes ($toRet) : $toRet;
}
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Лысый и злой
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26055
Пользователь №: 21350
На форуме: 6 лет, 10 месяцев, 9 дней
Карма: 727

Не курю:
1 год, 3 месяца, 25 дней


DrZeD
ужс. как она обезапасывает????????? вообще забудь эти строчки кода - я даже не знаю как охаректиризовать мои впечатления после того как я увидел их - зная о их предназначении :(


тебе выше уже Сергей сказал:

mysql_real_escape_string - для строковых значений
$sql = "... where `login` = '".mysql_real_escape_string($_POST['login'])."'";


+

приведение к типу - для числовых
$sql = "... where `id` = ".(int)$_POST['id']." order by `id`"; 


--------------------
Халявные ответы кончились.
Если нужен готовый код - готовьтесь заплатить.
Райкин тоже был артист

Возле дома был сарай
А когда всё хорошо
Можно просто покурить

user posted image
http://ufa102.xyz/
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
DrZeD  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 11
Пользователь №: 42098
На форуме: 1 год, 2 месяца, 10 дней
Карма:




function GetGP_SQL ($key, $defValue = "")
{
$toRet = $defValue;
if (array_key_exists ($key, $_POST)) $toRet = trim ($_POST [$key]);
elseif (array_key_exists ($key, $_GET)) $toRet = trim ($_GET [$key]);
return mysql_real_escape_string($toRet);
}


Так будет достаточно?

id я не использую в запросе
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
DrZeD  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 11
Пользователь №: 42098
На форуме: 1 год, 2 месяца, 10 дней
Карма:




вообщем всем спасибо, буду ждать не удачной авторизации
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (2) [1] 2  Закрытая темаСоздание новой темыСоздание опроса