За последние 24 часа нас посетили 16503 программиста и 1677 роботов. Сейчас ищут 922 программиста ...

об иньекциях поподробнее

Тема в разделе "Прочее", создана пользователем viktor_nez, 16 сен 2008.

Статус темы:
Закрыта.
  1. viktor_nez

    viktor_nez Активный пользователь

    С нами с:
    16 сен 2008
    Сообщения:
    10
    Симпатии:
    0
    Здравствуйте, все никак не мог зарегистрироваться, вот сейчас назрел вопрос =)
    Код (Text):
    1. INSERT INTO votes_polls (user_id, poll_id, vote_value) VALUES (1,2,3)
    банальный запрос, добавляющий голос юзера на голосовании, все три поля - числовые.
    Правда value в них попадает в виде $_POST['value'], на лицо т.н. иньекция. Оно в общем и понятно, но не могли бы вы на пальцах объяснить - каким образом оно может быть использовано? Ведь говорили мускл не поддерживает подзапросы, поэтому подзапрос нельзя вставить (поэтому и удалить не получится, ни вставить). Вывести содержимое таблицы? Но ведь вывод осуществляет не запрос - а парсер получающий результат запроса, а он зачастую не выдает все в виде print_r за еще учитывая, что может вернуться другая таблица...
     
  2. viktor_nez

    viktor_nez Активный пользователь

    С нами с:
    16 сен 2008
    Сообщения:
    10
    Симпатии:
    0
    вот даже скрипт для теста сделал, любые попытки внутреннего инсерта выдают "некорректный синтаксис". может для мускла слухи ою иньекциях преувеличены? (я не пытаюсь доказать безопастность тыкой дырки, просто интересно, никто так и не смог ничего внятного показать, обычно фокусы проводят на SELECT, где в WHERE указывают условия показа всех записей, например заблоченого форума).
    Код (Text):
    1. <?php
    2.  
    3.     $db_c=mysql_connect("localhost", "testuser", "testpassword");
    4.     $db_s=mysql_select_db("tablehack");
    5.  
    6.     if(!$db_c){
    7.         die(mysql_errno()." : ".mysql_error());
    8.     }elseif(!$db_s){
    9.         die(mysql_errno()." : ".mysql_error());
    10.     }
    11.  
    12.     if(isset($_GET['create'])){
    13.         $query="CREATE TABLE votes_polls (
    14.                 id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    15.                 user_id int(10) NOT NULL default '0',
    16.                 poll_id int(10) NOT NULL default '0',
    17.                 vote_value int(10) NOT NULL default '0',
    18.                 PRIMARY KEY  (id)
    19.         ) TYPE=MyISAM;";
    20.         $result=mysql_query($query);
    21.         if(!$result){
    22.             echo mysql_error();
    23.         }
    24.     }
    25.  
    26.     if(isset($_GET['value'])){
    27.  
    28.         $query="INSERT INTO votes_polls (user_id, poll_id, vote_value) VALUES (1,2,".$_GET['value'].")";
    29.  
    30.         $result=mysql_query($query);
    31.         if(!$result){
    32.             echo mysql_error();
    33.         }else{
    34.             echo "true";
    35.         }
    36.     }
    37. ?>
     
  3. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    ?value=5),(1,2,5), …тут n повторов…(1,2,5 и пользователь с id=1 получает предупреждение.

    а с echo mysql_error(); узнать вид всего запроса не так уж и сложно…
     
  4. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
  5. viktor_nez

    viktor_nez Активный пользователь

    С нами с:
    16 сен 2008
    Сообщения:
    10
    Симпатии:
    0
    Mr.M.I.T.
    вот об этом я и говорю.
    Код (Text):
    1.  - А погуглить?
    2.  - А попробывать?
    сейчас ветка начинает принимать несколько иной оборот (что может повлечь закрытие, но не хотелось бы), но почему то все примеры взлома не работали. Скрипт выше я написал, дырка видна невооруженным глазом, пока никто так и не сказал, что именно там можно навредить.

    ошибка корректности синтаксиса так же выходит и в примере Luge.
    прошу прощения, пример Luge работает, спасибо что указали конкретную дырку.
     
  6. Anonymous

    Anonymous Guest

    ?value=5),(1,2,5),(1,2,5 - и получаешь накрутку. в 3 голоса.
     
  7. viktor_nez

    viktor_nez Активный пользователь

    С нами с:
    16 сен 2008
    Сообщения:
    10
    Симпатии:
    0
    правильно ли я понимаю, что поставив апостофы я убиваю эту возможность накрутки?
    Код (Text):
    1. VALUES ('1','2','".$_GET['value']."')
    ведь магические кавычки на большинстве вебсерверов включены, и они помешают вставить дополнительный параметр.
     
  8. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    ну если на это надееться :)
     
  9. Anonymous

    Anonymous Guest

    магические кавычки на нормальных хостингах как раз уже выключены (как и должно быть по дефолту в PHP5), а в PHP6 их вообще не будет.
    ?value=5'),('1','2','5'),('1','2','5
     
  10. viktor_nez

    viktor_nez Активный пользователь

    С нами с:
    16 сен 2008
    Сообщения:
    10
    Симпатии:
    0
    Горбунов Олег
    Код (Text):
    1. INSERT INTO votes_polls (user_id, poll_id, vote_value) VALUES ('1','2','5\'),(\'1\',\'2\',\'5\'),(\'1\',\'2\',\'5')
     
  11. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    viktor_nez
    это что и зачем (последнее)? ))
     
  12. viktor_nez

    viktor_nez Активный пользователь

    С нами с:
    16 сен 2008
    Сообщения:
    10
    Симпатии:
    0
    Это то, что делают кавычки магические =)

    Вообще все это навеяно тоннами примеров различных кульхацкеров, пишущих много статей о взломе, кучу примеров с иньекциями, а вот пока только Luge написал что то рабочее к конкретному коду, спрашивается, а что другие - пишут не пробуют? :) в том числе куча шлака по ссылке Mr.M.I.T.
     
  13. Anonymous

    Anonymous Guest

    viktor_nez, а если mq выключены?
     
  14. viktor_nez

    viktor_nez Активный пользователь

    С нами с:
    16 сен 2008
    Сообщения:
    10
    Симпатии:
    0
    Горбунов Олег
    а если мне еще и доступ к шелу дали, расписав это на главной странице? =)
     
  15. Anonymous

    Anonymous Guest

    Этим и отличается хороший программист от плохого — моим скриптам(и клиентам) пофиг, включены у них short_tags, allow_url_fopen, magic_quotes и прочая поебень: скрипты просто работают, и работают правильно.
     
  16. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    пцц!!
    (с) Евгений Попов
     
  17. viktor_nez

    viktor_nez Активный пользователь

    С нами с:
    16 сен 2008
    Сообщения:
    10
    Симпатии:
    0
    Горбунов Олег
    имено для такого ответа сделана ремарка во втором моем посте в скобках =)
     
  18. Anonymous

    Anonymous Guest

     
  19. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    viktor_nez
    любая инъекция — признак лени программиста. А магические кавычки и ошибка корректности синтаксиса — это так, отмазки, чтобы спихнуть вину ежели что случится.
     
  20. decoder

    decoder Активный пользователь

    С нами с:
    11 фев 2006
    Сообщения:
    469
    Симпатии:
    0
    А еще важным свойством таких "приложений" оказывается их непереносимость.
    Стоит сменить хостера или своему же хостеру чуть изменить настройки - и ото всюду посыпятся ошибки и дыры.
     
  21. Anonymous

    Anonymous Guest

     
  22. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    ты про Распутина почитай ;)
     
  23. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    жуть =))
     
  24. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    ну знаю я
    а ещё они со всем вводом вообще это делают
    и нахрена тебе такое извращение?
    формы отфильтровать так сложно?

    +

    и стоит ли надеяться на то, что именно там они будут везде, где планируется использовать скрипт?
     
  25. Xerk

    Xerk Активный пользователь

    С нами с:
    5 окт 2007
    Сообщения:
    177
    Симпатии:
    0
    Адрес:
    Владивосток
    эм... а что мешает, если ожидается ввод цифр, сделать что-то вроде $val = (int)$_GET['param'];. Tекст проверить на допустимые символы и так далее?
     
Статус темы:
Закрыта.