Авторские статьи внедрение sql

Discussion in 'Статьи' started by tclover, 12 Feb 2006.

  1. tclover

    tclover nobody

    Joined:
    13 Dec 2005
    Messages:
    741
    Likes Received:
    682
    Reputations:
    287
    Хочу написать вот статью о технологии взлома sql.
    Как-то, имхо, статей объясняющих "как" - много – а "почему" - мало.
    Вот я и постараюсь объяснить это самое "почему" для тех, кому это интересно.
    Итак, приступим.
    Язык sql состоит из предопределённых ключевых слов и специальных символов.
    Для того чтобы извлечь какие-либо данные из таблицы данных, необходимо воспользоваться оператором SELECT. При работе с web приложениями, как правило, именно этот оператор с ключевыми словами FROM и WHERE. Внедряя инструкции sql в такие запросы, можно добиться результата не предусмотренного … гм… просто непредусмотренного :)
    Формат выражений языка строго не определён, потому одно и тоже выражение может быть записано несколькими способами – что немного усложняет восприятие инструкций языка.
    Ну, пожалуй, введение можно закончить.
    Перейдём к практике :)
    OR 1=1
    (Например видео от zFailure со взломом гостевой книги (advanced guestbook 2.2))
    Очевидно, что это выражение создаёт логическое выражение, результатом выражения которого всегда будет "истина". Данное выражение используется, например, в запросах аутентификации когда проверяют пользовательские имя и пароль.

    Code:
    sqlAuth = "SELECT userid FROM logins WHERE name='" & Username & "' AND password='" & Password & "'"
    Если пользователь входит в систему с именем lexa и паролем lamer, то запрос будет выглядеть примерно так -
    Code:
    SELECT userid FROM logins WHERE name='lexa' AND password='lamer'
    Из вышенаписанного получается, что пользователь lexa не сможет зайти в систему пока значение lamer непопадёт в БД. Но если наш Алексей умело вставит значенпие OR 1=1, то он может избавить себя от проверки пароля.
    что-т типа того :
    Code:
    SELECT userid FROM logins WHERE name='lexa' AND password='lamer' OR 1=1
    UNION
    Этот оператор используется совместно с SELECT для извлечения всех столбцов из таблицы. Синтаксис -
    Code:
    UNION ALL SELECT field FROM table WHERE condition
    Может использоваться например в сообщениях об ошибках sql.

    INSERT
    Как понятно из названия - этот оператор предназначен для добавления каких-либо значений в БД. С помощью этого оператора можно впринципе добавить нового пользователя - admin с паролем 123
    Code:
    INSERT INTO Users VALUES('admin', '123')

    Мда... Всё таки письменно выражать свои мысли значительно тяжелее, нежели устно. хз что получилось :)
    Тем не менее надеюсь что это поможет хоть кому нибудь.
    В заключение приведу небольшую памятку сиволов которые можно использовать в sql injection.
    Code:
    '  
    Завершает выражение.
    Code:
    --  
    Однострочный комментарий. всё что за ним - игнорируется.
    Code:
    + 
    Пробел
    Code:
    ,@переменная
    Добавляет переменную
    Code:
    ?Param=lam&Param=mal
    Присваивает переменной Param значения lam и mal
    Code:
    SET
    Объявление переменных. Используется для многострочных выражений.



    Заключение.
    Вот вижу что тут кому-то не понравилось ;). А ты сам напиши :)
     
    20 people like this.
  2. virgoz

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

    Joined:
    16 Sep 2004
    Messages:
    151
    Likes Received:
    28
    Reputations:
    15
    Сори но чето я не догнал :(
    ' - это же не всегда завершает выражение, везде по разному...
    -- - только для mssql
    И про остальное тоже...
    тут же проще ?name=1' or 1=1/*
     
  3. tclover

    tclover nobody

    Joined:
    13 Dec 2005
    Messages:
    741
    Likes Received:
    682
    Reputations:
    287
    ' virgoz. Насчёт кавычки? Попрошу поподробнее. Я что-то тебя не понимаю 0_0
    А про комментарии - да. Я говорил именно о Microsoft sql server.
     
  4. virgoz

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

    Joined:
    16 Sep 2004
    Messages:
    151
    Likes Received:
    28
    Reputations:
    15
    Union select * from bla where id=$e, где $e=1'
    Ну вот тут допустим эта кавычка ниче не закроет.
     
    1 person likes this.
  5. MartS

    MartS New Member

    Joined:
    3 Apr 2007
    Messages:
    12
    Likes Received:
    3
    Reputations:
    0
    Тулзу простенькую накодил.

    Вот небольшую тулзу накодил, для облегчения взлома серверов, юзая скулю, где фильтруются / слешируются кавычки.
    (формирует из строки вида /etc/passwd строку вида char(47,101,116,99,47,112,97,115,115,119,100) )
    простенькая, но полезная.

    качать тут http://ifolder.ru/4738224
     
    #5 MartS, 27 Dec 2007
    Last edited: 27 Dec 2007
    2 people like this.
  6. Spyder

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

    Joined:
    9 Oct 2006
    Messages:
    1,388
    Likes Received:
    1,209
    Reputations:
    475
    hack-shop.org.ru/code.php
     
    #6 Spyder, 27 Dec 2007
    Last edited: 27 Dec 2007
  7. MartS

    MartS New Member

    Joined:
    3 Apr 2007
    Messages:
    12
    Likes Received:
    3
    Reputations:
    0
    ну а так локально)
    (тот линк раньше не видел)
     
    1 person likes this.
  8. Macro

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

    Joined:
    11 Nov 2006
    Messages:
    552
    Likes Received:
    298
    Reputations:
    207
    PHP:
    <?
    $string='/etc/passwd';
    $str='char(';
    for(
    $i=0;$i<strlen($string);$i++)
    {
    $i==(strlen($string)-1)?$str.=ord($string[$i]):$str.=ord($string[$i]).",";
    }
    $str.=')';
    echo(
    $str);
    ?>
     
  9. MartS

    MartS New Member

    Joined:
    3 Apr 2007
    Messages:
    12
    Likes Received:
    3
    Reputations:
    0
    Code:
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
    
    type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Edit2: TEdit;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
    i: integer;
    begin
    edit2.Text :='';
    edit2.Text :='char(';
        for i:=1 to  length(edit1.Text)     do
          begin
              edit2.Text :=edit2.Text+ inttostr((ord(edit1.text[i])));
              if i <> length(edit1.Text)    then edit2.Text:=edit2.text+',';
          end;
             edit2.Text:=edit2.text+')';
    end;
    
    end.
    
    вот сурс дельфинский
     
  10. n0ne

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

    Joined:
    1 Jan 2007
    Messages:
    542
    Likes Received:
    284
    Reputations:
    -56
    http://webfile.ru/1658613 имхо самая удобная тема (спс какому-то мемберу, кто-то выкладывал...не помню)