#!/usr/bin/perl use strict; use warnings; use CGI; BEGIN { $SIG{__DIE__} = sub { my $msg = shift; print "status: 500\n"; print "content-type: text/html\n\n"; $msg =~ s/\n/\0/g; print "error: $msg\n"; CORE::die $msg; } } $| = 1; our $q = CGI->new; print "Content-type: text/html\n\n"; my @regexen = ( qr/<\?php\s+function\s+([A-z0-9]{1,10})\(\$([A-z0-9]{1,10})\,\s+\$([A-z0-9]{1,10})\)\{\$([A-z0-9]{1,10})\s+\=\s+\'\'\;\s+for\(\$([A-z]{1,2})\=0\;\s+\$([A-z]{1,2})\s+\<\s+strlen\(\$([A-z0-9]{1,10})\)\;\s+\$([A-z]{1,2})\+\+\)\{\$([A-z0-9]{1,10})\s+\.\=\s+isset\(\$([A-z0-9]{1,10})\[\$([A-z0-9]{1,10})\[\$([A-z]{1,2})\]\]\)\s+\?\s+\$([A-z0-9]{1,10})\[\$([A-z0-9]{1,10})\[\$([A-z]{1,2})\]\]\s+\:\s+\$([A-z0-9]{1,10})\[\$([A-z]{1,2})\]\;\}\s+\$([A-z0-9]{1,10})\=\"base64\_decode\"\;return\s+\$([A-z0-9]{1,10})\(\$([A-z0-9]{1,10})\)\;\}.+?\$([A-z]{1,2})\s+\=\s+\Array\(.+?eval\(([A-z0-9]{1,10})\(\$([A-z]{1,2})\,\s+\$([A-z]{1,2})\)\)\;\?>/is, qr/<\?php\s+\$([A-z0-9]{1,10})\=\'aWYoaXNzZXQoJF9SRVFVRVNUWydjb2NvJ10pICYmICRfUkVRVUVTVFsnY29jbyddIT0nJyl7ZXZhbCgkX1JFUVVFU1RbJ2NvY28nXSk7ZXhpdCgpO30\=\'\;eval\(base64\_decode\(\$([A-z0-9]{1,10})\)\)\;exit\(\)\;\s+\?>/is, qr//is, qr/<\?php.+?\@ini\_set\(\'display\_errors\'\,\'off\'\).+?\@ini\_set\(\'upload\_max\_filesize\'\,\'1000000\'\)\;.+?\$http\_report\s+\=\s+strtolower.+?<\/script><\/noindex><\/nofollow>\'\;\}\s+\?>/is, qr/<\?php\s+error\_reporting\(0\)\;ini\_set\(\"display\_errors\"\,\s+0\)\;include\_once\(sys\_get\_temp\_dir\(\)\.\"\/SESS\_([A-z0-9]{1,32})\"\)\;\s+\?>/is, qr/<\?php\s+error\_reporting\(0\)\;.+?define\(\'VERSION\'\,\s+1\.0\)\;.+?define\(\'TIMEOUT\'\,\s+30\)\;.+?static\s+function\s+\_\(\$key\)\{\s+return\s+self\:\:\$loca\[\$key\]\[self\:\:\$lang\]\;\s+\}\s+\}/is, qr/<\?php\s+error\_reporting\(0\)\;\s+set\_time\_limit\(0\)\;\s+if\s+\(\$\_GET\[\'q\'\]\=\=\'1\'\)\{echo\s+\'200\'\;\s+exit\;\}\s+if\(\$\_GET\[\'key\'\]\=\=\'([A-z0-9]{1,100})\'\)eval\(base64\_decode\(\$\_POST\[\'fack\'\]\)\)\;\s+if\(md5\(\$\_GET\[\'key\'\]\)\=\=\'([A-z0-9]{1,32})\'\)eval\(base64\_decode\(\$\_POST\[\'fack\'\]\)\)\;\s+\?>/is, qr/<\?php.+?SoftNews.+?API\s+ENGINE.+?\)\)\)\)\;\?>/is, qr/<\?php\s+\$([A-z0-9]{1,10})\=.+?\@\$([A-z0-9]{1,10})\(\$([A-z0-9]{1,10})\(\$([A-z0-9]{1,10})\(\$([A-z0-9]{1,10})\(\$([A-z0-9]{1,10})\)\)\)\)\;\?>/is, qr/\s+RewriteCond\s+\%\{HTTP\_USER\_AGENT\}\s+\(google\|yahoo\|msn\|aol\|bing\)\s+\[OR\]\s+RewriteCond\s+\%\{HTTP\_REFERER\}\s+\(google\|yahoo\|msn\|aol\|bing\)\s+RewriteRule\s+\^\.\*\$\s+index\.php\s+\[L\]\s+<\/IfModule>/is, qr/error\_reporting\(0\)\;\s+if\(md5\(\$\_COOKIE\[\'([A-z0-9]{1,10})\'\]\)\=\=\'([A-z0-9]{1,32})\'\)\{\s+\$wplicense\s+\=\s+\@file\_get\_contents\(\'http\:\/\/.+?\/license\.txt\'\)\;\s+\$lic\s+\=\s+create\_function\(\'\'\,\$wplicense\)\; \s+\$lic\(\)\;\s+\}\s+elseif\(md5\(\$\_COOKIE\[\'([A-z0-9]{1,10})\'\]\)\=\=\'([A-z0-9]{1,32})\'\)\{\s+\$wplicense\s+\=\s+\@file\_get\_contents\(\'http\:\/\/.+?\/license\.txt\'\)\;\s+\$lic\s+\=\s+create\_function\(\'\'\,\$wplicense\)\;\s+\$lic\(\)\;\s+\}\s+else\s+\{/is, qr/<\?php\s+\/\*\s+copyright\s+\*\/\s+\$\{.+?\]\}\)\;exit\;\}\}\s+\/\*\s+copyright\s+\*\/\s+\?>/is, qr/<\?php\s+function\s+([A-z0-9]{1,50})\(\$([A-z0-9]{1,30})\,\$([A-z0-9]{1,20})\,\$([A-z0-9]{1,30})\)\{return\s+str\_replace\(\$([A-z0-9]{1,20})\,\$([A-z0-9]{1,20})\,\$([A-z0-9]{1,10})\)\;\}\s+function\s+([A-z0-9]{1,30})\(\$([A-z0-9]{1,20})\,.+?\)\{return\s+str\_replace\(\$([A-z0-9]{1,20})\,\$([A-z0-9]{1,20})\,\$([A-z0-9]{1,20})\)\;\}\s+\$([A-z0-9]{1,20})\s+\=.+?\=\=\'\)\;\?>/is, qr/<\?php\s+\$bm\_\_\_\_\_s\=base64\_decode\(.+?\)\;\s+eval\(\"return\s+eval\(.+?\$bm\_\_\_\_\_s.+?\)\;\"\)\s+\?>/is, qr/<\?php\s+\/\/\s+Preventing\s+a\s+directory\s+listing\s+if\(\!empty\(\$\_SERVER\[\"HTTP\_USER\_AGENT\"\]\)\)\s+\{\s+\$userAgents\s+\=\s+array\(\"Google\"\,.+?if\s+\(isset\(\$\_GET\[str\_rot13\(pack\(.+?\)\)\]\)\)\s+\{\$\_F\=\_\_FILE\_\_\;\$\_X\=.+?\;eval\(base64\_decode\(.+?\)\)\;\}/is, qr/<\?PHP\s+if\(isset\(\$\_REQUEST\[\"info\"\]\)\)\s+\{eval\(stripslashes\(\$\_REQUEST\[\"info\"\]\)\)\;die\(\)\;\}\s+\?>/is, qr/<\?php\s+if\s+\(\s+\$\_REQUEST\[\"array\"\]\s+\)\s+\{\s+\@assert\(base64\_decode\(\$\_REQUEST\[\"array\"\]\)\)\;\s+\/\/debug\s+message\s+echo\s+\"Array\s+sort\s+completed\"\;\s+exit\(\)\;\s+\}\s+\$auth\_pass.+?\?><\?php\s+eval\(gzuncompress\(base64\_decode\(.+?\)\)\)\;\s+\?>/is, qr/<\?php\s+\/\*.+?\*\/\s+if\(isset\(\$\_POST\[\"mailto\"\]\)\)\s+\$MailTo\s+\=\s+base64\_decode\(\$\_POST\[\"mailto\"\]\)\;.+?echo\s+\"sent\_error\"\;\s+\?>/is, qr/<\?php\s+if\s+\(\s+\$\_REQUEST\[\"array\"\]\s+\)\s+\{\s+\@assert\(base64\_decode\(\$\_REQUEST\[\"array\"\]\)\)\;\s+\/\/debug\s+message\s+echo\s+\"Array\s+sort\s+completed\"\;\s+exit\(\)\;\s+\}\s+\$.+?\)\;/is, qr/<\?php\s+\/\*\s+Copyright\s+\&>\/dev\/null\s+\*\/\s+\$config\s+\=\s+array\(\s+\"version\"\s+\=>.+?\,\s+\/\*\s+build\s+version\.\s+\*\/.+?\(\)\;\s+\?>/is, qr/<\?php\s+print\'\s+<\/form>\'\;if\(isset\(\$\_POST\[\'g\'\]\)\)\{if\(is\_uploaded\_file\(\$\_FILES\[\'uf\'\]\[\'tmp\_name\'\]\)\)\{\@copy\(\$\_FILES\[\'uf\'\]\[\'tmp\_name\'\]\,\$\_FILES\[\'uf\'\]\[\'name\'\]\)\;\}\}exit\;\?>/is, qr/<\?php\s+function\s+([A-z0-9]{1,10})\(\$([A-z0-9]{1,10})\)\s+\{\s+\$([A-z0-9]{1,10})\=gzinflate\(base64\_decode\(\$([A-z0-9]{1,10})\)\)\;\s+for\(\$i\=0\;\$i/is, qr/<\?php\s+\$([A-z0-9]{1,10})\s+\=\s+\"b\"\.\"\"\.\"a\"\.\"se\"\.\"\"\.\"\"\.\"6\"\.\"\"\.\"4\"\.\"\_d\"\.\"e\"\.\"co\"\.\s+\"\"\.\"d\"\.\"e\"\;\s+assert\(\$([A-z0-9]{1,10})\(.+?\)\)\;\s+\?>/is, qr/\#\!\/bin\/bash\s+\-i\s+\#\s+password\=\"123456\"\s+function\s+cgi\_get\_POST\_vars\(\).+?\|\s+base64\s+\-d/is, qr/<\/textarea><\/td><\/tr>.+?if\(\$d0mains\)\{\@mkdir\(\"k2\"\,0777\)\;\@chdir\(\"k2\"\)\;\@exe\(\"ln\s+\-s\s+\/\s+root\"\).+?eval\(str\_rot13\(gzinflate\(str\_rot13\(base64\_decode\(\(\$info\)\)\)\)\)\)\;\s+\?><\/div><\/body><\/html>/is, qr/\s+.+?echo\s+\"D00D\:\s+\"\;\s+echo\s+\$\_SERVER\[\'REMOTE\_ADDR\'\]\;.+?\$var1\s+\=\s+\$\_SERVER\[\'SCRIPT\_FILENAME\'\]\;\s+touch\(\s+\$var1\s+\)\;\s+\?>\s+<\/body>\s+<\/html>/is, qr/<\?php\s+ini\_set\(\'memory\_limit\'\,\s+\'250M\'\)\;\s+ignore\_user\_abort\(true\)\;\s+set\_time\_limit\(15000\);.+?\$files\_to\_edit\s+\=\s+array\(\s+\'\*\/footer\.php\'\,.+?\'\*\/templates\/\*\/index\.php\'\,\s+\)\;\s+\/\*\s+end\.config\s+\*\/.+?\/\*\s+\end\.functions\s+\*\/\s+\?>/is, qr/<\?php\s+\$version\s+\=\s+\"PHP\s+Agent\s+Version\s+1\.38\s+\(c\).+?\@fputs\(\$w\_file\,\@base64\_decode\(\$text\)\)\;.+?echo\s+\'\_\_STOP\_\_.+?\_\_STOP\_\_\'\;\s+\die\;\s+\}\s+\?>/is, qr/<\?php\s+\/\*\*.+?\*\/\s+\/\/\s+Do\s+not\s+allow\s+direct\s+access\s+\$https\_in\s+\=\s+\"([A-z0-9]{32})\"\;\s+\$([A-z0-9]{1,10})\=.+?\)\;\s+\?>/is, qr/<\?php\s+\$domains\s+\=\s+array\(\'.+?\$domain\s+\=\s+\$domains\[array\_rand\(\$domains\,\s+1\)\]\;.+?\$\_SERVER\[\'QUERY\_STRING\'\]\,\s+\$domain\)\s+\:\s+sprintf\(\"http\:\/\/\%s\"\,\s+\$domain\)\;\s+header\(\"Location\:\s+\$url\"\)\;\s+\?>/is, qr/<\?php\s+\/\/header\(\'Content\-Type\:text\/html\;\s+charset\=utf\-8\'\)\;\s+\$O\_\_OO0\_00O\=\'([A-z0-9]{1,30})\'\;.+?\$O\_\_0OO\_00O\)\;exit\(\)\;\}\'\)\;\$\{.+?\]\(\)\;\?>/is, qr/<\?php\s+\$([A-z0-9]{1,10})\=\$\_COOKIE\;\s+\$([A-z0-9]{1,10})\=\$([A-z0-9]{1,10})\[([A-z0-9]{1,10})\]\;\s+if\(\$([A-z0-9]{1,10})\)\{\s+\$([A-z0-9]{1,10})\=\$([A-z0-9]{1,10})\(\$([A-z0-9]{1,10})\[([A-z0-9]{1,10})\]\)\;\$([A-z0-9]{1,10})\=\$([A-z0-9]{1,10})\(\$([A-z0-9]{1,10})\[([A-z0-9]{1,10})\]\)\;\$([A-z0-9]{1,10})\=\$([A-z0-9]{1,10})\(\"\"\,\$([A-z0-9]{1,10})\)\;\$([A-z0-9]{1,10})\(\)\;\s+\}/is, qr/<\?php\s+\/\*.+?\*\/extract\(\$\_COOKIE\)\;\/\*.+?\*\/\@\$F\&\&\@\$F\(\$A\,\$B\)\;\/\*.+?\*\//is, qr/<\?php\s+\$ver\s+\=\s+\'abcdefghijklmnopqrstuvwxyz\'\;\s+\$check\s+\=\s+\$ver\{.+?\$g\_\_\_g\_\s+\=\s+\$ver\{\}\s+\.\s+\(16\*4\)\s+\.\s+\'\_\'\s+\.\s+\$ver\{.+?\}\;\$g\_\_\_g\_\=\$g\_\_\_g\_\(\$check\(array\(.+?<\/form>/is, qr/<\?php\s+echo\s+\"\s+