Старый 06.07.2010, 15:27   #1
Dr.Z3r0
 
Аватар для Dr.Z3r0
 
Регистрация: 05.07.2010
Сообщений: 101
Репутация: 156
По умолчанию Новый метод атаки через Reverse-IP

Новый метод атаки через reverse-ip

Хоть статья и 2009 года, но до сих пор актуальна.

0. INTRO
Вобщем не буду делать большое вступление. Недавно имело место хекать сайт. Шел был успешно залит на соседний, но вот беда на сервере грамотно выставленны права. Пришлось включать голову и думать. И в результате этих дум у меня появился новый способ о чем я ниже и напишу.

Этот способ подходит для следующих ситуаций:
  • Грамотно выставленны права и порутать сервер не удалось
  • На сервере включенны open_basedir и safe_mode без возможности обхода оных
  • Не знание пути к целевому сайту
  • Какие то другие ситуации, я еще не придумал ^_^

Для реализации подобной атаки требуется:
  • На целевом сайте требуется хранение важной информации в сессиях
  • Само собой необходим шелл на соседнем сайте
  • Необходимы права на запись в папку где хранятся файлы сессий


1. ОПИСАНИЕ/ИСПОЛЬЗОВАНИЕ
Может быть вы уже догадались этот способ основан на созданиях файлов с сессиями где можно вписать произвольные данные. В данный момент не могу привести в пример цмсок/форумов с храненией инфы сессиях бо просто не помню, мб кто нить ниже отпишет ^_^.


Случай №1

Вот представим какую нить ебучую цмс. Эта цмс допустим располагается на хосте lamo.com, на этом же сервере есть другой сайт xack.com на который вы без труда смогли залить веб шелл. Но к сожалению вы не можете пролезть к lamo.com за отсутствием прав, либо еще чего то там. Но в той цмс что там стоит есть вот такой файл admin.php
Код:
<?php
if($_SESSION['admin']===true){
	//тут типа выполнение каких нить администраторских действий
	...
}else die('Fuck off!');
?>
Теперь опишу как хранятся данные в файлах сессии:
Код:
[имя_переменной]|[тип_переменной]:[длина]:[значение_переменной];[имя_переменной2]|... и тд

где тип переменной задается так:
s- строковая переменная (string)
i- числовая переменная (integer)
b- булевая переменная (boolean)
a- массив переменных (array)

(!)Для строковой переменной [значение_переменной] задается в кавычках "". 
Для булевых переменных значения хранятся следующим образом 1-true, 0-false
Для перменных типа булевых и числовых отсутствует параметр [длина] разумеется один разделитель ":" так же нужно будет убрать.
Описание хранение массива я тут приводить не буду, кому нужно будет - разберется. Что ж прояснив ситуацию со стандартом хранения сессий в файлах, начнем создавать файл сессии для описанного выше случая, он будет выглядеть так:
Код:
admin|b:1;
Как говорится все гениальное просто. Теперь сохраняем этот файл как sess_13cacf9c6032d82cf2f0a19bb479bd26 и загружаем его на сервер в папку где хранятся все файлы сессий (по дефолту /tmp но узнать точно можно сделав вывод phpinfo() и посмотрев параметр session.save_path).

Залил? Молодец! Обязательно поставь chmod 0777 на только что загруженный файл.

Теперь твоя задача создать в браузере куку с именем PHPSESSID (имя глядеть в phpinfo() параметр session.name, PHPSESSID - это по дефолту обычно никто не меняет) со значением 13cacf9c6032d82cf2f0a19bb479bd26 (надеюсь вы уловите взаимосвязь между именем файла сессии и значением куки). Открываем http://lamo.com/admin.php и нас пускают внутрь!


Случай №2

Опять же представим эту цмс, только файлик admin.php будет выглядеть вот так:
Код:
<?php
...
if(!empty($_SESSION['pass'])){
	$result=@mysql_query("SELECT * FROM admin WHERE pass='".$_SESSION['pass']."'");
	if(mysql_num_rows($result)!= 0){
		//тут типа выполнение каких нить администраторских действий
		...
	}else die('Fuck off!');
}else die('Fuck off!');
?>
То есть в сессии содержится пароль администратора. Только не надо опять думать что это безвыходная ситуация. Создаем по аналогии с предыдщим пунктом файл сессии:
Код:
pass|s:11:"1' OR 1=1/*";
Для тех кто не понял, в большинстве случаев программисты доверяют данным из сессий и почти, да что почти, можно сказать никогда не ставят проверки на них, а в данном случае мы используем это для реализации sql inject, и благодаря чему становимся администратором.


Случай №3

А теперь такая ситуация на серве включены register_globals и magic_qoutes. А файлик admin.php выглядит так:
Код:
<?php
...
if(!empty($pass)){
	$result=@mysql_query("SELECT * FROM admin WHERE pass='".$pass."'");
	if(mysql_num_rows($result)!= 0){
		//тут типа выполнение каких нить администраторских действий
		...
	}else die('Fuck off!');
}else die('Fuck off!');
?>
Вроде бы все равно хочешь не хочешь $pass будет слешироваться. Но это не так magic_qoutes слеширует только(!) GET, POST, COOKIE а SESSION остается таким как и был. А вот register_globals превратит все из SESSION в глобальные переменные. Для эксплуатации используем содержание файла сессий как и в предыдущем пункте.

Случай №4

Что делать если не прокатили предыдущие способы? Можно тупо почитать все сессии что хранятся в папке с файлами сессий, в поисках паролей/логинов к целевому сайту. Но к сожалению не всегда выставленные права дают прочитать эти файлы и все же...

Конечно подобных файлов очень много. Но если посмотреть, то большинство из них пустые. Так вот разумеется читать следует остальные, непустые файлы. Никто не даст вам гарантию что этот файл принадлежит именно целевому сайту, но пытаться нужно.

Этот случай есть чисто теория, я не уверен что этот способ будет кто то применять, но думаю написать стоит.

2. OUTRO
Да я согласен это не очень часто встречаемый случай, но именно этот способ позволил мне получить веб шелл на целевом веб сайте, может быть и вам он поможет также.
Отдельный привет я хочу выразить тестерам halkfild и Grey.


(c) Dr.Z3r0
01.06.08
Dr.Z3r0 вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

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



Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot