Старый 26.05.2013, 13:38   #1
HeartLESS
 
Регистрация: 25.04.2012
Сообщений: 101
Репутация: 31
По умолчанию PHDays 2013 - $natch

Привет, расскажу про квест $natch на минувшем PHDays 2013.

$natch - ДБО-система, реализованная на php с использованием ООП и паттерна MVC.
Участники конкурса получили исходный код приложения и виртуальную машину за 24 часа до соревнования.
В исходниках были: папки Application, library, logs, public, sql-скрипт ibank.sql и readme-users.txt
В папке logs хранились 2 файла: messages.log и changePassword

Подробнее о сервисе:
Существовал десктопный и мобильный вариант сервиса.
Пользователи различались по способу отправки денег:
1 вид - Mobile bank - Отправка денег не требовала подтверждения;
2 вид - SMS-tokens - На наш номер "отправлялась" СМСка с кодом подтверждения;
3 вид - Transaction authentication numbers - было 10 (14?) одноразовых паролей, которые запрашивались
для подтверждения транзакции.

У некоторых контактов при входе требовалась смена пароля.



Пользователь мог создавать контакты, экспортировать и импортировать их в xml.
Так же пользователь мог создавать шаблоны для отправки денег.

Сорцы тут:
"Вы не можете прикреплять вложения", поэтому сорцы выложит Beched или Orb
или я =) сорцы

Сразу скажу, что анализ приложения проходил в режиме blackbox 2 whitebox, потому что достаточно тяжело
удерживать и отлаживать в голове такой громоздкий код. Вопрос встал не столько в поиске, сколько в грамотной автоматизации

Уязвимости:
1) Обход Captcha:
Самая простая уязвимость, при логине с мобильной версии не запрашивалась captcha:


Устанавливалась кука "mobileInterface=true";

2) XXE в шаблонах и чтение файлов:
Картинка с шаблонами

Так как сервис локальный, сообщения для подтверждения транзакций не отправлялись, а складывались в /var/www/logs/messages.log. Смена пароля логировалась в changePassword.log
К этим файлам не было доступа напрямую, они были выше корня.

Пример импортируемого файла, который читал бы логи:
PHP код:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE name [<!ENTITY xxe1 SYSTEM "php://filter/convert.base64-encode/resource=///var/www/logs/changePassword.log" ><!ENTITY xxe2 SYSTEM "php://filter/convert.base64-encode/resource=///var/www/logs/messages.log" >]>
<contacts>
<contact><name>1</name><account>2</account><description>&xxe1;</description></contact>
<contact><name>2</name><account>3</account><description>&xxe2;</description></contact>
</contacts>
base64-кодирование осуществлялось для валидации xml.

Пример (xxe в поле name)


Код:
atob("WzIwMTMtMDUtMjYgMjI6MTI6NTBdICMyIG5ldyBwYXNzd29yZCBpYmFuawo=")
"[2013-05-26 22:12:50] #2 new password ibank
"
atob("WzIwMTMtMDUtMjYgMjI6MTI6MThdICMyIDk4MS03NjUtNDMtMjEgT1RQIGNvZGU6IDQ4NDY2Cg==")
"[2013-05-26 22:12:18] #2 981-765-43-21 OTP code: 48466
"
К сожалению, поле description не отображалось в браузере, а поле name вмещало только 255 символов, поэтому xml пришлось выкачивать и парсить как xml. Я использовал python ElementTree

Таким образом я получал доступ ко всем измененным паролям и сообщениям для подтверждения.

3) Возможность редактирования шаблона, не принадлежащего конкретному аккаунту
Предполагалось, что боты будут слать друг другу деньги, значит взломщики должны отредактировать шаблоны.
host/transactions/editTemplate/id/$id

К сожалению, и я, и beched допустили смешные и непростительные ошибки в автоматизации шаблонов, поэтому оба не сняли около 7к рублей.

4) Слабые пароли. Просто брут.
Настоящий список паролей:
PHP код:
qwerty
11111  12345  123456  1234567
12345678  654321  123123  password  
root  toor  superman  dragon  
ninja  iloveyou  sex  abc123  
qweasd  asdzxc  letmein  jesus  
monkey  master  welcome  shadow  
baseball  phdays 
В моем списке совпали не все.

Автоматизация:
Для автоматизации я использовал python 2.7 на kali linux и следующую логику:

В основном будут аккаунты 1 и 2го вида, так как tan пробрутить сложно (угадал, tan были только у людей)
Пароли будут меняться, надо их постоянно парсить.
Удобно создать sqlite таблицу, в которой я буду держать информацию о пользователях.

В итоге было 5 основных скриптов и 1 дополнительный, инициализирующий БД.
Их я никому не покажу по причине стыда за код, я плохо пишу на питоне.

1 скрипт постоянно загружал и считывал контакты, выставлял значения в базе.
2 - брутилка
3 - логинится под известным паролем, определяет тип контакта и запускает
4 - хакающий скрипт. Он коммитил транзакции, а еще ждал смски. И на всякий случай брутил tan, если не оставалось аккаунтов 1 и 2го вида
5 - скрипт, меняющий шаблоны. Не работал корректно

Из-за своего кода я запустился минут на 5 позже Beched`a, который успел пробрутить почти все пароли.
У него не работал валидно xxe, поэтому я забрал все аккаунты, которые пароли меняли.


Победители конкурса

Остальным восьми участникам конкурса не удалось вывести из PHDays iBank ни одного рубля.

Вопросы?

Последний раз редактировалось HeartLESS; 27.05.2013 в 11:28..
HeartLESS вне форума   Ответить с цитированием
Старый 26.05.2013, 23:30   #2
Воришко
 
Регистрация: 17.03.2013
Сообщений: 17
Репутация: -7
По умолчанию

Вопрос, кто на фотках? Ну т.е кто есть кто.
Воришко вне форума   Ответить с цитированием
Старый 27.05.2013, 11:36   #3
HeartLESS
 
Регистрация: 25.04.2012
Сообщений: 101
Репутация: 31
По умолчанию

Цитата:
Сообщение от Воришко Посмотреть сообщение
Вопрос, кто на фотках? Ну т.е кто есть кто.
Робин и noname какой-то
HeartLESS вне форума   Ответить с цитированием
Старый 27.05.2013, 17:00   #4
banana
 
Аватар для banana
 
Регистрация: 05.07.2010
Сообщений: 29
Репутация: 3
По умолчанию


Don Omar и еще репер какой-то

Последний раз редактировалось banana; 27.05.2013 в 17:04..
banana вне форума   Ответить с цитированием
Старый 28.05.2013, 09:40   #5
oRb
 
Аватар для oRb
 
Регистрация: 01.07.2010
Сообщений: 319
Репутация: 138
По умолчанию

Цитата:
К сожалению, поле description не отображалось в браузере, а поле name вмещало только 255 символов, поэтому xml пришлось выкачивать и парсить как xml.
Вот это не очень понял. Грузить надо было в description, просто читать потом нужно было либо через экспорт, либо через редактирование контакта.
__________________
Не оказываю никаких услуг.
I don't provide any services.

Последний раз редактировалось Beched; 05.06.2013 в 18:11.. Причина: оффтоп
oRb вне форума   Ответить с цитированием
Ответ

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

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

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

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

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



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