В начале октября в http-сервере Apache была обнаружена уязвимость (http://www.opennet.me/opennews/art.shtml?num=31960), позволяющая при работе mod_proxy в режиме обратного прокси отправить запрос из внешней сети к внутренним серверам в демилитаризованной зоне (DMZ), при наличии определенных rewrite-правил в конфигурации сервера. Разработчики проекта выпустили патч для устранения проблемы, но как оказалось (https://community.qualys.com/blogs/securitylabs/2011/11/23/a...) он бесполезен при использовании обходных путей для совершения атаки.
Если в конфигурации сервера, есть примерно такое правило (вместо RewriteRule может быть ProxyPassMatch):<font color="#461b7e">
RewriteRule ^(.*) http://www.example.com$1 [P]
</font>Атакующий может отправить запросы (символ "@" будет воспринят как разделитель для параметров аутентификации):
<font color="#461b7e">
GET @localhost::8880 HTTP/1.0\r\n\r\n
GET qualys:@qqq.qq.example.com HTTP/1.0\r\n\...URL: https://community.qualys.com/blogs/securitylabs/2011/11/23/a...
Новость: http://www.opennet.me/opennews/art.shtml?num=32392
Всегда говорил что писать рерайты это тебе не сиськи мять.
Их кроме автора mod_rewrite никто писать толком и не умеет.
ну регулярные выражения -- они и в африке регулярные выражения::-)
# p.s.: когда их пишешь -- то почти всегда потом оказывается что "а <вот-про-это> я подзабыл" :-)
GET qualys:@qqq.qq.example.com HTTP/1.0\r\n\r\n... запрос будет транслирован ... в "http://www.example.com@qqq.qq.example.com", т.е. вместо сервера www.example.com будет осуществлено обращение по сетевому порту 8880 (Tomcat) и к серверу qqq.qq.example.com.
объясните каким образом тут появилось 8880???
Прочитать 20 раз: символ "@" будет воспринят как разделитель для параметровOriginal:
Access to internal web server can be possible by using a crafted request like:
GET @localhost::8880 HTTP/1.0\r\n\r\nThe screenshot below shows that a basic query with the crafted request
to the target results in access to the page at 8880.https://dum21w3618van.cloudfront.net/images/apache/fig2b.png
Upon receiving the request, Apache translates the URL by applying the rewrite rules.
The "uri" extracted is ":8880" which gets appended, resulting in the URL
The "uri" extracted in this case is everything following the first
occurrence of the colon (:) in the request. Since the crafted request
has 2 colons (::), the second colon is treated as being part of the URI.
Атакующий может отправить запросы (символ "@" будет воспринят как разделитель для параметров аутентификации):GET @localhost::8880 HTTP/1.0\r\n\r\n
GET qualys:@qqq.qq.example.com HTTP/1.0\r\n\r\nВ первом случае запрос будет транслирован в "http://localhost::8880", а во втором в "http://www.example.com@qqq.qq.example.com", т.е. вместо сервера www.example.com будет осуществлено обращение по сетевому порту 8880 (Tomcat) и к серверу qqq.qq.example.com.
Вопрос откуда во _втором_ случае появилось 8880, откуда оно в первом и так очевидно.
Хотя, пока писал, дошло что это предложение в новости составлено так коряво. Потому что "т.е." относится к обоим случаям сразу, а не именно ко второму (...., (а ....., т.е.)). Сравните с тем что в действительности имелось в виду:
В первом случае запрос будет транслирован в "http://localhost::8880", т.е. вместо сервера www.example.com будет осуществлено обращение по сетевому порту 8880 (Tomcat), а во втором в "http://www.example.com@qqq.qq.example.com", т.е. вместо сервера www.example.com будет осуществлено обращение к серверу qqq.qq.example.com.
> объясните каким образом тут появилось 8880???Там два отдельных примера, с портом относится к запросу
GET @localhost::8880 HTTP/1.0\r\n\r\nкоторый будет преобразован в http://www.example.com@localhost::8880
часть www.example.com будет воспринята как параметры аутентификации.
В нормальных языках конкатенацию надо явно указывать.
> В нормальных языках конкатенацию надо явно указывать.Вот скажи: "блаблабла$1" - это явное указание конкатенации или нет?
>> В нормальных языках конкатенацию надо явно указывать.
> Вот скажи: "блаблабла$1" - это явное указание конкатенации или нет?Давай от обратного, как мне вывести URI содержащий знака $
куда вывести, зачем вывести и какие проблемы есть в ури со знаком: '$'?
почему запросы начинают именно сRewriteRule ^(.*) ...
а не с
RewriteRule ^\/(.*) ...
???
малоли какаи там первые символы в начале строки... и поидее мы должны *хотеть* *только* те строки которые начинаются на "/"