cms CMSSS 1.8 (с названием не заморачивались )
Официальный сайт http://cmsss.all4all.cz
Демо-версия http://cms.all4all.cz
SQL Injection
Уязвимый сценарий:
modules/pol/index.php
Зависимости:
mq=off
Вектор:
union-query
Уязвимый код:
[PHP]
PHP код:
[COLOR="#000000"][COLOR="#0000BB"]$topic<font color="#000000"><font color="#007700">...
</font><font color="#0000BB">$result</font><font color="#007700">=</font><font color="#0000BB">$db</font><font color="#007700">-></font><font color="#0000BB">query</font><font color="#007700">(</font><font color="#DD0000">"SELECT * FROM cmsss_poll_polls"</font><font color="#007700">);
while(</font><font color="#0000BB">$row</font><font color="#007700">=</font><font color="#0000BB">$db</font><font color="#007700">-></font><font color="#0000BB">fetch_array</font><font color="#007700">(</font><font color="#0000BB">$result</font><font color="#007700">)) {
</font><font color="#0000BB">$row_votes</font><font color="#007700">=</font><font color="#0000BB">$db</font><font color="#007700">-></font><font color="#0000BB">fetch_row</font><font color="#007700">(</font><font color="#DD0000">"SELECT * FROM cmsss_poll_votes WHERE poll_id = '"</font><font color="#007700">.</font><font color="#0000BB">$row</font><font color="#007700">[</font><font color="#DD0000">'id'</font><font color="#007700">] .</font><font color="#DD0000">"'"</font><font color="#007700">);
for(</font><font color="#0000BB">$x</font><font color="#007700">=</font><font color="#0000BB">0</font><font color="#007700">;</font><font color="#0000BB">$x</font><font color="#007700">alert(1)</font>, который с радостью записывается в БД:
</font>[COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$_POST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'topic'[/COLOR][COLOR="#007700"]];
[/COLOR][COLOR="#0000BB"]$detail[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$_POST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'detail'[/COLOR][COLOR="#007700"]];
[/COLOR][COLOR="#0000BB"]$name[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$_POST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'name'[/COLOR][COLOR="#007700"]];
[/COLOR][COLOR="#0000BB"]$email[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$_POST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'email'[/COLOR][COLOR="#007700"]];
[/COLOR][COLOR="#0000BB"]$kontrola[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$_POST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'kontrola'[/COLOR][COLOR="#007700"]];
[/COLOR][COLOR="#0000BB"]$datetime[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]date[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"d.m.y H:i:s"[/COLOR][COLOR="#007700"]);[/COLOR][COLOR="#FF8000"]//create date time
[/COLOR][COLOR="#007700"]if([/COLOR][COLOR="#0000BB"]$kontrola[/COLOR][COLOR="#007700"]!=[/COLOR][COLOR="#DD0000"]"ano"[/COLOR][COLOR="#007700"]) {
[/COLOR][COLOR="#0000BB"]$sql[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]"INSERT INTO[/COLOR][COLOR="#0000BB"]$tbl_name[/COLOR][COLOR="#DD0000"](topic, detail, name, email, datetime)VALUES('[/COLOR][COLOR="#0000BB"]$topic[/COLOR][COLOR="#DD0000"]', '[/COLOR][COLOR="#0000BB"]$detail[/COLOR][COLOR="#DD0000"]', '[/COLOR][COLOR="#0000BB"]$name[/COLOR][COLOR="#DD0000"]', '[/COLOR][COLOR="#0000BB"]$email[/COLOR][COLOR="#DD0000"]', '[/COLOR][COLOR="#0000BB"]$datetime[/COLOR][COLOR="#DD0000"]')"[/COLOR][COLOR="#007700"];
[/COLOR][COLOR="#0000BB"]$result[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]mysql_query[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$sql[/COLOR][COLOR="#007700"]);[/COLOR][/COLOR]
Соответственно, пользователь, решившый посмотреть топик, получит себе, как минимум alert.
Вы правильно заметили, что тут еще можно провести sql injection, но 2-х инъекций, описанных выше, пока достаточно.
reflected XSS
В данном движке огромное количество reflected XSS(пассивок), искать долго не нужно, например тот же параметр
id из 2-ой описанной sql-инъекции.
PHP код:
[COLOR="#000000"][/COLOR]">
[/COLOR]
PoC:
Сообщение от
None
http://site.com/modules/forum/view_topic.php?id=
">alert(1)
Ну и
Shell Upload
Зависимости:
права администратора
1.Administration module==> Downloads==> File Create ==> Профит
Создаем файл с shell.php, вписываем мини-шелл, обращаемся, соответственно:
site.com/modules/download/soubor/shell.php?=phpinfo();
2. Напрямую грузим файл через форму Upload.
Мега-функция проверяет наше расширение:
PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]function[/COLOR][COLOR="#0000BB"]is_script[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$filename[/COLOR][COLOR="#007700"]) {
return[/COLOR][COLOR="#0000BB"]ereg[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'\.php$|\.php3$|\.php4$|\.php5$'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$filename[/COLOR][COLOR="#007700"]);[/COLOR][/COLOR]
Обход стандартный: грузим .htaccess с нужным AddType или AddHandler, ну, а потом наш файл, например shell.phtml