12 Commits

Author SHA1 Message Date
Gabor Gyorvari
201ab77516 Sample update from #94 2025-06-09 20:28:26 +02:00
Gabor Gyorvari
46024eca5e Merge remote-tracking branch 'origin/master' 2025-05-15 17:55:32 +02:00
Gabor Gyorvari
a31cc18dc5 Sample update from #93 2025-05-15 17:55:25 +02:00
Győrvári Gábor
96806c69e9 Merge pull request #92 from edward-rafalovsky/feature/add-docker-support
Add Docker support with documentation
2024-12-05 06:44:14 +01:00
Edward Rafalovsky
42c2aad685 Add Docker support with documentation 2024-12-04 23:41:36 +01:00
Gabor Gyorvari
cad03dc3b4 Javascript sample update in #91 2024-07-08 17:55:38 +02:00
Gabor Gyorvari
c542a745e4 Sample update 2024-05-22 14:16:44 +02:00
Gabor Gyorvari
7ac65c0c8d Hide error arg fix 2024-05-22 14:04:07 +02:00
Gabor Gyorvari
5061e319e3 Sample update 2024-05-22 14:03:43 +02:00
Gabor Gyorvari
b2b2c4b081 Small typo, fix #88 2023-07-26 12:39:34 +02:00
Gabor Gyorvari
26458d20af Sample update 2023-05-14 08:59:43 +02:00
Gabor Gyorvari
70edc4210d Sample update 2023-05-14 08:45:20 +02:00
5 changed files with 112 additions and 4 deletions

15
Dockerfile Normal file
View File

@@ -0,0 +1,15 @@
FROM php:8.2-cli
# Install dependencies
RUN apt-get update && apt-get install -y \
git \
unzip \
libzip-dev \
&& docker-php-ext-install zip
WORKDIR /scanner
COPY . .
RUN chmod +x scan
ENTRYPOINT ["./scan"]
CMD ["/code"]

View File

@@ -146,3 +146,37 @@ Licensing
---------
PHP malware scanner is [licensed](https://github.com/scr34m/php-malware-scanner/blob/master/LICENSE.txt) under the GNU General Public License v3.
Docker Usage
-----------
You can also run the scanner using Docker:
1. Build the image:
```bash
docker build -t php-malware-scanner .
```
2. Scan a directory:
```bash
docker run -v /path/to/scan:/code php-malware-scanner -d /code
```
For example, to scan a WordPress installation:
```bash
docker run -v /var/www/html:/code php-malware-scanner -d /code -j 6.4.1
```
Common usage with flags:
```bash
# Show only infected files (hide OK status)
docker run -v /path/to/scan:/code php-malware-scanner -d /code -k
# Show comments for matched patterns
docker run -v /path/to/scan:/code php-malware-scanner -d /code -c
# Show MD5 hashes and continue after first match
docker run -v /path/to/scan:/code php-malware-scanner -d /code -m -s
```
The `/code` directory inside the container is where your files will be mounted for scanning.

View File

@@ -22,11 +22,16 @@ SHELL_PASSWORD
ConnectBackShell
ShellBOT
== "bindshell"
".\x00..\x20"
FM_SESSION_ID
HACKED BY
#Remote Code
curl_get_from_webpage
file_get_contents('http://codepad.org
#mailers
leafmailer.pw
#Base64 String Samples. Each plain text string should have 3 base64 equivalents
@@ -181,6 +186,7 @@ kZWZpbm
# Obfuscation related code
eval("?>
eval('?>
@eval(
"base64_decode"
='base'.(32*2).'_de'.'code'
"p"."r"."e"."g"."_"
@@ -205,6 +211,13 @@ http://www.fopo.com.ar/
@eval("\
";eval(
eval(eval(
@eval(`
convert_uudecode(convert_uuencode
"64_decode"
'f' . 'il' . 'e' . '_'
'co' . 'nt' . 'e' . 'nt'
'h' . 'tm' . 'l' . 'sp'
'ha' . 'r' . 's'
#Malware/Attack specific strings/fingerprints/signatures
MagelangCyber
@@ -262,6 +275,13 @@ FaisaL Ahmed aka rEd X
smisbot
smotherbot
Indonesian Hacker Rulez
pwetan.com
iNHUMaN
Heartzz
Bye Bye Litespeed
BunnyInvisible
SEMOGABERKAH
BUTERFLYCOUNTRY
# WP-VCD Malware https://www.getastra.com/blog/911/how-to-fix-wp-vcd-backdoor-hack-in-wordpress-functions-php/
wp-vcd
@@ -359,6 +379,7 @@ php_uname()
str_split(rawurldecode(str_rot13(
# generating PHP file name to put content
substr(md5(time()), 0, 8) . ".php"
'a:1:{s:13:\"administrator\";b:1;}'
# webshell
0byt3m1n1
@@ -395,6 +416,7 @@ Array("1207", "3gso", "4thp", "501i", "502i", "503i", "504i", "505i", "506i",
# eval url decoded string
eval(rawurldecode('
eval(htmlspecialchars_decode(
# simple obfuscated function
'gz'.'unc'.'ompress'
@@ -404,3 +426,30 @@ eval(rawurldecode('
'base', '64_dec', 'ode'
'cook', 'set', 'ie'
'repl', 'str_', 'ace'
"base"."64_"
'base'.'64_'
"t"."m"."p"."_"."n"."a"."m"."e"
"f"."i"."l"."e"."_"."p"."u"."t"
"f"."i"."l"."e"."_"."g"."e"."t"
'ode', 'e64_', 'bas', 'dec'
'unct', 'ion', 'te_f', 'crea'
'te', 'g', 'nf', 'l', 'a', 'zi'
'tion', 'e_func', 'creat'
'64_d', 'se', 'eco', 'de', 'ba'
'co', 'ki', 'e', 'o', 'set'
'str', '_rep', 'lace'
# process data from request object directly
extract($_REQUEST) && @$
extract($_REQUEST)&&@$
xtract($_REQUEST)&&@$
# uncompress cafted content
gzuncompress(strrev(substr(
# disable error reporting
<?php error_reporting(0);?>
# infected file include attached on the top of a legit file
<?php if (file_exists(dirname(__FILE__) . '/class.theme-modules.php')) include_once(dirname(__FILE__) . '/class.theme-modules.php'); ?>
<?php if (file_exists(dirname(__FILE__) . '/class.plugin-modules.php')) include_once(dirname(__FILE__) . '/class.plugin-modules.php'); ?>

View File

@@ -79,7 +79,7 @@ chr\s*\(\s*['"]?\s*((95)|(0[Xx]5[Ff]))\s*['"]?\s*\)
#Escaped path characters: \x2fho\x6de/\x69mp\x75ls\x69oq\x65/w\x77w. or \x2fhome\x2fimpu\x6csioq\x65/www\x2emusc
(\\x[0-9abcdef]{2}[a-z0-9.-\/]{1,4}){4,}
#Malware inffected files sometimes marked with comments like /*87cda*/ to avoid infect again
#Malware infected files sometimes marked with comments like /*87cda*/ to avoid infect again
\/\*[a-z0-9]{5}\*\/
# XOR-ed strings with custom math
@@ -141,7 +141,7 @@ explode\('\|\x01\|\x03\|\x03', gzinflate\(
\$[a-z]11 \^ [a-z]8\(\$[a-z]6, \$[a-z]14, \$[a-z]6\[13\]\(\$[a-z]11\)\)\)\);
# eval function return and concat
eval\([A-Za-z]{5,}\(\) \. '
eval\([A-Za-z0-9]{5,}\(\) \. '
# eval function return, parameter is a hex string
eval\([A-Za-z0-9]{5,}\(\"[A-Z0-9]{16,}
@@ -150,4 +150,13 @@ eval\([A-Za-z0-9]{5,}\(\"[A-Z0-9]{16,}
\$[a-zA-Z0-9]{6,}\('\x78\x9C\xAD\x90\x41\x0E
# obfuscated code return with error suppression
return @\$[a-z]{2}\d+\[\d+\]\(\$[a-z]{2}\d+\[\d+\],
return @\$[a-z]{2}\d+\[\d+\]\(\$[a-z]{2}\d+\[\d+\],
# htaccess alternating
[a-z]{1}\([a-z]{1}\(\$[a-z]{2}\.'\/\.htaccess'\)
# Javascript specific rules
# JS - escaped command
\.fromCharCode\([0-9,]{4,}\)
\+-parseInt\(\w\('0x[0-9a-z]+'\)\)\/

View File

@@ -231,7 +231,7 @@ class MalwareScanner
private function parseArgs()
{
$options = getopt(
'd:e:i:o:abmcxlhkwnsptLj:E',
'd:e:i:o:abmcxlhkrwnsptLj:E',
array(
'directory:',
'extension:',
@@ -244,6 +244,7 @@ class MalwareScanner
'follow-link',
'help',
'hide-ok',
'hide-err',
'hide-whitelist',
'no-color',
'no-stop',