Был жаркий день конца лета, в офисе сломался кондиционер, и ощущение было, как в сауне, не хватало только бассейна, пива и воблы. Каждое движение давалось с трудом, рабочий день был безнадежно испорчен. Ну и бог с ним, не очень-то и хотелось.
Заморгала ася, стукнулся админ некогда известного форума all-about-all.net с вопросом по SQL-инъекциям, которые он обнаружил на нескольких сайтах. Проблема заключалась в том, что ему не удалось определить CMS, в которых он нашел баги, и поэтому не мог подобрать имена таблиц. Глянув первый сайт, я сразу определил, что в качестве торговой тележки используется OSCommerce, цмс’ка второго была мне незнакома, и я решил повнимательнее глянуть на нее.
В подвале оказалась ссылка на девелоперскую контору, и я отправился изучать их сайт. К сожалению, ни демо-версии, ни исходников на сайте девелоперской конторы не было. Было предложение купить их CMS’ку, причем цену надо было обговаривать отдельно. Контора предлагала не только Content Management System, но и Merchant, т.е. систему управления Интернет-магазином. Это уже было интересно, так как мой опыт показывал, что в небольших малопопулярных торговых тележках можно разжиться картоном, так как иногда там отсутствует даже система автоматического процессинга креды, информация просто пишется в базу, а позже уже админ процессит картонку. К тому же, опыт опять подсказывал, что если есть инъекция
в CMS, то и в тележке она, скорее всего, также будет присутствовать. Оставалось только поискать шопы, но это не было проблемой - на сайте девелоперов красовался раздел portfolio, где были перечислены все их клиенты.
Зайдя на первый из списка, я сразу же отыскал бажный параметр в скрипте:
http://www.shop.com/shop.php?cmd=sto&id= -6+union+select+user(),2/*
порадовавший меня юзерским именем: monod_online@localhost
Оставалось только подобрать названия таблиц и полей. Таблицу user я нашел сразу, а вот с названиями полей я провозился больше часа с нулевым результатом. Не помог и SQL-Tools. Пройдясь по остальным шопам, я получил тот же результат.
Ладно, подумал я, и решил пойти другим путем. Тогда я отправился исследовать другие сайты, девелоперы оказались мощными, инжектились практически все параметры:
http://site.com/main.php?p=235’
http://www. site.com/detail.php?course=152’
http://www. site.com/detail.php?provider=12’
http://www. site.com/gallery.php?cat=5’
Но это нисколько не приблизило меня к именам полей в таблице user. Пока я неторопливо изучал сайты и беседовал с ex-админом all-about-all.net о привратностях скуль-инъекций, он тоже не сидел зря и обнаружил открытую к просмотру папку /include/, в ней оказалось немного php-скриптов с заманчивым именем config , но просмотреть их все равно было нельзя. Но кроме этого там находился и архив HTMLEditorAppletPro.jar, судя по всему с исходниками, а это уже не могло не радовать. Причем такие же архивы лежали во всех папках на других сайтах. Ну что ж, значит, не придется покупать CMS у жадных девелоперов, подумалось мне. Скачав архив, я стал с ним разбираться.
Первое, что я выяснил, что это всего лишь фрагмент цмс’ки, состоящий из Java-скриптов. Покопавшись в них и не найдя какой-либо мне полезной информации, я стал смотреть другие Java-скрипты, имевшиеся в папке /include/, в них тоже не было особо полезной информации, пока я не набрел на файл с именем imageupload.js, содержащий вот такие данные:
// use the object tag
if (_ie == true) {
document.writeln('<object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
width="600" height="350" name="MyFTPUploader"
codebase="http://java.sun.com/update/1.5.0/jinstall-1_5-windows-i586.cab#Version=5,0,0,7">');
document.writeln('<param name="code" value="com.javaatwork.myftpuploader.MyFTPUploader.class">');
document.writeln('<param name="archive" value="include/myftpuploader-standard-signed-v11.jar, include/labels.jar">');
document.writeln('<param name="name" value="MyFTPUploader">');
document.writeln('<param name="type" value="application/x-java-applet;version=1.5">');
document.writeln('<param name="transferType" value="binary">');
document.writeln('<param name="deleteOnCancel" value="true">');
document.writeln('<param name="disableDefaultFileFilter" value="true">');
document.writeln('<param name="automaticLogin" value="true">');
document.writeln('<param name="rejectFileFilter" value="exe, bat, doc, xls, ppt, zip, dmg, sit, pdf, csv, bak, mov, mp3, mp4, wmv, php, htm, html, asp, aspx">');
document.writeln('<param name="uploadDirectory" value="/public_html/dbimages/process">');
document.writeln('<param name="successURL" value="admin_imagemulti.php?action=process">');
document.writeln('<param name="host" value="www.shop.com">');
document.writeln('<param name="userName" value="bllhma">');
document.writeln('<param name="password" value="on2rundle">');
document.writeln('<param name="backgroundColor" value="#BADEFC">');
document.writeln('<param name="iconAdd" value="admin_graphics/ftpapplet/add-icon.gif">');
document.writeln('<param name="iconUpload" value="admin_graphics/ftpapplet/upload-icon.gif">');
document.writeln('<param name="iconRemove" value="admin_graphics/ftpapplet/remove-icon.gif">');
document.writeln('<param name="fileFilter" value="Image files (*.jpg, *.jpeg): jpg, jpeg">');
document.writeln('<param name="showThumbNailsInApplet" value="true">');
document.writeln('<param name="showThumbNailsInFileDialog" value="true">');
document.writeln('</object>');
}
Это был скрипт автоматического добавления картинок на сайт MyFTPUploader с логином и паролем к ftp в открытом виде!!! Зачем в Интернет-магазине была нужна загрузка картинок, я так и не понял. Видимо, админ тестил CMS и забыл удалить скрипт.
С такими данными я тут же залил шелл и sql-скрипт от RST и через минуту просматривал базу. Нужные мне поля назывались usr_name, usr_password. Пароли были в md5, но расшифровка их заняла не больше 5 минут. Но зато в базе шопа не хранили картон. Прапарсив скрипты шопа, мы с ex-админом выяснили, что процессинг идет автоматически через биллинг. Это не радовало.
Оставалось от безнадеги проверить остальные шопы. И первое, что меня удивило, это одинаковый логин и пароль суперадмина во всех шопах. Сначала было я подумал, что все они принадлежат одному человеку, но когда зашел в админку, то понял, пароль суперадмина просто невозможно удалить. То есть девелоперы заложили во все свои творения бекдор. Как в голову девелоперам могла прийти такая гениальная мысль, можно только догадываться... Поистине, нет предела человеческой глупости и коварству.
Ну а я в итоге, имея один пароль, получил доступ к админкам нескольких десятков сайтов и Интернет-магазинов, да и самой девелоперской конторы в придачу.