Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Как взломать сайт?

Сообщения:  [1-10]   [11-13] 

 
 автор: Unkind   (23.07.2007 в 19:36)   письмо автору
 
   для: abdyla_v   (23.07.2007 в 19:26)
 

Да так не надо делать. Вы просто храните в буфере массу ненужной информации.

   
 
 автор: abdyla_v   (23.07.2007 в 19:26)   письмо автору
 
   для: abdyla_v   (23.07.2007 в 09:40)
 

Ну что больше никаких предложений нету? Может как то можна обойти ту реализацию что я привел? Помогите!!!!

   
 
 автор: abdyla_v   (23.07.2007 в 09:40)   письмо автору
 
   для: Unkind   (22.07.2007 в 02:46)
 

Вот код который просили:

<?
include "functions.php";
include(
"options.php");

if (isset(
$logout))
{
    
setcookie("cur_user","",time()-60);
    
setcookie("cur_group","",time()-60);
    unset(
$cur_user_group);
}

if (isset(
$cur_user) && isset($cur_group))
{
    
?><script language="javaScript">
               document.location.replace("main.php");
       </script><?
       
exit();
}
    
if (isset(
$submit))
{
    
$query "SELECT * FROM users WHERE login='$login'";
    if (
$result mysql_query($query,db_connect())) 
      { 
          if (
mysql_num_rows($result) > 0)
          {
              if (
$user=mysql_fetch_array($result)) 
             {
                 
$temp_id=$user["id"];
                 
$query2="SELECT * FROM users,groups,user_group WHERE user_group.id_user=$temp_id AND user_group.id_group=groups.id";
                 
$result2=mysql_query($query2,db_connect());
                 if (
$groups=mysql_fetch_array($result2))
                 {
                     if (
$login === $user["login"]) 
                      {
                          if (
md5($passwd) === $user["passwd"]) 
                        {
                              
session_start();
                            
$cur_user=$user["login"];
                            
$cur_group=$groups["groups"];
                            
$cur_user_group_c=gzcompress(serialize($groups));
                              
setcookie("cur_user_group_c",$cur_user_group_c,time()+7200);
                              
setcookie("cur_group",$cur_group,time()+7200);
                              
setcookie("cur_user",$cur_user,time()+7200);
                              
                              
//session_register('cur_user_group');
                              
?><script language="javaScript">
                                   document.location.replace("main.php");
                                   </script>
                                   <?
                                   
exit;
                           } 
                           else {print 
"<center><font size=5 color=#CC0000>Неправильный пароль!!!</font></center>";}
                      
                     }
                     else {print 
"<center><font size=5 color=#CC0000>Неправильный логин!!!</font></center>";}
                 }
                  else {print 
mysql_error();}
              }
        }
      }
      else {die(
"Couldn't retrieve authorization data, please try again later");}
}
?>
<html>
<head>
<link rel=stylesheet type=text/css href=styles.css>
<meta http-equiv="Content-Language" content="ru">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Task Manager</title>
</head>
<body>

<form method="POST" action="<?echo $PHP_SELF?>">
<br><br><br><br><br>
<table class="wide_table">
    <tr>
        <td class="side_td"></td>
        <td class="lable_td">Введите логин</td>
        <td class="form_td"><input type=text name=login></td>
        <td class="side_td"></td>
    </rt>
    <tr>
        <td class="side_td"></td>
        <td class="lable_td">Введите пароль</td>
        <td class="form_td"><input type=password name=passwd></td>
        <td class="side_td"></td>
    </tr>
</table>

<p align="center">
<input type=submit value=Войти name=submit id=submit class="button">
<input type=reset value=Очистить name=reset id="reset" class="button"></p>

</form>

<SCRIPT>onload=function(){document.getElementById('login').focus();}</SCRIPT>
<?
footer
();    
?>


Замечу что если ввести в поле login следующее значени то все пройдет - 1' and '1 !!!

А как теперь взломать пароль?

Пароли для пользователей хранятся в базе в зашифрованом ввиде. Как видно из кода

md5($passwd) === $user["passwd"]

используэтся функция md5!

   
 
 автор: Unkind   (22.07.2007 в 02:46)   письмо автору
 
   для: Unreal   (22.07.2007 в 02:41)
 

Не искажайте мой ник.
Прежде чем отправлять данные, проверяйте их сами.

SELECT FROM table WHERE existing_field = '' OR 1=1 надеюсь так понятнее
Вы так говорите, как будто эти два запроса аналогичны. Вообще, более поздние версии MySQL может и пропустят строку как условие, но там можно будет тогда написать отнюдь не только "1=1". Здесь "=" не является никаким оператором. Это просто символ. Хоть напишите "Usama Bin Laden is good boy" и это будет true.
И вообще почему 1=1, а не просто 1, допустим? Так на форумах для крутых взломшиков не объясняли? Странно.

   
 
 автор: Unreal   (22.07.2007 в 02:41)   письмо автору
 
   для: Unkind   (21.07.2007 в 11:23)
 

Unkinnd:
Вы знаете, это глупость. В Вашем случае "1=1" не условие 1 == 1, а строка. А в MySQL просто строку как условие не пропустит парсер.

Прежде чем что-то утверждать попробуйте это сделать а потом пишите то что написали

SELECT FROM table WHERE existing_field = '' OR 1=1 надеюсь так понятнее, то что там выведет или не выведет php надо смотреть весь исходный код, а не тот огрызок что тут привели. Я показал общую идею, что касается реализации еще раз повторю что надо смотреть код. Проверить запрос можно в MySQL Query Browser например.

   
 
 автор: parczynski   (21.07.2007 в 14:42)   письмо автору
 
   для: Unkind   (21.07.2007 в 11:23)
 

можно ввести не ' OR '1 = 1' а ' OR '1' = '1, то получиться уже

"SELECT * FROM users WHERE login='' OR '1'='1';

хотя и так вряд ли получится вывести всю таблицу на экран. но шансов на НСД будет больше. в любом случае лучше использовать mysql_escape_string или magic_quotes. Но я предпочитаю mysql_escape_string. так как в magic_quotes тож баг есть.

   
 
 автор: Unkind   (21.07.2007 в 11:23)   письмо автору
 
   для: Unreal   (20.07.2007 в 20:14)
 

"SELECT * FROM users WHERE login='' OR '1=1';
получается вся таблица

Вы знаете, это глупость. В Вашем случае "1=1" не условие 1 == 1, а строка. А в MySQL просто строку как условие не пропустит парсер.

   
 
 автор: STEVER   (20.07.2007 в 21:47)   письмо автору
 
   для: Unreal   (20.07.2007 в 20:14)
 

Я так понял, это с квеста античата взято.
Там нифига из базы не получишь, только нужно как то иньекцию подбирать. Сделал десятки инъекций: на локал хосте пашет, на серваке - нет.
Так я и забил на это дело.

   
 
 автор: Unreal   (20.07.2007 в 20:14)   письмо автору
 
   для: abdyla_v   (20.07.2007 в 18:44)
 

в общем если вверху $login никак не обрабатывается и код примерно такой

<?php $login $_REQUEST['login'];

в таком случае злоумышленник посылает такой логин: ' OR '1=1'
в итоге запрос получается в виде
"SELECT * FROM users WHERE login='' OR '1=1';
получается вся таблица

А если есть желание получить ответ как полностью все это происходит копируйте сюда весь код, чтобы не гадать откуда берется $login, $password итд

   
 
 автор: SportSoft   (20.07.2007 в 19:56)   письмо автору
 
   для: Unreal   (20.07.2007 в 19:12)
 

ili $_REQUEST mossiv ispol'zovat' pri otklyuchennyh register_globals!

   

Сообщения:  [1-10]   [11-13] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования