URL étrange contenant 'A = 0 ou' 0 = a dans les logs du serveur web
au cours du dernier week-end, certains de mes sites ont enregistré des erreurs impliquant un mauvais usage de nos URLs:
...news.php?lang=EN&id=23'A=0
ou
...news.php?lang=EN&id=23'0=A
au lieu de
...news.php?lang=EN&id=23
I found only one page originally which mentioned this (https://forums.adobe.com/thread/1973913) où ils ont émis l'hypothèse que la chaîne de requête supplémentaire provient de GoogleBot ou d'une erreur d'encodage.
j'ai récemment changé mes sites pour utiliser AOP au lieu de mysql_*
. Peut-être que ce changement causé les erreurs? Tous les indices seraient utiles.
de plus, toutes les requêtes proviennent du même user-agent indiqué ci-dessous.
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)
ceci m'amène à trouver les fils suivants: pt-BR et paramètre étrange dans L'URL-qu'est-ce qu'ils essaient?
2 réponses
C'est un bot de test pour les vulnérabilités d'injection SQL par la fermeture d'une requête avec l'apostrophe, puis la définition d'une variable. Il y a aussi des projets similaires qui traitent des commandes shell et/ou des traverses de chemin de fichier. Que ce soit un" bon bot " ou un mauvais bot est inconnu, mais si l'injection fonctionne, vous avez de plus gros problèmes à traiter. Il y a 99% de chance que votre site ne génère pas ces liens de style et il n'y a rien que vous puissiez faire pour les empêcher de créer ces urls à moins que vous ne bloquiez la requête(s) avec une simple chaîne regex ou un WAF plus complexe comme ModSecurity.
Blocage basé sur l'agent utilisateur n'est pas un angle efficace. Vous devez chercher l'heuristique de demande et de bloc basé sur cela à la place. Quelques exemples de choses à rechercher dans l'url/demande/POST/référent, comme utf-8 et les caractères hex:
- double apostrophes
- périodes doubles, surtout suivies d'une coupure dans divers encodages
- des mots comme "script", "etc" ou "mot de passe"
- des chemins comme
dev/null
utilisé avec la sortie de l'enveloppe de la tuyauterie/échos - %00 octet null style de caractères utilisé pour l'initialisation d'une nouvelle commande
- http dans l'url plus d'une fois (sauf si votre site l'utilise)
- rien concernant
cgi
(à moins que votre site utilise) - aléatoire "entreprise" des chemins pour des choses comme coldfusion, tomcat, etc
si vous n'utilisez pas de WAF, voici un concat regex qui devrait capture beaucoup de ceux à l'intérieur d'une url. Nous l'utilisons dans les applications PHP, donc vous pouvez/aurez besoin de modifier certaines échappées/looks en fonction de l'endroit où vous utilisez ceci. Veuillez noter que ceci est .cgi
,wordpress
et wp-admin
avec un tas d'autres choses dans le regex, retirez-les si vous avez besoin.
$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})="; // 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";
l'Utiliser, au moins avec PHP, est assez simple avec preg_match_all()
. Voici un exemple de comment vous pouvez l'utiliser: https://gist.github.com/dhaupin/605b35ca64ca0d061f05c4cf423521ab
WARNING: faites attention si vous réglez cela sur autoban (i.e., fail2ban filter). MS / Bing Dumbots (et d'autres) souvent brouiller les urls en entrant des choses comme les points triples étranges de suivre urls tronquées, ou en essayant de frapper un tel:
lien comme un URi. Je ne sais pas pourquoi. Voici ce que je veux dire: un lien avec du texte www.example.com/link-too-long...truncated.html
peut pointer vers une url correcte, mais Bing peut essayer d'accéder à ce "qu'il regarde" au lieu de suivre le href
, résultant en une frappe WAF due à des points doubles.
puisqu'il s'agit d'une très ancienne version de FireFox, Je l'ai bloquée dans mon fichier htaccess -
RewriteCond %{HTTP_USER_AGENT} Firefox/3\.5\.2 [NC]
RewriteRule .* err404.php [R,L]