Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
20.04.2024
Размер:
30.24 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to 40

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

X-Mobile

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

 

 

 

ХАКЕР 11 /190/ 2014

 

 

 

 

 

w Click

to

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

ЧТО ВНУТРИ ТЕГА?

С технической точки зрения NFC-тег — это микрокомпьютер наподобие тех, что находятся внутри SIM и банковских карт. Здесь есть свой процессор, оперативная и постоянная память, но нет традиционного источника питания. Электрический ток он получает посредством электромагнитной индукции, которая возникает между антеннами считывателя и метки, так же как это происходит в беспроводных зарядных устройствах и пассивных радиоприемниках. Благодаря сверхмалому уровню потребления энергии, мощности такого «трансформатора» оказывается вполне достаточно для нормального функционирования микрокомпьютера.

Антенна занимает около 99% площади метки и передает данные на частоте 13,56 МГц со скоростью 106, 212, или 424 Кбит/с. Стандарты NFC определяют несколько протоколов передачи данных, в том числе несколько реализаций протокола обмена данными (они обозначаются буквами A, B и так далее), которые могут быть дополнены производителем самой метки. Например, метки семейства MIFARE реализуют ряд расширений над стандартным протоколом, из-за чего можно поймать несовместимости между приложениями и меткой (но это редко).

Безопасность данных обеспечивается несколькими путями:

Малая дальность действия. Десять сантиметров — очень приватная зона.

Защита от клонирования с помощью уникального серийного номера.

Возможность защиты от перезаписи и защиты данных паролем.

Опциональное шифрование данных в памяти и при передаче.

Ведущий производитель NFC-тегов — компания NXP Semiconductors. Они производят теги семейства MIFARE, которые стали настолько популярны, что совместимость с ними обеспечивают не только другие производители тегов, но и производители NFC-чипов для смартфонов (на уровне эмуляции тегов). Семейство включает в себя несколько разных моделей, начиная от простейших MIFARE Ultralight C и заканчивая MIFARE DESFire EV1, имеющих встроенную файловую систему с поддержкой криптографии и гибко настраиваемыми правами доступа.

Пропускаем экран добавления переключателей, на следующем экране подносим смартфон к тегу.

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

Разблокировкасмартфона

не обязательно отдавать человеку, достаточно, чтобы он ее отсканировал.

Включениекомпа

Идея в том, чтобы создать настройку, которая позволит включать комп c помощью NFC-тега без учета того, где находится сам тег. Метод основан на функции WoL, позволяющей включать комп с помощью отправки пакетов на Ethernet-порт, и Android-приложении Wol Wake on Lan Wan, которое делает это через интернет.

Как настроить? Для начала открываем панель управления роутером и настраиваем проброс портов 7 и 9 (порты WoL) на нашу домашнюю машину. Очень важно указать MAC-адрес вместо IP. Далее идем на noip.com, регистрируемся и получаем бесплатный домен, который мы будем использовать, чтобы достучаться до роутера извне.

Далее устанавливаем на смартфон Wol Wake on Lan Wan, нажимаем кнопку Add New и вбиваем в открывшемся окне произвольное имя, MAC-адрес компа и полученный ранее домен, нажимаем Save. Ставим Tasker, переходим на вкладку Tasks, создаем новую задачу, в качестве действия выбираем Plugin → Wol Wake on Lan Wan и наш WoL-профиль. Сохраняем.

Теперь нам нужно привязать эту задачу к NFC. Для этого запускаем Trigger, добавляем задание, в качестве триггера выбираем NFC, а в качестве действия — «Планировщик → Задание Планировщика» (разрабы перевели Tasker как «Планировщик»), далее выбираем созданную на предыдущем этапе в Tasker задачу, пропускаем создание переключателей и на последнем этапе настройки подносим смартфон к NFC-тегу.

Это все. Если все настроено правильно, то при обнаружении тега Android отдаст управление Trigger, он, в свою очередь, запустит Tasker-задачу, которая активирует нужный нам профиль в приложении Wol Wake on Lan Wan, оно отправит WoLпакет роутеру, а тот перенаправит его на MAC-адрес компа, сетевая карта которого... Ну да ладно. В общем, все просто должно работать :).

У Motorola есть довольно интересный аксессуар для смартфонов под названием Motorola Skip (goo.gl/oE1UlX). Это клипса на одежду для быстрой разблокировки смартфона без необходимости введения PIN-кода или графического ключа. Аксессуар в некоторых случаях довольно полезный, но работает он только со смартфонами той же компании. К счастью, аналогичную штуковину можно собрать на коленке.

Не буду рассказывать, как сделать саму клипсу, — тут каждый волен проявить свою фантазию, NFC-тег можно и на руку наклеить — а вместо этого скажу, как настроить разблокировку смартфона при ее касании. Есть несколько способов, но самый простой и эффективный — это Xposed-модуль NFC LockScreenOff Enabler. Модуль, как и сам Xposed, требует root, но зато кроме эффективного решения задачи включает в себя суперфункцию — активацию NFC при выключенном экране.

Дело в том, что в целях безопасности Android запрещает использовать NFC до тех пор, пока экран не будет разблокирован (не просто включен, а именно разблокирован), что сводит на нет многие эффективные приемы его использования. NFC LockScreenOff Enabler решает эту проблему.

Визитка

NFC-теги можно использовать в комбинации с визитками. На рынке есть несколько компаний, которые занимаются их выпуском, однако их ценники таковы, что проще самостоятельно наклеить теги на обыкновенные визитки и в кармане еще останется куча денег. В тег можно записать любую информацию, включая контактные данные (TagWriter поддерживает такой формат), адрес веб-сайта или даже географические координаты своего офиса (смартфон автоматически откроет карты для показа положения). А самое главное — визитку совсем

Trigger: профиль для автомобиля

NFC LockScreenOff Enabler: разблокировка

 

NFC-тегом

ВЫВОДЫ

Технология NFC имеет массу применений, и я уверен, что уже через 50 лет NFC-метки и терминалы оплаты будут повсюду (прим. ред. а может и намного раньше, лет так эдак через 15), от рекламных плакатов до супермаркетов. И я надеюсь, что хоть в этот раз Россия не отстанет от всего мира на пятьдесят лет.

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

w Click

to

ХАКЕР 11 /190/ 2014

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

41

 

 

 

 

 

w Click

to

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Друзья, с этого номера мы начинаем публикацию ежемесячных обзоров интересного, а главное — полезного софта. Выпуски будут тематические. В этом месяце сконцентрируемся на юзабилити, в следующем — на безопасности, потом экономия трафика и так далее. Приложений в обзоре будет немного, зато каждое из них — настоящий бриллиант. Предвидя вопрос о платформах, скажу, что акцент будет сделан на Android (все-таки надо быть реалистами), но обещаем не забывать об iOS и других платформах.

Приятного чтения.

ВЫПУСК #1. ЮЗАБИЛИТИ

TAPPATH

TapPath — новое приложение от Криса Лейси (Chris Lacy), разработчика, подарившего нам удобнейший мобильный браузер Link Bubble и под завязку нашпигованный инновационными функциями домашний экран Action Launcher. Как и большинство творений Криса, TapPath крайне простое, но абсолютно гениальное приложение, серьезно улучшающее user experience.

Идея здесь следующая. Ты просматриваешь ленту новостей и натыкаешься на интересную статью, прочитать которую можно, перейдя по ссылке на сайт. Времени у тебя мало, поэтому ты решаешь сохранить статью в Pocket и прочитать через несколько часов. Для этого тапаешь по ссылке, а затем в браузере вызываешь контекстное меню, нажимаешь «Поделиться» и выбираешь Pocket. Удобно? Нет! Особенно если учитывать, что с помощью TapPath все это можно сделать, два раза тапнув по ссылке.

Используемое для двойного тапа приложение, естественно, можно изменить. При этом для конфигурирования доступно одинарное и даже тройное нажатие. Итого три разных действия над ссылкой без всяких меню и запуска сторонних приложений. Просто, удобно, гениально.

TapPath: goo.gl/bQmh8E

Платформа: Android

Цена: 30 рублей

PEEK

Разработчики прошивки Paranoid Android всегда были падки до интересных идей, в особенности если они принадлежат не им. Однажды они украли идею у мессенджера Facebook и сделали на ее основе функцию Halo, в другой раз перенесли идею кругового меню из стокового браузера в прошивку, а движок тем CyanogenMod так и вообще утащили целиком. Ребята веселые, поэтому функция Active Display в смартфонах Motorola им тоже пришлась по душе.

Так появилась Peek — штатная функция Paranoid Android, которая включает экран и выводит на него пришедшие уведомления, когда юзер берет смартфон в руки или достает из кармана (используется датчик положения и освещенности). Приложение Peek — развитие этой идеи от одного из разработчиков прошивки с кучей настроек и изумительным дизайном.

Совсем недавно появилась бесплатная версия Peek, так что даже если ты уже используешь приложение с подобной функциональностью — настоятельно рекомендуем попробовать.

Peek Free: goo.gl/4KI09Y

Платформа: Android

Цена: бесплатно

LASTAPPSWITCHER

Ох, сколько разработчиков пыталось решить проблему мультитаскинга в смартфонах. Выезжающие по бокам экрана панели, список последних запущенных приложений в шторке, полупрозрачный список поверх экрана, свайпы, виджеты. А между тем ларчик открывался на удивление просто.

Last App Switcher — крайне простое приложение, которое позволяет переключаться между двумя приложениями, просто нажав кнопку «Поиск» или потянув вверх от кнопки «Домой» (на смартфонах без хардварных кнопок управления). И все это без необходимости получать root, софтина просто прикидывается поисковым движком.

Да, по умолчанию вместо кнопки «Поиск» используется небольшая полупрозрачная кнопка поверх экрана, но поведение можно изменить в настройках.

Last App Switcher: goo.gl/xixA2X Платформа: Android

Цена: бесплатно

MULTICLIPPER

Для Android есть множество менеджеров буфера обмена, и все они неудобные. Почти всегда это приложение, которое просто сохраняет в себе скопированный текст. Multi Clipper отличается от них и позволяет создать своего рода стековый буфер обмена: в него можно помещать текст простым копированием и в любой момент извлекать с помощью меню, доступного через нажатие небольшой кнопки, которая всегда на экране.

Идеальный инструмент для тех, кому приходится перемещать между приложениями сразу несколько разных участков текста и работать с массивами однотипных строк (привет мобильным программистам). Сейчас приложение выглядит несколько несуразно, но отлично работает.

Multi Clipper: goo.gl/kQw9i3 Платформа: Android

Цена: бесплатно

Все вопросы касательно наполнения рубрики, а также предложения включить в обзор тот или иной софт можно смело отправлять на email редактора рубрики (zobnin@ gmail.com). Туда же можно слать весь связанный с обзорами гнев, оскорбления и прочий конструктив.

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

GPS

w Click

to 42

 

 

 

 

m

Phreaking

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

 

 

 

 

 

 

 

 

 

 

 

 

ХАКЕР 11 /190/ 2014

 

 

 

 

 

w Click

to

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

ХАКЕРСКОГО

РАЗЛИВА

СОБИРАЕМ GPS-РАДАР НА БАЗЕ STM32F3DISCOVERY И U-BLOX NEO-6M

Кирилл Снежко snezhko.kirill@gmail.com

Конечно, ты можешь купить GPSприемник в Китае за несколько долларов. А можешь и не покупать — все равно он есть у тебя в телефоне, в навигаторе в машине… Но если ты хочешь быть настоящим хакером-ин- женером и разобраться в технологии GPS на низком уровне, то добро пожаловать в эту статью. Разберемся так, что мало не покажется!

 

 

стория разработки глобальной системы позициони-

 

 

рования (Global Positioning System, GPS) уходит кор-

 

 

нями в 50-е годы прошлого века, а первый спутник

 

 

был запущен в 1974 году. Первоначально система ис-

 

 

Ипользовалась лишь военными, но после трагедии с самолетом

 

 

авиакомпании Korean Airlines, который был сбит над террито-

 

 

рией СССР, гражданские службы также получили возможность

 

 

работы с GPS. В 1993-м окончательно было решено предоста-

 

 

вить GPS для использования гражданскими службами на без-

 

 

возмездной основе, а после отключения намеренного округле-

 

 

ния положения точность возросла со ста метров до двадцати.

 

 

В наши дни точность продолжает увеличиваться, а стоимость

 

 

приемников — снижаться. Поэтому сделать GPS-логгер, ну или

 

 

навигатор, может любой,:).

 

 

МАТЧАСТЬ

 

 

Итак, что же должно делать наше устройство?

 

 

1. Получить информацию о текущем положении от GPS-

 

 

приемника.

 

 

2. Разобрать ее.

 

 

3. Показать на экране текущее положение приемника, а также

 

 

видимые спутники.

 

45°

Для этого придется узнать, что таится за терминами GPS,

 

NMEA-0183 и алгоритм Брезенхема.

 

 

W

E

GPS

 

 

Конечно, детально разбираться в нюансах работы GPS не тре-

 

 

буется, поскольку всю работу по вычислению координат, ско-

 

 

рости, курса и других параметров за нас возьмет на себя GPS-

S

 

приемник. Но базу знать надо. В первую очередь надо понять,

 

что GPS-приемник ничего и никогда не передает спутникам

 

 

Если ты мне не веришь, то просто обрати внимание, что при-

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

w Click

to

ХАКЕР 11 /190/ 2014

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

GPS хакерского разлива

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

43

 

 

 

 

 

w Click

to

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

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

Для нахождения расстояния между приемником и передатчиком необходимо сначала синхронизировать их часы, а затем посчитать искомое расстояние, зная скорость распространения радиоволны, а также задержку между временем передачи и временем приема.

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

Существуют способы, которые позволяют уменьшить время старта: AGPS (получение альманаха альтернативными способами — через интернет или Почтой России), DGPS (исключение искажения сигнала атмосферой) и другие. Но я их рассматривать не буду, поскольку для выполнения поставленной задачи этого не нужно.

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

NMEA-0183

NMEA — National Marine Electronics Association, а NMEA-0183 (согласно Википедии) — текстовый протокол связи морского (как правило, навигационного) оборудования (или оборудования, используемого в поездах) между собой. Вот строки, приходящие от моего приемника.

(...)

$GPRMC,174214.00,A,5541.23512,N,03749.12634,E,

3.845,178.09,150914,,,A*6F

$GPVTG,178.09,T,,M,3.845,N,7.121,K,A*35

$GPGGA,174214.00,5541.23512,N,03749.12634,E,1,04,

4.98,178.2,M,13.1,M,,*56

$GPGSA,A,3,20,14,04,17,,,,,,,,,8.85,4.98,7.31*02

$GPGSV,4,1,16,01,67,242,,02,,,15,03,,,15,04,53,

284,35*74

$GPGSV,4,2,16,05,,,23,07,,,19,08,,,21,10,,,24*7F

$GPGSV,4,3,16,11,,,14,12,,,12,14,35,058,37,17,24,

311,34*72

$GPGSV,4,4,16,20,40,275,29,22,08,097,,37,25,199,

27,39,25,195,32*73

$GPGLL,5541.23512,N,03749.12634,E,174214.00,A,A*6D

(...)

Сначала определим похожие части каждой строки. Легко видеть, что все они начинаются одинаково и более-менее одинаково заканчиваются. $GP — информация идет от приемника GPS (ты ведь понимаешь, что на корабле куча других датчиков: если бы у нас был аварийный маяк, то строка начиналась бы с $EP, а если эхолот, то с $SD, ну и так далее). Каждая строка обязательно заканчивается контрольной XOR-суммой всех байтов в строке, начиная от $ и заканчивая *, — это как раз те два символа в конце строки. И не забываем про символы <CR> и <LF> после контрольной суммы.

Разберем каждую из строк подробнее.

$GPRMC,hhmmss.ss,A,aaaa.aaaa,N,bbbb.bbbb,E,c.c,d.

d,DDMMYY,z1,z2,e*ff

GPRMC — GPS Recommended Minimum Navigation Information sentence C — рекомендуемый минимум навигационной информации, строка типа С.

hhmmss.ss — время по всемирному координированному времени UTC, когда была произведена фиксация положения.

A — флаг достоверности информации. Если V, то информации верить нельзя.

 

aaaa.aaaa — величина широты. Первые две цифры — гра-

 

дусы, вторые две — целое значение количества угловых

 

минут, после точки — дробная часть количества угловых

 

минут (переменной длины).

 

N — северная широта. Если S, то южная.

 

bbbb.bbbb — величина долготы. Первые две цифры —

SRC

градусы, вторые две — целое значение количества

угловых минут, после точки — дробная часть количества

 

угловых минут (переменной длины).

Весь код ты можешь

E — восточная долгота. Если W, то западная.

найти на гитхабе (у меня:

c.c — горизонтальная скорость в узлах (умножить

https://github.com/

на 1,852 для получения скорости в километрах в час),

argrento или у Хакера).

целая и дробная части имеют переменную длину.

Просто скопируй с за-

d.d — направление скорости (путевой угол, курс) в граду-

меной файлы в папку

сах, целая и дробная части имеют переменную длину.

Template из Standard

DDMMYY — текущая дата.

Peripheral Library.

z1 — отсутствующая у нас величина направления магнит-

 

ного склонения.

z2 — также отсутствующее у нас направление магнитного склонения.

e — индикатор режима.

ff — контрольная сумма. $GPVTG,a.a,T,b.b,M,c.c,N,d.d,K,A*e

$GPVTG — GPS Track Made Good and Ground Speed — строка с информацией о курсе и скорости.

a.a — курс в градусах.

T — True, флаг достоверности информации.

b.b — направление магнитного склонения (у нас его нет).

M — Magnetic, да, действительно магнитное.

c.c — горизонтальная скорость в узлах (умножить на 1,852 для получения скорости в километрах в час).

N — kNots, узлы.

d.d — горизонтальная скорость в километрах в час (и умножать ничего не надо).

K — километры в час.

ee — контрольная сумма.

$GPGGA,hhmmss.ss,a.a,N,b.b,E,c,d,e.e,f.f, M,g.g,M,h.h,*i

$GPGGA — Global Positioning System Fix Data — строка с информацией о текущем местоположении.

hhmmss.ss — время по всемирному координированному времени UTC, когда произведена фиксация положения.

a.a — величина широты.

N — северная широта. Если S, то южная.

b.b — величина долготы.

E — восточная долгота. Если W, то западная.

c — флаг качества сигнала GPS.

d — количество используемых спутников.

e.e — фактор снижения точности (DOP, Dilution of precision).

f.f — высота расположения приемника над уровнем моря.

M — высота дается в метрах.

g.g — различие между геоидом (истинной формой нашей планеты) и эллипсоидом по WGS84 (трехмерная система координат для позиционирования).

M — различие дается в метрах.

h.h — номер станции, передающей поправки DGPS.

i — контрольная сумма.

WWW$GPGSA,A,x,y1,y2,y3,y4,y5,y6,y7,y8,y9,y10,y11, y12,z1,z2,z3*i

Страница Neo-6M:

goo.gl/iyztz2

$GPGSA — GPS DOP and Active satellites — строка с инфор-

 

мацией о спутниках, использованных для определения

Первоисточник

местоположения и о факторах снижения точности.

NMEA-0183:

A — автоматический режим выбора работы в 2D или 3D,

www.nmea.org

M — ручной режим, когда жестко выбран, например, 2D.

 

x — режим работы приемника: 0 — координаты не опре-

Документация на экран

делены, 1 — режим 2D, 2 — режим 3D.

МТ-12864А:

y1..y12 — номера спутников, используемых для опреде-

goo.gl/VFLHA9

ления местоположения приемника.

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to 44

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

Phreaking

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

 

 

 

ХАКЕР 11 /190/ 2014

 

 

 

 

 

w Click

to

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

z1..z2 — PDOP, HDOP, VDOP (факторы снижения точности по положению, в горизонтальной плоскости и в вертикальной плоскости соответственно).

i — контрольная сумма.

$GPGSV,a,b,c1,d1,e1,f1,c2,d2,e2,f2,c3,d3,e3, f3,c4,d4,e4,f4*i

GPGSV — GPS Satellites in View — строка содержит в себе информацию о номере, азимуте, высоте над горизонтом и соотношением сигнал/шум спутника. В строке максимально может быть четыре спутника.

a — общее количество строк GPGSV.

b — номер текущей строки.

c1..c4 — номер спутника.

d1..d4 — высота над горизонтом в градусах (0..90).

e1..e4 — азимут спутника в градусах (0..359).

f1..f4 — соотношение сигнал/шум в децибелах (0..99).

$GPGLL,5541.23512,N,03749.12634,E,174214.00,A,A* 6D — на этой строке нет смысла останавливаться подробно, поскольку она содержит в себе координаты и время, а это мы уже имеем в строках GPRMC и GPGGA.

Разумеется, производителям GPS-приемников не запрещается добавлять собственные строки. У моего приемника можно при запуске увидеть такие:

$GPTXT,01,01,02,u-blox ag - www.u-blox.com*50

$GPTXT,01,01,02,HW UBX-G60xx 00040007

FF7FFFFFp*53

$GPTXT,01,01,02,ROM CORE 7.03 (45969) Mar 17

2011 16:18:34*59

$GPTXT,01,01,02,ANTSUPERV=AC SD PDoS SR*20

$GPTXT,01,01,02,ANTSTATUS=DONTKNOW*33

$GPTXT,01,01,02,ANTSTATUS=INIT*25

$GPTXT,01,01,02,ANTSTATUS=OK*3B

АлгоритмБрезенхема

Про ЖК-экран я рассказывал в сентябрьском номере (№ 188), кратко лишь скажу, что сделан он на базе контроллеров KS0108, а схема подключения к STM32F3-Discovery не изменилась: разъем для подключения экрана содержит в себе 20 пинов, описание представлено в списке по следующей маске: <номер> — <название из даташита> — <описание из даташита> — <куда подключается>.

1 — Ucc — питание — к 5V на Discovery.

2 — GND — земля — к GND на Discovery.

3 — Uo — вход питания ЖК-панели для управления контрастностью — к подстроечному резистору.

4..11 — DB0..DB7 — шина данных — к PD0..PD7 на Discovery.

12, 13 — E1, E2 — выбор контроллера — к PD8,PD9 на Discovery.

14 — RES — сброс — к PD10 на Discovery.

15 — R/W — выбор: чтение/запись — к PD11 на Discovery.

16 — A0 — выбор: команда/данные — к PD12 на Discovery.

17 — E — стробирование данных — к PD13 на Discovery.

18 — Uee — выход DC-DC преобразователя — к подстроечному резистору.

NEO-6M

Данный приемник производится швейцарской компанией u-blox, основанной в 1997 году. Линейка модулей Neo-6 представлена разновидностями G, Q, M, P, V и T, каждый из которых обладает своими характерными возможностями: например, Neo-6P имеет возможность очень точного (с ошибкой <1 м) определения положения за счет метода Precise Point Positioning (PPP).

Приемник Neo-6M обладает следующими свойствами:

время холодного или теплого старта — 27 с;

время горячего старта — 21 с;

максимальная частота выдачи информации — 1 Гц;

максимальная точность определения положения — 2,5 м;

максимальная точность определения скорости — 0,1 м/с;

максимальная точность определения курса — 0,5 градуса.

Этот алгоритм является одним из самых старых алгоритмов

 

Neo-6M умеет использовать SBAS (Satellite Based

компьютерной графики — он был разработан Джеком Бре-

 

Augmentation System) — спутниковые системы дифферен-

зенхемом (IBM) аж в 1962 году. С его помощью происходит

 

циальной коррекции, что увеличивает точность определения

растеризация графического примитива, другими словами,

 

положения до 2 м, а также AGPS (Assisted GPS) для снижения

этот алгоритм определяет координаты пикселей, которые не-

 

времени холодного старта. Получение данных AGPS проис-

обходимо зажечь на экране, чтобы полученный рисунок при-

 

ходит с сайта u-blox с помощью сервисов AssistNow Online

митива совпадал с оригиналом.

 

и AssistNow Offline (долгосрочный альманах). Модуль обла-

 

Представим, что мы рисуем линию, идущую из точки (0;

 

дает поддержкой протоколов NMEA, UBX и RTCM. UBX — про-

0) в (100, 32), как ты помнишь, у нашего экрана разреше-

 

приетарный протокол от u-blox, а RTCM — протокол для пере-

ние 128 × 64 точки. Несложно посчитать, что угол между этой

 

дачи модулю данных о дифференциальной коррекции DGPS.

прямой и осью Х составляет менее 45 градусов. Работа ал-

 

Также для связи доступны интерфейсы UART, I2C, SPI и USB.

горитма заключается в последовательном переборе всех ко-

 

Для работы с приемниками существует оригинальная ути-

ординат по оси Х в диапазоне от 0 до 100 и расчете соответ-

 

лита u-center, имеющая на момент написания статьи версию

ствующей координаты Y. Логично, что в большинстве случаев

 

8.11 (рис. 1).

значение координаты Y будет дробным, а это значит, что надо

 

Видно, что Neo-6M обладает огромным потенциалом,

каким-то образом выбрать целочисленное значение коор-

 

но детально описать все его возможности не хватит места,

динаты. Это делается путем выбора ближайшего пикселя.

 

поэтому ограничимся предлагаемыми из коробки: только

Для других углов наклона прямой, а также для окружностей,

 

UART на скорости 9600, только NMEA, частота импульсов —

эллипсов и прочего алгоритм имеет аналогичный вид (под-

 

1 Гц.

робнее о нем можно почитать в Википедии).

 

В плане подключения все предельно просто: линии VCC,

 

Алгоритм Брезенхема использует только операции сло-

 

GND, RX и TX на приемнике подключаем к +3.3V, GND, PA9

жения и вычитания целых чисел: обычно использование

 

и PA10 на Discovery соответственно.

арифметики дробных чисел замедляет работу контроллера.

 

ПРОГРАММА

Обычно, но не в нашем случае, поскольку внутри контрол-

 

лера STM32F303VC находится ядро ARM Cortex-M4 с FPU.

 

Она должна отображать текущее положение приемника, ско-

FPU (Floating Point Unit) — устройство, ускоряющее работу

 

рость, направление движения, факторы снижения точности,

с дробными числами (математический сопроцессор), по-

 

время, дату, а еще показывать в полярной системе координат

этому нас ничто не ограничивает и мы можем использовать

 

используемые спутники. Вот примерно так, как это делает

алгоритм DDA-линии (goo.gl/kspHco).

 

u-center на рис. 2.

 

Интересную демонстрацию ускорения работы МК при ри-

WARNING

Как только строка line от Neo-6M принимается кон-

совании фракталов можно посмотреть на YouTube (youtu.be/

троллером, происходит ее разбитие на токены (массив

BsGjWJAu2rI).

Не забывай заземлять-

charTokens) — на подстроки, которые в исходной строке раз-

ЖЕЛЕЗО

делены запятыми.

ся! Помни, что разряд

char *token = malloc(strlen(line) + 1);

Отладочная плата STM32F3-Discovery;

статического электри-

• модуль UART GPS NEO-6M от WaveShare на базе прием-

чества может убить

char *token2 = malloc(strlen(line) + 1);

 

ника u-blox NEO-6M;

и модуль GPS, и антенну,

int currentTokenNumber = 0;

ЖК-матрица МТ-12864А.

и экран, и контроллер!

int currentCharInTokenNumber = 0;

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

GPS хакерского разлива

w Click

to

ХАКЕР 11 /190/ 2014

 

 

 

 

 

m

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-xcha

 

 

 

 

 

strcpy(token, line);

char *delimeter = ",";

while (token != NULL) {

token2 = strpbrk(token + 1, delimeter);

if (token2 == NULL) {

delimeter = "*";

token2 = strpbrk(token + 1, "*");

}

/* Копируем часть строки между разделителями */

currentCharInTokenNumber = 0;

/* Очищаем значение токена */

memset(charTokens[currentTokenNumber], '\0',

MAX_TOKEN_LENGTH);

for (char *ch = token + 1; ch < token2; *(ch++))

{

charTokens[currentTokenNumber]

[currentCharInTokenNumber] = *ch;

currentCharInTokenNumber++;

}

currentTokenNumber++;

if (delimeter[0] == '*') {

token = NULL;

}else {

token = token2;

}

}

Казалось бы, вполне логично использовать функцию strtok, но я этого не делаю. Причину покажу на примере. Пусть имеется строка a,b,,,c. Результат разбития ее на токены с помощью strtok будет таким: 'a', 'b', 'c'. Для разбора NMEA это недопустимо, поскольку в этом протоколе значения токенов зависят от положения в строке. Результат работы описанного выше метода включает в себя пустые токены —

'a', 'b', '0', '0' 'c'.

Для удобного хранения информации о положении приемника, о точности определения положения, а также о параметрах спутников были написаны три структуры данных.

Положение и скорость приемника, а также дата и время:

struct _minimumNavigationInfo {

loat latitude;

char latModiicator; // East or West

loat longitude;

char lonModiicator; // North or South

loat groundSpeed;

loat speedAngle;

loat height;

char heightModiicator; // Metres or smth else

char time[9]; // "hh:mm:ss\0"

char date[9]; // "DD.MM.YY\0"

char isValid;

};

Структура точности определения координат:

struct _ixInfo {

double PDOP;

double HDOP;

double VDOP;

};

Структура для номера спутника, его положения и качества сигнала:

struct _satelliteInfo {

int satelliteId;

loat height;

loat azimuth;

loat SNR; // соотношение сигнал/шум

int isFull;

};

Если информация о спутнике неполная, например есть информация о высоте и азимуте, но нет о соотношении сигнал/ шум, то в этом случае в поле isFull записывается нулевое

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

 

E

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

45

 

 

 

 

 

 

w Click

to

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

 

g

 

 

 

 

 

df

 

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2Рис. 1. Общий вид u-center

Рис. 2. Ожидание того, что будет показано на экранчике 128 × 64

Рис. 3. А вот и реальность!

3

значение. Такие спутники при выводе на «радар» будут игнорироваться.

Заполнение структуры на основе массива токенов происходит очень просто: после разбора строки GPGSA в массиве charTokens значения факторов снижения точности *DOP находятся в элементах за номерами 15, 16 и 17.

ixInfo->PDOP = atof(charTokens[15]);

ixInfo->HDOP = atof(charTokens[16]);

ixInfo->VDOP = atof(charTokens[17]);

Теперь можно разобранную информацию смело выводить на экран (рис. 3).

FIN

Теперь ты знаешь, что в GPS тоже нет ничего сложного (если не лезть в дебри), а если тебе хочется понять суть спутниковой навигации, то добро пожаловать на курс от Стэнфорда «GPS: An Introduction to Satellite Navigation, with an interactive Worldwide Laboratory using Smartphones» (www.coursera.org/ course/gpslab) или от Университета Миннесоты «From GPS and Google Maps to Spatial Computing» (https://class.coursera.org/ spatialcomputing-001) на Coursera.

А в качестве домашнего задания я поставлю перед тобой три задачи: 1. Добавить возможность записи трека. 2. Заменить монохромный экран на цветной. 3. Вместе с WizFi220 (из номера 188) снабдить устройство возможностью получения A-GPS.

Если возникли вопросы, пиши мне. Удачи!

 

 

EASY

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

BUY

 

 

 

 

 

Взлом

w Click

to 46

 

 

m

w

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

HACK

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

 

 

 

ХАКЕР 11 /190/ 2014

 

 

 

 

 

w Click

to

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Алексей «GreenDog» Тюрин, Digital Security agrrrdog@gmail.com, twitter.com/antyurin

WARNING

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

ДОБАВИТЬПОДДЕРЖКУORACLEВMETASPLOIT

РЕШЕНИЕ

 

 

Итак, точная последовательность для Kali:

Сегодняшний Easy Hack будет во многом посвящен трикам с базами данных

 

 

 

Oracle, так что мы начнем с чисто технической проблемы — добавим под-

1.

Желательно обновиться до последней версии Kali:

держку Oracle в MSF.

 

 

apt-get update

В MSF есть приличный набор различных модулей для атаки на Oracle,

 

 

вот только из коробки они не работают. Причина тому — отсутствие необ-

 

 

apt-get distr-upgrade

ходимых либ (OCI), которые MSF не может приложить из-за лицензионных

 

 

 

проблем. А потому мы сами должны все качать с сайта Oracle (соглашаться

2.

Ставим ruby-dev.

с лицензией) и настраивать. Процесс этот не всегда прост и гладок, кое-ка-

3.

Качаем клиент (как минимум 11-ю версию): goo.gl/CTAJLI.

кие мануалы есть в Сети, но зачастую они нерабочие. Поэтому я оставлю

4.

«Устанавливаем» (xxx — версия клиента):

здесь опробованные последовательности действий.

 

 

cd opt/

Общий алгоритм таков:

 

 

1. Качаем и ставим Oracle Instant Client, а именно архив Basic, SDK и SQL*Plus.

 

 

mkdir oracle

2. Прописываем в ОС необходимые переменные окружения.

 

 

cd oracle/

3. Ставим OCI-драйвер для Ruby от Metasploit’а.

 

 

unzip basic-xxx-linux.zip

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

Easy Hack

w Click

to

ХАКЕР 11 /190/ 2014

 

 

 

 

 

m

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-xcha

 

 

 

 

 

unzip sdk-xxx-linux.zip

unzip sqlplus-xxx-linux.zip

cd instantclient_xxx/

ln -s libclntsh.so.xx.x libclntsh.so

wget https://github.com/kubo/ruby-oci8/archive/

ruby-oci8-2.1.5.tar.gz

tar -zxvf ruby-oci8-2.1.5.tar.gz

5.Прописываем instant client в переменные окружения:

echo "export PATH=$PATH:/opt/oracle/instantclient_xxx"

>> /root/.bashrc

echo "export SQLPATH=/opt/oracle/instantclient_ xxx"

>> /root/.bashrc

echo "export TNS_ADMIN=/opt/oracle/instantclient_ xxx"

>> /root/.bashrc

echo "export LD_LIBRARY_PATH=/opt/oracle/instantclient_ xxx" >> /root/.bashrc

echo "export ORACLE_HOME=/opt/oracle/instantclient_ xxx"

>> /root/.bashrc

6.Ставим OCI в Ruby:

cd ruby-oci8-2.1.5/ ruby setup.rb conig

Всеустановлено,прописаноиработает

ruby setup.rb setup

ruby setup.rb install

Та-дам! Все готово!

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

47

 

 

 

 

 

w Click

to

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

РАСШИРИТЬАТАКУЧЕРЕЗORACLE-ЛИНКИ

РЕШЕНИЕ

Представь себе ситуацию: нашел ты SQL-инъекцию в веб-приложении или же подобрал учетку через TNS listener, то есть получил доступ к ораклу на бэкенде. Конечно, первым делом надо порыскать по доступным табличкам и слить все интересное, но потом всегда есть желание проникнуть «глубже» и добраться до ОС или других серверов, например. В общем, так называемый этап постэксплуатации. Конечно, здесь важный шаг — посмотреть привилегии пользователя и уже танцевать от них. Но мы сейчас сконцентрируемся на одном из методов — через связи (они же «db link’и»).

Насколько я помню, все мощные СУБД, будь то Oracle, MS SQL, Postgres, имеют возможность сами подключаться к другим базам данных и вынимать инфу из них. Ты подключаешься в одну базу А и говоришь ей подключиться к СУБД Б, а дальше можешь посылать запросы через А в базу данных на Б. И что еще полезнее — данные можно «смешивать», то есть база данных А может выдавать различные итоги в зависимости от данных, полученных с Б.

«Обычный» юзер Oracle (созданный с ролями connect и resource, как это обычно происходит) не имеет прав на создание линков. Но это справедливо для версий с 10g R2 и более поздних. В более ранних версиях привилегия на создание линка входила в роль connect. Но что, если необходимые права у нас есть? Тогда мы можем сделать многое…

Представь себе ситуацию (причем вполне типовую): есть корпоративная сеть и в ней интересующая нас критичная система. Пусть это будет ERP. Но, как это бывает в здравомыслящих компаниях, ERP располагается в специальном сетевом сегменте с приличной фильтрацией, а наружу торчит только какой-нибудь веб-портал. Печалька… Но очень часто гораздо в меньшей строгости «живут» девелоперская версия той же ERP и версия ERP для тестирования. Кстати, такие тройки: боевая версия (продакшен), предпродакшен (тестирование) и девелоперская версия ERP — типовое решение в ком-

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

Немного практики. Просмотр привилегий:

SELECT * FROM USER_SYS_PRIVS;

Просмотр ролей:

SELECT * FROM USER_ROLE_PRIVS;

Создание линка:

CREATE DATABASE LINK link_name USING @ORCL;

Здесь мы создаем линк с именем link_name к базе данных на том же хосте, с другим SID’ом — ORCL (точнее service name’ом). При этом используется тот же логин и пароль, что и у действующего юзера.

Чтобы сказать базе данных, что данные мы хотим «переслать» в линк, мы должны указывать имя после собаки. Типа @link_name. Причем линк нужно указывать у имени таблицы. Например, запрос данных с удаленного сервера:

SELECT * from table_name@link_name;

Если же надо выполнить какую-то функцию на удаленном сервере, то линк нужно писать после имени функции, но до параметров:

SSRFчерезDBLINKнаmemcached

Карточка своими руками

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

Взлом

 

 

 

 

 

 

 

 

 

 

w Click

to 48

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-xcha

 

 

 

 

 

SELECT function_name@link_name(function,parameters) from dual;

Кроме локальных линков, ты можешь создавать и удаленные, и даже с другими кредами:

CREATE DATABASE LINK link_name CONNECT TO username IDENTIFIED BY password USING '//remote_host_name_or_ip:1521/ORCL;

Тут, думаю, ясно, что username и password — креды для подключения,

аORCL — это опять-таки service name.

Иеще tip для удаления линков. Пригодится, чтобы подчищать хвосты.

DROP DATABASE LINK link_name;

Теперь давай прикинем, что мы можем сделать из этой возможности.

1.При создании локального линка ты сразу получишь ответ — есть такой SID или нет. При удаленном линке после первого запроса по линку получаешь аналогичный ответ. Причем в случае существования SID’а проверяются логин и пароль и система также возвращает ошибку, если они неверны. Таким образом, мы можем спокойно сначала перебирать SID’ы, а потом уже стандартные или не очень учетки.

2.Можно подключиться к самому же себе, но под другой учеткой! Это не так актуально для доступа через TNS, но вот для SQL-инъекций — самое то. Приведу пример. Есть SQLi в приложении, и мы можем выполнять какието запросы от какого-то юзера. Но у него может не быть интересных нам прав. А потому мы берем и создаем линк в ту же базу данных, но с другими кредами (брутфорс нам поможет). И вуаля! Мы все там же — за веб-

приложением, но уже имеем в базе данных гораздо больше прав. Магия

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

 

 

 

ХАКЕР 11 /190/ 2014

 

 

 

 

 

w Click

to

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

практически. Но здесь есть одно обидное ограничение. Для линков нет возможности создавать привилегированные подключения (под SYSDBA), что в зависимости от версии оракла может нас сильно (или не очень) ограничить в возможностях.

3.Когда ты получил доступ в базу данных — посмотри, нет ли там уже созданных линков. Шанс невелик, но все возможно. Причем, во-первых, там могут быть линки, уже созданные под твоим же юзером кем-то ранее, а бывают еще общие (PUBLIC) линки, созданные под каким-то другим пользователем, но доступные всем. Все доступные юзеру линки:

select * from USER_DB_LINKS;

4.Так как мы можем указывать имя хоста и порт, а также из-за информативности ошибок от базы данных мы легко можем проводить сканирование внутренней инфраструктуры.

5.После небольшого ресерча оказалось, что мы можем проводить SSRFатаки. Есть ряд обидных ограничений. Во-первых, мусор в несколько строк в начале (бинарные заголовки от TNS-протокола), во-вторых, в некоторых запрещенных символах. Ну и да, ответ от сервера нам не получить. Зато мы можем делать перенос строк, а потому вполне можем общаться с различными плейнтекстовыми протоколами. FTP, SMTP… Вероятно, против memcached заработает. В указанном выше способе создания линка наши команды идут после ORCL и до закрывающей кавычки.

6.И еще один «итог» SSRF — NTLM-релей. Мы можем указать линк на себя, перехватить NTLM-аутентификацию и переслать ее на другой сервер. Фичу эту я до конца не проверил, но к выходу журнала будет готовый PoC.

Надеюсь, не забыл ничего интересного, связанного с этой темой.

ОТКРЫТЬЗАМОКСПОМОЩЬЮПЛАСТИКОВОЙКАРТОЧКИ

РЕШЕНИЕ

Разбавим немного наш раздельчик триком из полюбившегося в хакерской среде lockpicking’а. Причем сугубо полезным. Ведь с каждым такое может случиться, что дверь за тобой захлопнулась, а ключи остались за дверью.

Итак, представь себе. У нас есть: дверь, замок, пластиковая карточка, желание открыть дверь. Но главное, что нужно для успеха, — определенный вид замка. Этот тип используется повсеместно в офисах и внутри квартир, в нем язычок (треугольный или штырек внутри, который препятствует открытию) остается подвижным даже после закрытия замка. То есть ручка двери заблокирована замком и потому мы не можем подвинуть язычок для открытия двери. Но сам язычок подвижен. Ну, я думаю, ты понял.

Суть «атаки» очень проста: если язычок подвижен, то нам просто его надо подвинуть. А для того, чтобы его

подвинуть, нам понадобится пластиковая карточка (голыми руками это сделать невозможно). Первое, что приходит на ум, — банковская карта (а-ля Visa), но рекомендуется что-то более гибкое и подвижное. Обычно это дисконтные карты всяких магазинов. И еще одна тонкость для нача-

ла: представим, что мы находимся со стороны двери со скошенной частью язычка.

Итак, последовательность проста. Вставляем карточку в дверную щель и упираемся перпендикулярно в язычок. Давим на карточку и сильно сгибаем ее в сторону дверной ручки. И последнее: резко выворачиваем карточку в противоположную сторону (то есть к дверному косяку) и при этом нажимаем на саму дверь.

Получается, что пластиковая карточка становится рычагом, который сдвигает язычок.

Возможно, с первого раза (рывка) не получится открыть дверь, так как язычок не до конца сдвинется, а потому следует последние два шага повторить несколько раз.

Способ дельный, но есть трудности. Во-первых, если мы с той стороны двери, куда выходит нескошенная часть язычка, то дело затрудняется, так как упираться нам надо наискосок (чтобы опять-таки хоть ча-

стично упереться в скошенную поверхность).

Во-вторых, нам очень часто могут помешать либо узкие зазоры между дверью и коробкой (карточку особо не подсунешь), либо молдинги/наличники, которые закрывают нам зазор.

ПРОЭКСПЛУАТИРОВАТЬSQL-ИНЪЕКЦИИПОДORACLE

РЕШЕНИЕ

И вот второй вопрос про Oracle. На самом деле он более крут, хотя и поменьше в размерах. Итак, представим, что у нас есть веб-приложение и в нем SQLi, а на backend’е у нас Oracle. Что мы будем делать? Ну конечно, сольем критичную инфу из базы. Неплохо, но как насчет того, чтобы углубиться подальше и добраться до ОС?

Как ни странно, Oracle — это своего рода монстр, и людей, которые в нем шарят (особенно в безопасности), совсем немного. Как итог — есть очень приличный шанс на успех в постэксплуатации из-за кривых настроек или недопатченности базы данных…

Все бы хорошо, да только нам мешает одна приличная проблема — весь самый вкусный функционал требует всяких радостей из PL/SQL (процедуры, анонимные блоки, DDL и кучу других непонятных штук), которые, в свою очередь, требуют делать множественные запросы (если честно, не знаю,

как по-русски правильно сказать multi statement). А в обычной ситуации у нас нет возможности их производить. Если проще, multi statement — это несколько запросов, разделенных точкой с запятой, но их мы не можем напихать в какой-нибудь select.

Хотя на самом деле есть вариант. Некоторые функции позволяют передавать им целые блоки запросов. То есть ничто не мешает нам в скулю в select добавить такую функцию, а в нее уже напихать необходимых страшностей… Но до 2011 года все было грустно, так как была известна вроде как только одна такая функция — sys.kupp$proc.create_mater_process(), а для использования ее требовалась роль DBA. Совсем не тру. Так вот, в 2011 году Sumit «Sid» Siddharth из 7Safe представил шикарный white paper «Hacking Oracle from Web: Part2» (goo.gl/Qit5XX), в котором поведал о своей отличной находке: есть еще две функции, в которые можно внедрять PL/SQL-блоки, а самое главное — которые доступны для роли Public. Этими функциями являются

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

Easy Hack

w Click

to

ХАКЕР 11 /190/ 2014

 

 

 

 

 

m

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-xcha

 

 

 

 

 

dbms_xmlquery.getxml()

dbms_xmlquery.newcontext()

Таким образом, по сути, любая скуля с правами обычного юзера становилась эквивалентна прямому доступу в СУБД (как через SQL*Plus). Что еще круче, эти функции присутствуют во всех версиях Oracle после 8-й. Правда, в 12-й ее возможности почикали, но это не меняет того, что самые активно используемые версии — 10-я и 11-я — уязвимы.

Теперь давай перейдем к практике. В качестве примера создадим линк из первой задачки внутри select, куда у нас инъекция.

Запрос в БД будет select * from products where id = ‘SQLi_here’. Тогда в скулю мы пишем следующее:

' and (select dbms_xmlquery.newcontex('declare PRAGMA

AUTONOMOUS_TRANSACTION; begin execute immediate ''CREATE

DATABASE LINK link_name CONNECT TO username IDENTIFIED BY

password USING '''//remote_host_name_or_ip:1521/ORCL''' '';

commit; end;') from dual) is not null –-

Может показаться, что тут что-то трудное, но на деле просто.

Если отбросить все до первой и от последней скобки, что необходимо лишь для работоспособности запроса к СУБД, то мы имеем лишь select функции dbms_xmlquery.newcontex с нашим блоком запросов в скобках.

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

49

 

 

 

 

 

w Click

to

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Внутренность я чуть поясню.

declare PRAGMA AUTONOMOUS_TRANSACTION — это указание компилятору оракла, что далее идет автономная транзакция. Если проще, то это значит, что ее выполнение не зависит от успешности выполнения других транзакций (например, процедуры-родителя);

Begin — указывает на начало анонимного блока, а end — на его окончание;

execute immediate — необходимо указывать, если в анонимном блоке мы хотим использовать Data Definition Language (DDL) запросы. Это такие специальные запросы: на изменение структуры базы данных, изменение юзеров, ролей и так далее. Считай «системные»;

commit — говорит о том, что произведенные изменения необходимо записать в базу данных (если этого не сделать, изменения останутся только в памяти).

Внутри же идет тот же пример, что и указан выше, с тем лишь изменением, что каждое следующее «вложение» необходимо «окучивать» еще одной парой одинарных кавычек. Но это уже совсем обычная фича оракла.

В примере использована функция dbms_xmlquery.newcontex, но для dbms_xmlquery.getxml все будет аналогичным, и приводить для нее пример нет смысла.

Как видишь, все просто. Руки у нас развязаны. В white paper ты найдешь несколько примеров эксплуатации различных уязвимостей, например для повышения привилегий.

ОБНАРУЖИТЬМЕСТОЖИТЕЛЬСТВАВЛАДЕЛЬЦАAPPLE-ДЕВАЙСА

РЕШЕНИЕ

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

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

Всем известно, что Wi-Fi-роутеры систематически посылают широковещательные запросы в канал о том, что они есть, такие хорошие, и о своих характеристиках, необходимых для подключения к ним. Но мобильные устройства (точнее, почти все Wi-Fi-клиенты) систематически рассылают информацию в поисках известных им сетей (точнее, тех, для которых стоит автоматическое подключение). Если у человека включен Wi-Fi на устройстве, то мы чисто из эфира можем уже вынуть информацию о тех местах, которые он посещал. SSID’ы сетей зачастую несут в себе вполне осмысленную информацию. Например, названия кафе, отелей, компаний.

И здесь есть интересное последствие, на котором во многом основана работа известной тулзени — KARMA. Мы можем отснифать имя SSID’а и побыстрому поднять такую же точку доступа, после чего атакуемый девайс сам к нам может подключиться. А может не подключиться :). Здесь все зависит

Карта с Wi-Fi-точками от Wigle.net

от конкретной реализации ПО. Некоторые системы смотрят на изменение протокола подключения, а некоторые — нет. То есть если к домашнему роутеру ты подключаешься с ноута по WPA, например, а я подниму точку с таким же SSID’ом, но открытую, то в зависимости от ПО в твоей ОС твой ноут все равно может подключиться к моей точке.

У Apple-девайсов, насколько мне известно, есть такая проверка. Но чаще всего находится какая-то беззащитная точка из «запомненных», которую мы можем и подменить.

О’кей, мы заставили девайс подсоединиться к себе. Что дальше?

А дальше интересная особенность Apple-девайсов (ноги которой растут из какого-то RFC): при подключении к новой сети они пытаются найти предыдущие гейтвеи. То есть они запрашивают — а есть ли здесь такой-то IP

стаким-то MAC’ом? И данные эти берутся от предыдущих подключений.

Япротестировал на iOS 7 версии, и такой запрос действительно проскакивает сразу же после подключения устройства к сети. Но только один, хотя

втеории должны быть три последние точки доступа.

Да, что это нам может дать? Не считая раскрытия внутренней IPадресации, мы получаем MAC-адрес гейта, который с большой вероятностью является Wi-Fi-роутером. А если это так, то, вспомнив, что MAC аналогичен BSSID’у Wi-Fi-точки, мы получаем очень интересный материал для работы!

Ты, наверное, в курсе, что многие корпорации (например, Google) собирают информацию о Wi-Fi-точках и их территориальном расположении. Например, всякие Android- и Apple-девайсы делают это в фоновом режиме постоянно (насколько мне известно). Прогулялся с включенным Wi-Fi — считай, собрал инфу для корпорации. Правда, сейчас чисто за счет Wi-Fi мы можем добиться высокой точности определения месторасположения.

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

Но стоит сказать, что несколько лет назад был у гугла некий скандальчик,

врезультате которого «пояса затянулись». Теперь одного BSSID’а не хватает, а надо их два. Хотя фактически это незначительно затрудняет задачу. Во-первых, потому как Apple-девайсы дисклозят нам несколько последних MAC’ов. Во-вторых, потому, что мы можем перебирать известные BSSID’ы точек и, играя в игру «тепло — холодно», найти интересующую нас Wi-Fi- точку.

Вот такие вот дела. Здесь можно найти описание API от Google: goo.gl/ wzqFhk. А вот еще сервис goo.gl/XXBz5r, предоставляющий локацию по одному BSSID’у (но база в основном в Америке). Кроме того, знающие люди посоветовали тулзу iSniff-GPS (goo.gl/LnedPg), которая выполняет часть из описанных фич, так что присмотрись к ней, если данная тема тебя заинтересовала.

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

Спасибо за внимание и успешных познаний нового!

Соседние файлы в папке журнал хакер