Странный URL-адрес, содержащий «A=0» или «0=A» в журналах веб-сервера

В прошлые выходные некоторые из моих сайтов регистрировали ошибки, указывающие на неправильное использование наших URL-адресов:

...news.php?lang=EN&id=23'A=0

or

...news.php?lang=EN&id=23'0=A

вместо

...news.php?lang=EN&id=23

Я нашел только одну страницу, изначально упоминавшую об этом (https://forums.adobe.com/thread/1973913), где они предположили, что дополнительная строка запроса исходит от GoogleBot или из-за ошибки кодировки.

Недавно я изменил свои сайты, чтобы использовать PDO вместо mysql_*. Может быть, это изменение вызвало ошибки? Любые подсказки будут полезны.


Кроме того, все запросы исходят от одного и того же пользовательского агента, показанного ниже.

Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-PT; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)

Это привело меня к следующим темам: pt-BR и Странный параметр в URL — что они пытаются сделать?


person Atara    schedule 23.11.2015    source источник
comment
такая ссылка не может быть сгенерирована из HREF на самом сайте. и странно, что 5 разных сайтов сгенерировали одинаковую ссылку в разное время выходных   -  person Atara    schedule 23.11.2015
comment
Итак, почему вы создали неправильные ссылки?   -  person zerkms    schedule 23.11.2015
comment
Это мой вопрос. Я не генерировал URL-адреса с A=0 или 0+A. Интересно, что сгенерировало эти URL-адреса   -  person Atara    schedule 23.11.2015
comment
@zerkms, возможно, вы не понимаете сканеры SQL-инъекций. Это не имеет ничего общего с сайтом или кодом. Множество VPS/вычислительных экземпляров постоянно посещают сайты, тестирующие простые инъекции ('A=0) или способы запуска JS. Если это работает, они знают, что сайт уязвим, об этом сообщается сканеру OP, затем сканер OP начинает творить чудеса. Только на этой неделе в наши сети попало 6 экземпляров Amazon, и, как говорится в комментарии выше, ничто не генерирует их в коде.   -  person dhaupin    schedule 06.07.2016
comment
Вы также можете подумать о том, чтобы получить надежный CDN, который будет передавать запросы на ваш сайт и предлагать базовую защиту от инъекций (и другие функции безопасности, такие как защита от DDoS).   -  person analytik    schedule 25.06.2017


Ответы (2)


Это бот, тестирующий уязвимости SQL-инъекций, закрывая запрос апострофом, а затем устанавливая переменную. Существуют также аналогичные инъекции, которые имеют дело с командами оболочки и/или обходами пути к файлу. Неизвестно, «хороший» это бот или плохой бот, но если инъекция сработает, у вас возникнут более серьезные проблемы. С вероятностью 99% ваш сайт не генерирует эти стили ссылок, и вы ничего не можете сделать, чтобы помешать им создавать эти URL-адреса, если только вы не заблокируете запрос (ы) с помощью простой строки регулярного выражения или более сложного WAF, такого как ModSecurity.

Блокировка на основе пользовательского агента не является эффективным углом. Вместо этого вам нужно искать эвристику запроса и блокировать на ее основе. Некоторые примеры того, что нужно искать в url/request/POST/referrer, как в виде символов utf-8, так и в шестнадцатеричном формате:

  • двойные апострофы
  • двойные точки, особенно после косой черты в различных кодировках
  • такие слова, как "script", "etc" или "passwd"
  • пути, такие как dev/null, используемые с конвейерной/эхо-выходной оболочкой
  • %00 символов стиля нулевого байта, используемых для инициализации новой команды
  • http в URL-адресе более одного раза (если ваш сайт не использует его)
  • все, что касается cgi (если только он не используется на вашем сайте)
  • случайные «предпринимательские» пути для таких вещей, как coldfusion, tomcat и т. д.

Если вы не используете WAF, вот concat регулярного выражения, который должен захватить многие из них в URL-адресе. Мы используем его в PHP-приложениях, поэтому вам может/нужно будет настроить некоторые escape-последовательности/внешние образы в зависимости от того, где вы это используете. Обратите внимание, что в регулярном выражении есть .cgi, wordpress и wp-admin, а также куча других вещей, удалите их, если вам нужно.

$invalid = "(\(\))"; // lets not look for quotes. [good]bots use them constantly. looking for () since technically parenthesis arent valid
$period = "(\\002e|%2e|%252e|%c0%2e|\.)";
$slash = "(\\2215|%2f|%252f|%5c|%255c|%c0%2f|%c0%af|\/|\\\)"; // http://security.stackexchange.com/questions/48879/why-does-directory-traversal-attack-c0af-work
$routes = "(etc|dev|irj)" . $slash . "(passwds?|group|null|portal)|allow_url_include|auto_prepend_file|route_*=http";
$filetypes = $period . "+(sql|db|sqlite|log|ini|cgi|bak|rc|apk|pkg|deb|rpm|exe|msi|bak|old|cache|lock|autoload|gitignore|ht(access|passwds?)|cpanel_config|history|zip|bz2|tar|(t)?gz)";
$cgis = "cgi(-|_){0,1}(bin(-sdb)?|mod|sys)?";
$phps = "(changelog|version|license|command|xmlrpc|admin-ajax|wsdl|tmp|shell|stats|echo|(my)?sql|sample|modx|load-config|cron|wp-(up|tmp|sitemaps|sitemap(s)?|signup|settings|" . $period . "?config(uration|-sample|bak)?))" . $period . "php";
$doors = "(" . $cgis . $slash . "(common" . $period . "(cgi|php))|manager" . $slash . "html|stssys" . $period . "htm|((mysql|phpmy|db|my)admin|pma|sqlitemanager|sqlite|websql)" . $slash . "|(jmx|web)-console|bitrix|invoker|muieblackcat|w00tw00t|websql|xampp|cfide|wordpress|wp-admin|hnap1|tmunblock|soapcaller|zabbix|elfinder)";
$sqls = "((un)?hex\(|name_const\(|char\(|a=0)";
$nulls = "(%00|%2500)";
$truth = "(.{1,4})=\1"; // catch OR always-true (1=1) clauses via sql inject - not used atm, its too broad and may capture search=chowder (ch=ch) for example
$regex = "/$invalid|$period{1,2}$slash|$routes|$filetypes|$phps|$doors|$sqls|$nulls/i";

Использовать его, по крайней мере, с PHP, довольно просто с preg_match_all(). Вот пример того, как вы можете его использовать: https://gist.github.com/dhaupin/605b35ca64ca0d061f05c4cf423521ab< /а>

ВНИМАНИЕ: будьте осторожны, если вы установите для этого параметра автобан (т.е. фильтр fail2ban). MS/Bing DumbBots (и другие) часто искажают URL-адреса, вводя такие вещи, как странные тройные точки после усеченных URL-адресов или пытаясь перейти по ссылке tel: как URi. Я не знаю почему. Вот что я имею в виду: ссылка с текстом www.example.com/link-too-long...truncated.html может указывать на правильный URL-адрес, но Bing может попытаться получить к нему доступ «как он выглядит» вместо того, чтобы следовать href, что приведет к попаданию WAF из-за двойных точек.

person dhaupin    schedule 06.07.2016
comment
В качестве примечания, если вы в конечном итоге используете ModSecurity, сначала установите его в режим verbose+no-process. Есть несколько правил, которые пытаются запретить роботу Googlebot — как ни странно, одно из них — это правило репутации IP-адреса. В режиме без обработки вы можете видеть, что журналы переполняются, но не предпринимаются какие-либо действия, поэтому вы можете отключить строгие правила. - person dhaupin; 08.08.2016
comment
Я также видел эти «A = 0» в конце своих URL-адресов. Я просмотрел много кода, задаваясь вопросом, что я сделал, чтобы вызвать это, но, конечно, ничего не нашел. Затем я проверил IP-адреса, ни один из них не принадлежит ни одному из известных мне IP-адресов клиентов. Это действительно кто-то пробует инъекцию. - person muz the axe; 08.09.2016

так как это очень старая версия FireFox, я заблокировал ее в своем файле htaccess -

RewriteCond %{HTTP_USER_AGENT} Firefox/3\.5\.2 [NC]
RewriteRule .* err404.php  [R,L]
person Atara    schedule 27.12.2015