Ata*_*ara 18 url encoding sql-injection bots
在上周末,我的一些网站记录了错误,意味着错误使用了我们的网址:
...news.php?lang=EN&id=23'A=0
Run Code Online (Sandbox Code Playgroud)
要么
...news.php?lang=EN&id=23'0=A
Run Code Online (Sandbox Code Playgroud)
代替
...news.php?lang=EN&id=23
Run Code Online (Sandbox Code Playgroud)
我发现最初只提到了一页(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)
Run Code Online (Sandbox Code Playgroud)
这导致我找到以下线程: URL中的pt-BR 和 Strange参数 - 他们在尝试什么?
dha*_*pin 29
它是通过使用撇号关闭查询然后设置变量来测试SQL注入漏洞的机器人.还有类似的注入处理shell命令和/或文件路径遍历.无论是"好机器人"还是坏机器人都是未知的,但如果注入有效,那么你需要处理更大的问题.您的网站有99%的可能无法生成这些样式链接,除非您使用简单的正则表达式字符串或更复杂的WAF(如ModSecurity)阻止请求,否则您无法阻止他们制作这些网址.
基于用户代理的阻止不是有效的角度.您需要查找请求启发式和基于此的阻止.在url/request/POST/referrer中查找的一些示例,包括utf-8和hex字符:
dev/null与管道/回声shell输出一起使用的路径cgi(除非您的网站使用它)如果你没有使用WAF,这里有一个正则表达式concat,它应该捕获url中的许多内容.我们在PHP应用程序中使用它,因此您可能需要调整一些转义/外观,具体取决于您使用它的位置.请注意,这有.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";
Run Code Online (Sandbox Code Playgroud)
使用它,至少使用PHP,非常简单preg_match_all().以下是如何使用它的示例:https://gist.github.com/dhaupin/605b35ca64ca0d061f05c4cf423521ab
警告:如果将其设置为autoban(即fail2ban过滤器),请务必小心.MS/Bing DumbBots(以及其他人)经常通过输入来自后续截断网址的奇怪三重点或尝试将tel:链接作为URi 来删除网址.我不知道为什么.这就是我的意思:带文本的链接www.example.com/link-too-long...truncated.html可能指向正确的URL,但Bing可能会尝试"看起来"而不是跟随它href,因为双点导致WAF命中.
Ata*_*ara -9
因为这是一个非常旧的 FireFox 版本,所以我在我的 htaccess 文件中阻止了它 -
RewriteCond %{HTTP_USER_AGENT} Firefox/3\.5\.2 [NC]
RewriteRule .* err404.php [R,L]
Run Code Online (Sandbox Code Playgroud)