PHP+SQL+C inj

Discussion in 'Песочница' started by Tamrang, 23 Jun 2009.

  1. Tamrang

    Tamrang New Member

    Joined:
    11 Dec 2008
    Messages:
    5
    Likes Received:
    1
    Reputations:
    0
    Добрый день.
    Самому сделать не получается, опишу проблему тут:

    Общий алгоритм работы:
    Существует некая программа X, в которой существует текстовое поле,содержимое этого поля при нажатии "Отправить" вноситься в базу на сервере.

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

    Итоги исследований:
    На первый взгляд в поле филтруется вообще все:
    Написав туда что-то типа ' " ; -- // /* char(39) и др варианты мы видим 100% внесенных данных на сайте.
    Тоесть логически предполагаем что каждый из символов, дабы без искажений отображаться на сайте в базе должен иметь вид: \\ \' \" т.е. экранироваться.

    На сайте существует код аля
    echo $переменная, содержащая значение из базы.
    Следовательно подставив введенные+экранированные данные мы какраз получаем конечную строку: ' " ; -- // /* char(39) и т.п.

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

    Исследование на XSS Дало положительный результат, весело загрузилась во фрейме порнушка(html), вылезло alert()(javascript), ну и VBScript тоже показал работоспособность.

    Т.к. как ява, так и VBscript выполняются на стороне клиента (для справки: площадка на сервере linux,freebsd 99%), следовательно добиться чегото больше чем XSS врядли получится.

    Копаем дальше:
    Наша задача победить экранировку символов, дабы получить возможность выполнять как SQL так и PHP-inj.
    Во-первых определим какие могут быть способы экранировки символов:
    1) Что-то типа magic_quotes, т.к. каждый символ-не буква экранируется. (Наиболее вероятно)
    2) Кодирование кода в base64 или по другому алгоритму и хранения этого в базе, с последующей расшифровкой при выводе (Маловероятно, ибо тогда в функции echo на сайте в 100% случаев вылезала ошибка при введении символа " или '.)

    Во-вторых нужно подобрать способы убийства этого:
    1) Как рекомендуется везде использовать альтернативные методы записи типа char() и прочее (на деле эффективность не показали)
    2) Использование того-же base64 шифрования(допустим мы занесем в базу чтото типа base64_decode(code); , где code='<?php phpinfo();?> как пример, но т.к. на сайте стоит обычные echo,следовательно функция не будет использована по назначению.
    3) Использовать альтернативные методы вставки php тегов(<% %> <script lang=php> и тп) (на практике не работает)
    По пункту 3 следует отметить что вставляя код <?php phpinfo(); ?> на сайте я получаю пустую строку, НО в исходном коде страницы, светится "<?php phpinfo(); ?>" т.е. интерпритатор php не хочет её обрабатывать, считая текстом, это возможно только при конструкции echo '<?php phpinfo(); ?>'; (протестил дома).

    Продолжаю исследования, кто что может посоветовать? Сам пока не додумался...
     
    #1 Tamrang, 23 Jun 2009
    Last edited: 23 Jun 2009