Возможно, я пишу не в тот раздел, поправьте меня если что. Ситуация: "жертва" - две машины, обе имеют выходы в инет. На 1й крутится: виндаХР, апач, RAdmin ftp, mail и ещё куча всякой моелочи. На 2й крутится: линь и MySQL. Все другие порты кроме 3306 тупо закрыты. MySQL не имеет привязки к localhost, зайти туда можно с любого места. Зачем так сделали - понятия не имею. Методами вдумчивого копания сайта с 1й машины найден пароль рута на MySQL. Никуда больше пароль не подходит. Т.Е. всё что у меня есть - это root\pass на MySQL. Что нужно - считать файл со 2й машины (на которой MySQL). Собственно вопрос: можно ли, зная название файла но не зная где он лежит, его найти? Всё, что мне нужно - это получить содержимое этого файла. Но пути к нему я не знаю. А в MySQL и SQL вообще разбираюсь крайне слабо...
можно попробовать открыть базу locate, и узнать путь до нужного файла, где ее искать в гугле написано было.
Шелл некуда заливать, на том серве где MySQL нет больше ничего, все порты закрыты. Лично я бы ограничил доступ на MySQL только с сервера №1 (да хотя бы фаерволом), на котором сайт, а они всем подряд открыли.... Можно поподробнее, что за locate? Я в MySQL ни бум-бум, мне это слово ни о чём ни говорит к сожалению, намекните о чём речь...
В /etc/passwd пароли уже давно не храняться , в /etc/passwd в большинстве случаев хранится только логин-лист теперь пароли(хеши) в /etc/shadow(в FreeBSD - /etc/master.passwd), если ничего не путаю.. вот вам пример /etc/passwd Если мы будем знать даже весь путь к файлу, как мы сможем посмотреть его??? если все к 2 машине закрыто? Через LOAD DATA INFILE ? Но ведь для применения команды LOAD DATA INFILE к серверным файлам необходимо обладать привилегиями FILE для серверного хоста?
не для хоста а для мускуля ,любой пользователь, которому предоставлена такая привилегия, имеет право прочитать или записать любой файл, который может прочитать или записать сервер MySQL.
т.е права пользователя на котором крутится mysql? да уж наверно врятли... Так может стоит узнать сначала, есть ли такие права? если прав нет, то смысла путь к файлу узнавать
на МуСКуЛ у меня есть пароль рута. и я проверил, file_priv включён. т.е. теоретически прочитать файл можно. вопрос, есть ли средства его найти, если я знаю его название, но не знаю где конкретно установлена та программа, к которой он? собственно, файл который нужен - это конфиг от одной программы. возможно, можно посмотреть какой-то реестр установленных программ? или в линях такого не предусмотрено?
Если юзер, от имени которого запущен мускуль, не входит в группу slocate, а по дефолту это так, то даже если базу отыщет, он ее не прочитает Code: # ls -l /var/lib/slocate -rw-r----- 1 root slocate 3844677 Июн 17 14:11 slocate.db можно запустить мускульный клиент из консоли (со своей тачки) Code: $ mysql -hserver -uroot -ppassword и попробовать ввести команду Code: mysql> \! find / -name '*filename*' -type f -print Тем самым при удачном стечении обстоятельств найдешь файл, который нужен. А зная полный путь до него и имея права рута на мускуле, прочитать его не составить труда (если прав хватит, конечно) любым из имеющихся способом
хм... а что мешает залить шелл через SQL-inj на первую машину, а с нее уже лезть на вторую, точнее пытаться лезть, ведь порты закрыты только извне (из интернет), а изнутри (с локалки) не может быть чтобы абсолютно все порты были закрыты, кроме мускульного.. просто апдейтишь таблицу из которой первый сайт берет например новости и вставляешь в базу произвольный пхп код, потом с первого сайта вызываешь запрос к базе, в нужную колонку в нужную таблицу и в файл заливается шелл, а там уже смотришь по обстоятельствам и узнаешь где конкретно лежит твой файл, и если прав хватит то просматриваешь его
Вот простенький скрипт: PHP: <?php file_get_contents('/etc/passwd'); $l = mysql_connect("localhost", "root"); mysql_query("CREATE DATABASE a"); mysql_query("CREATE TABLE a.a (a varchar(1024))"); mysql_query("GRANT SELECT,INSERT ON a.a TO 'aaaa'@'localhost'"); mysql_close($l); mysql_connect("localhost", "aaaa"); mysql_query("LOAD DATA LOCAL INFILE '/etc/passwd' INTO TABLE a.a"); $result = mysql_query("SELECT a FROM a.a"); while(list($row) = mysql_fetch_row($result)) print $row . chr(10); ?>
Шелл не помог, с первой машины (сайт) на вторую (база) есть доступ только на базу. Локатор - не смог разобраться Походу бесполезняк... ...а последний приведённый скрипт, он, простите, к чему? php там вертится на одной машине, загрузить оттуда etc/passwwd невозможно потому что там WinXP и такого файла просто нет.