ssh в sql, альтернативный доступ

Discussion in 'Уязвимости' started by f1rebl00d, 19 Mar 2009.

  1. f1rebl00d

    f1rebl00d Elder - Старейшина

    Joined:
    27 Dec 2006
    Messages:
    25
    Likes Received:
    34
    Reputations:
    15
    Очередной безбашенной ночью задумал распотрошить некий сайтик ( назовём его zalupa.com ). В процессе выяснилось, что сайт самописный и так просто сдаваться не хочет. Однако в движке Zalupa.ru всё же нашелся уязвимый параметр, позволяющий проводить sql инъекции. Благодаря ей было выявлено, что:

    1. Версия БД mysql 4.2-log (?ld=-1+union+select+1,2,version(),4/*)
    2. Скрипт работал с БД от имени пользователя chelsi
    3. Права пользователя в БД выставлены грамотно и не позволяли просматривать другие базы.
    4. Была возможность читать файлы, и включены magic_quotes
    5. Стоял никсовый сервер, это видно из версии mysql.
    По стандартным путям файл конфигурации web сервера найти не удалось. Попытка определения полного пути до сайта, так же не увенчалась успехом. Но гениальные мысли бывают. Немного подумав, пришла в голову шальная мысль – «А что если прочитать файл таблицы mysql.user физически?». База mysql хранилась по дефолтовому пути в /var/lib/mysql/, в чем можно было убедиться, прочитав passwd.

    Получился запрос:
    union+select+1,2, LOAD_FILE(0x2F7661722F6C69622F6D7973716C2F6D7973716C2F757365722E6D7964),4/*​

    Таким макаром был прочтен файл с данными таблицы mysql.user (/var/lib/mysql/mysql/user.myd) и вытащен хеш пароля пользователей БД и пароль root-а, (который как ни странно, был легко сбручен). Удаленно подключится к БД не давала огненная стена, зато был найден phpmyadmin, с помощью него стало возможно более подробно взглянуть на базу. В ней нужного не оказалось. Для получения мирового господства оставалось не много, получить доступ…SSH…

    Т.к. у нас нет полного пути до веб директории - пришлось идти другим путем. В конфигах sshd демона /etc/ssh/sshd_config нашлись строки, разрешающие аутентификацию по ключам:

    RSAAuthentication yes
    PubkeyAuthentication yes
    AuthorizedKeysFile %h/.ssh/authorized_keys

    Далее взглянув еще раз в файлик /etc/passwd увидел в нем строчку:

    mysql :*:777:777:Mysqld server:/usr/local/mysql/:/bin/bash

    что давало надежду получить возможность выполнения команд c привелегиями в системе пользователся mysql. Сгенерировав с помощью putty пару ключей ( публичный и приватный ) и выполнив нехитрый запрос в phpmyadmin:

    select “ssh-rsa AAAAB3NzaC1...бла.бла.бла...kEi/eF9btr7yc= rsa-key-200807023” into outfile ‘/usr/local/mysql/.ssh/authorized_keys’.
    Увидел, что phpMyAdmin, как послушная гимназистка, выполнил без ошибки этот запрос.

    Заюзав putty с ключами, я без проблем подключился к серверу, в ответ получил приглашение bash оболочки.

    Вот и «солнце» вышло.

    P.S.
    Требует наличия прописанного шелла юзверу mysql, что бывает очень редко.
    Параметры sshd не всегда позволяют подключения по ключам.
    Ну и остальные мелочи ))


    By f1rebl00d//
     
    #1 f1rebl00d, 19 Mar 2009
    Last edited: 20 Mar 2009
    15 people like this.
  2. Thanat0z

    Thanat0z Негрин

    Joined:
    6 Dec 2006
    Messages:
    627
    Likes Received:
    498
    Reputations:
    311
    Мало материала для статьи, но момент про ключи путти интересный. Ничего особенного, если проявить фантазию, если есть доступ на запись, а интересен момент тем, что наши супер хекеры Ачата обычного такого не пишут, только лишь обсасываются старые темы с инжекшенами, никакого творчества. Вообще не факт что те кто пишут про пхп-инжекшен, знают что такое путти и как ею пользоваться :)

    Короче, за содержательность 3, за подход 5.

    Перенесено в Уязвимости
     
    1 person likes this.
  3. ShAnKaR

    ShAnKaR Пачка маргарина

    Joined:
    14 Jul 2005
    Messages:
    904
    Likes Received:
    297
    Reputations:
    553
    оригинальная конечно идея ключи создать )
    но чето сомнения
    как ты каталог '.sshd' сделал? и почему именно .sshd
    раскажи по подробнее то
     
    #3 ShAnKaR, 20 Mar 2009
    Last edited: 20 Mar 2009
  4. f1rebl00d

    f1rebl00d Elder - Старейшина

    Joined:
    27 Dec 2006
    Messages:
    25
    Likes Received:
    34
    Reputations:
    15
    Сенкс, чуть ошибся в пути (в ригинале подправил, лишняя буква `D`) ‘/usr/local/mysql/.sshD/authorized_keys’.

    mysql не создает папки, но гдето в среднем количестве nix систем у юзвера каталог .ssh существует по умолчанию, мож админы так создают юзверей =)
     
    #4 f1rebl00d, 20 Mar 2009
    Last edited: 20 Mar 2009
  5. ShAnKaR

    ShAnKaR Пачка маргарина

    Joined:
    14 Jul 2005
    Messages:
    904
    Likes Received:
    297
    Reputations:
    553
    очень странно, не разу не видел чтоб такое делали, это замечал конечно под апача если делают к примеру в скриптах чтоб был конект для чеголибо по ssh то и папку создают, а вот mysql шоб мистика наверно?
     
  6. f1rebl00d

    f1rebl00d Elder - Старейшина

    Joined:
    27 Dec 2006
    Messages:
    25
    Likes Received:
    34
    Reputations:
    15
    встречал системы, где прописан шел и у юзвера есть папка .ssh

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

    На домашнем серве всегда приходилось создавать ее.
     
  7. Corwin

    Corwin Elder - Старейшина

    Joined:
    1 Aug 2008
    Messages:
    0
    Likes Received:
    15
    Reputations:
    0
    ну наконец-то хотя бы один человек в своей хек-стори вспомнил про возможность чтения файла таблицы.

    и большой max_allowed_packet для лоад_файла (хотя в данном случае загружался файл таблицы user, здесь и дефолтного значения хватило).
     
    1 person likes this.
  8. ShAnKaR

    ShAnKaR Пачка маргарина

    Joined:
    14 Jul 2005
    Messages:
    904
    Likes Received:
    297
    Reputations:
    553
    кстати обсуждали уже зачем юзеру mysql шел тут https://bugzilla.redhat.com/show_bug.cgi?id=176389
    там один тоже предположил аналогичный метод взлома, но сочли что проблема надуманная в итоге.
    в общем юзаем selinux, чтоб меньше проблем было.
     
    #8 ShAnKaR, 22 Mar 2009
    Last edited: 22 Mar 2009
  9. neval

    neval Elder - Старейшина

    Joined:
    13 Dec 2006
    Messages:
    457
    Likes Received:
    116
    Reputations:
    23
    Согласен. Нужно очень большое количество совпадений. Но это не значит что невозможно...
     
  10. fly

    fly Member

    Joined:
    15 Apr 2007
    Messages:
    584
    Likes Received:
    95
    Reputations:
    -10
    способ не плох!
     
  11. ShAnKaR

    ShAnKaR Пачка маргарина

    Joined:
    14 Jul 2005
    Messages:
    904
    Likes Received:
    297
    Reputations:
    553
    тут вот что еще непонятное оказалось
    http://dev.mysql.com/doc/refman/5.0/en/select.html
    это с 3 версии mysql уже так.
    потом ssh:
    http://www.openssh.com/cgi-bin/cvsweb/src/usr.bin/ssh/auth.c?rev=1.28
    это с 2001 года минимум

    тоесть mysql создает с маской 0666 файл а ssh ну по моим тестам не позволяет иметь права на запись ни group ни other.
    и в результате:
    /var/log/secure
     
    1 person likes this.
  12. f1rebl00d

    f1rebl00d Elder - Старейшина

    Joined:
    27 Dec 2006
    Messages:
    25
    Likes Received:
    34
    Reputations:
    15
    ShAnKaR прав, ми тож ща проверил, не канает =( хотя были такие случаи получения доступа. уже точн не помню, что за ось была и версии ядра и демонов.
     
  13. попугай

    попугай Elder - Старейшина

    Joined:
    15 Jan 2008
    Messages:
    1,520
    Likes Received:
    401
    Reputations:
    196
    Статья хорошая.. и способ неплох.

    Вот только странный серв какой-то - mysql не имеет доступа к mysql.user, а load_file() разрешен - извратство какое-то....
     
    1 person likes this.