Можем ли мы утверждать, что NFC – серьезная технология, имеющая большие перспективы в будущем? Представьте, сколько платформ поддерживает ее, включая обычные телефоны, которые используются уже очень давно. Что ж, пожалуй, перейдем сразу к делу: рассмотрим использование входных векторов NFC для пен-тестирования.
Можем ли мы утверждать, что NFC – серьезная технология, имеющая большие перспективы в будущем? Представьте, сколько платформ поддерживает ее, включая обычные телефоны, которые используются уже очень давно. Что ж, пожалуй, перейдем сразу к делу: рассмотрим использование входных векторов NFC для пен-тестирования. Площадкой для действий здесь становится приложение, в той или иной мере поддерживающее NFC. Этим приложением может быть tag reader для Windows Phone 8 или Android Beam, не важно. Важной деталью здесь является то, что мобильное устройство принимает входящий поток из внешнего источника (NFC метка), и мы хотим убедиться, что этот поток проходит надлежащую проверку. В особенности, когда приложение читает содержимое NFC-метки в NDEF формате. Как оно использует эти данные? Что случится, если мы поменяем данное значение на что-нибудь некорректное. В идеале будет вызвано исключение и чтение данных из метки прекратится, но что, если этого не случится?
Совместно с ndefendor.com приложение дает вам возможность сгенерировать, а после чего записать любую NFC-метку. Также вы можете использовать плагин для Eclipse, реализующий тот же функционал в самой среде программирования, что тоже очень полезно.
Создайте новую метку с помощью Eclipse. Для этого зайдите в New > Other > NDEF File
Заполните файл любым содержимым, которое вы можете придумать или которое может обработать приложение. Этим содержимым может быть MIME-тип, как показано в следующем примере, или Android Application Resource (AAR), или что угодно другое.
После создания приложение сгенерирует QR-код, который вы можете просканировать с помощью NFC Developer’а, установленного на вашем устройстве.
Теперь вы способны загрузить свое NDEF сообщение в метку NFC.
https://play.google.com/store/apps/details?id=com.antares.nfc&hl=en
Конечно же, вы хотите поработать с большим количеством типов меток. Главным различием, о котором стоит знать, здесь будет объем памяти. Mifare (4К) располагает большим объемом для хранения данных и, тем не менее, может предоставлять данные таким же образом, как и Mifare Classic (1K). Возможно, встретится ситуация, когда вам понадобится специфичный тип метки, но я еще ни разу не сталкивался с этим. Так или иначе, вот ссылка на некоторые метки (http://rapidnfc.com/cat/15/nfc_starter_packs).
Давайте рассмотрим некоторые примеры кода для Android, который мы пытаемся взломать. Далее будет представлена часть кода, считывающая информацию из NFC метки и записывающая данные в файл, имя которого берется из считанной информации. Как вы видите, значение переменной strfile1 является первой записью NDEF, какой бы она ни была. Что же будет, если значением будет, например, “../databases/superimportantcontent.db”. Или еще хуже, приложение попытается поместить данные во вторую запись NDEF.
Parcelable[] rawMsgs = intent.getParcelableArrayExtra(
NfcAdapter.EXTRA_NDEF_MESSAGES);
NdefMessage msg = (NdefMessage) rawMsgs[0];
String payload = new String(msg.getRecords()[0].getPayload());
String strfile1 = getApplicationContext().getFilesDir().getAbsolutePath() + payload ; //is this bad? :)
File f1 = new File(strfile1);
FileWriter filewriter = new FileWriter(f1);
BufferedWriter out = new BufferedWriter(filewriter);
out.write(msg.getRecords()[1].getPayload());
out.close();
Давайте представим, что приложение хранит текстовый файл со списком SSH хостов, к которым оно подключается. В этом случае мы создадим NFC метку, первой записью которой будет путь к файлу, к которому мы хотим получить доступ (“SSH.txt”). Второе значение будет содержать данные, которые необходимо записать в этот файл (ваш SSH MiTM прокси-сервер). После прочтения вашей метки пользовательское подключение будет перенаправлено на вас.
Удачного хака!