PHP Malware Analysis

upload-file.php

md5: 1f735854b3cfe284a10ead78f33e7748

Jump to:

Screenshot


Attributes

Files

Input


Deobfuscated PHP code

<?php

if ($_FILES["uploadfile"]["size"] > 1048576) {
    echo "big image!";
    exit;
}
$ext = substr($_FILES['uploadfile']['name'], strpos($_FILES['uploadfile']['name'], '.'), strlen($_FILES['uploadfile']['name']) - 1);
$uploaddir = './avatar/';
$file = $uploaddir . basename($_FILES['uploadfile']['name']);
//$file = './avatar/'.$_POST['new'].$ext;
$filetypes = array('.jpg', '.gif', '.bmp', '.png', '.JPG', '.BMP', '.GIF', '.PNG', '.jpeg', '.JPEG');
if (!in_array($ext, $filetypes) && is_uploaded_file($_FILES['uploadfile']['tmp_name'])) {
    echo "<p>\xc4\xe0\xed\xed\xfb\xe9 \xf4\xee\xf0\xec\xe0\xf2 \xf4\xe0\xe9\xeb\xee\xe2 \xed\xe5 \xef\xee\xe4\xe4\xe5\xf0\xe6\xe8\xe2\xe0\xe5\xf2\xf1\xff</p>";
} else {
    $fle = './avatar/' . $_POST['new'] . $ext;
    copy($_FILES["uploadfile"]["tmp_name"], $fle);
    if (move_uploaded_file($_FILES['uploadfile']['tmp_name'], $file)) {
        if ($ext == '.jpg' || $ext == '.jpeg') {
            resize_jpeg($file, $fle, 99);
        }
        if ($ext == '.gif') {
            resize_gif($file, $fle, 99);
        }
        echo "success";
    } else {
        echo "error";
    }
}
function resize_jpeg($un_file, $after_resize, $width)
{
    //����� ������� JPG
    //chmod ($un_file, 0777);
    $SOURCE = $un_file;
    // ������ ����
    $TARGET = $after_resize;
    // �� ����� �� "�������"
    $NEWX = 100;
    // ������ "�������"
    $NEWY = 100;
    // ����� "�������"
    $size = getimagesize($SOURCE);
    if ($size === false) {
        die('Bad image file!');
    }
    $source = imagecreatefromjpeg($SOURCE) or die('Cannot load original JPEG');
    // �������� ��������
    if ($size[0] > $size[1]) {
        $ratio = $size[0] / $width;
    } else {
        $ratio = $size[1] / $width;
    }
    $X = round($size[0] / $ratio);
    $Y = round($size[1] / $ratio);
    // ������� ����� �����������
    $target = imagecreatetruecolor($X, $Y);
    // �������� ��������� ����������� � ����� � ���������� �������:
    imagecopyresampled(
        $target,
        // ������������� ������ ����������
        $source,
        // ������������� �������� ����������
        0,
        0,
        // ��������� (x,y) ������� ������ ����
        // � ����� �����������
        0,
        0,
        // ��������� (x,y) ������� ������ ���� �����������
        // ����� ���������� ����������
        $X,
        // ���� ������ ����������� �����
        $Y,
        // ���� ����� ����������� �����
        $size[0],
        // ������ �������� ����������� �����
        $size[1]
    );
    imagejpeg($target, $TARGET, 100);
    return $TARGET;
}
function resize_gif($un_file, $after_resize, $width)
{
    //������� GIF
    chmod($un_file, 0777);
    $SOURCE = $un_file;
    // ������ ����
    $TARGET = $after_resize;
    // �� ����� �� "�������"
    $NEWX = 100;
    // ������ "�������"
    $NEWY = 100;
    // ����� "�������"
    $size = getimagesize($SOURCE);
    // ����� getimagesize, ����� � ������� ������ ��������� �� �����,
    // ��������� ������, ��������� (������ ������, � ��� ����� �������
    // � �����������), ������ - $size[0] - � ����� - $size[1] -
    // ���������� ����������. ������, �� �� ����������� �� �������� ������
    // ���������� GD, ��� ��� ��� �������� ��������������� � �����������
    // ��������� ������. � �����, ���� ������ ����� �� ���������, getimagesize
    // ��������� false:
    if ($size === false) {
        die('Bad image file!');
    }
    // ������ � ���� JPEG-���� � ����� ������ imagecreatefromjpeg:
    $source = imagecreatefromgif($SOURCE) or die('Cannot load original GIF');
    // �������� ��������
    if ($size[0] > $size[1]) {
        $ratio = $size[0] / $width;
    } else {
        $ratio = $size[1] / $width;
    }
    $X = round($size[0] / $ratio);
    $Y = round($size[1] / $ratio);
    // ������� ����� �����������
    $target = imagecreatetruecolor($X, $Y);
    // �������� ��������� ����������� � ����� � ���������� �������:
    imagecopyresampled(
        $target,
        // ������������� ������ ����������
        $source,
        // ������������� �������� ����������
        0,
        0,
        // ��������� (x,y) ������� ������ ����
        // � ����� �����������
        0,
        0,
        // ��������� (x,y) ������� ������ ���� �����������
        // ����� ���������� ����������
        $X,
        // ���� ������ ����������� �����
        $Y,
        // ���� ����� ����������� �����
        $size[0],
        // ������ �������� ����������� �����
        $size[1]
    );
    // ������� �������� � JPEG-�����:
    // ������ �������� ��������� ������, ����� ��� imagejpeg,
    // ����� ������ �������� ����� ����� �� ����� � �������,
    // �� � � ����. �� ����� ������� ������ �� ����� � ������������
    // ������ ���������.
    // ������ ����� imagejpeg ����� � ������ ����������� �������� -
    // ������� ����������. ��������� ����������� ������� - 100.
    imagegif($target, $TARGET, 100);
    return $TARGET;
}

Execution traces

data/traces/1f735854b3cfe284a10ead78f33e7748_trace-1676244554.9693.xt
Version: 3.1.0beta2
File format: 4
TRACE START [2023-02-12 21:29:40.867096]
1	0	1	0.000152	393576
1	3	0	0.000323	417528	{main}	1		/var/www/html/uploads/upload-file.php	0	0
2	4	0	0.000366	417528	strpos	0		/var/www/html/uploads/upload-file.php	9	2	NULL	'.'
2	4	1	0.000383	417600
2	4	R			FALSE
2	5	0	0.000402	417528	substr	0		/var/www/html/uploads/upload-file.php	9	3	NULL	FALSE	-1
2	5	1	0.000417	417624
2	5	R			FALSE
1		A						/var/www/html/uploads/upload-file.php	9	$ext = FALSE
1		A						/var/www/html/uploads/upload-file.php	11	$uploaddir = './avatar/'
2	6	0	0.000460	417528	basename	0		/var/www/html/uploads/upload-file.php	12	1	NULL
2	6	1	0.000473	417592
2	6	R			''
1		A						/var/www/html/uploads/upload-file.php	12	$file = './avatar/'
1		A						/var/www/html/uploads/upload-file.php	16	$filetypes = [0 => '.jpg', 1 => '.gif', 2 => '.bmp', 3 => '.png', 4 => '.JPG', 5 => '.BMP', 6 => '.GIF', 7 => '.PNG', 8 => '.jpeg', 9 => '.JPEG']
2	7	0	0.000517	417528	in_array	0		/var/www/html/uploads/upload-file.php	19	2	FALSE	[0 => '.jpg', 1 => '.gif', 2 => '.bmp', 3 => '.png', 4 => '.JPG', 5 => '.BMP', 6 => '.GIF', 7 => '.PNG', 8 => '.jpeg', 9 => '.JPEG']
2	7	1	0.000542	417600
2	7	R			FALSE
2	8	0	0.000565	417528	is_uploaded_file	0		/var/www/html/uploads/upload-file.php	19	1	NULL
2	8	1	0.000579	417560
2	8	R			FALSE
1		A						/var/www/html/uploads/upload-file.php	23	$fle = './avatar/'
2	9	0	0.000613	417568	copy	0		/var/www/html/uploads/upload-file.php	25	2	NULL	'./avatar/'
2	9	1	0.000637	417768
2	9	R			FALSE
2	10	0	0.000654	417680	move_uploaded_file	0		/var/www/html/uploads/upload-file.php	27	2	NULL	'./avatar/'
2	10	1	0.000668	417752
2	10	R			FALSE
1	3	1	0.000682	417680
			0.000708	327328
TRACE END   [2023-02-12 21:29:40.867679]


Generated HTML code

<html><head></head><body>error</body></html>

Original PHP code

<?php
	
if($_FILES["uploadfile"]["size"] > 1024*1024) {
	
	echo "big image!";
	exit;
}
 
$ext = substr($_FILES['uploadfile']['name'],strpos($_FILES['uploadfile']['name'],'.'),strlen($_FILES['uploadfile']['name'])-1);
 
$uploaddir = './avatar/';
$file = $uploaddir . basename($_FILES['uploadfile']['name']);
//$file = './avatar/'.$_POST['new'].$ext;


$filetypes = array('.jpg','.gif','.bmp','.png','.JPG','.BMP','.GIF','.PNG','.jpeg','.JPEG');

 
if(!in_array($ext,$filetypes) && is_uploaded_file($_FILES['uploadfile']['tmp_name'])){
	echo "<p>����� ������ ������ �� �������������</p>";
}else{ 

	$fle = './avatar/'.$_POST['new'].$ext;
	
	copy($_FILES["uploadfile"]["tmp_name"],$fle);

	if (move_uploaded_file($_FILES['uploadfile']['tmp_name'], $file)) { 
	
 	if($ext=='.jpg' || $ext=='.jpeg') resize_jpeg($file, $fle, 99);
 	if($ext=='.gif') resize_gif($file, $fle, 99);
	
	  echo "success"; 
	} else {
		echo "error";
	}
}

function resize_jpeg($un_file, $after_resize, $width){	//����� ������� JPG
//chmod ($un_file, 0777);
 
$SOURCE=$un_file;  // ������ ����
$TARGET=$after_resize;     // �� ����� �� "�������"
$NEWX=100;                 // ������ "�������"
$NEWY=100;                // ����� "�������"

  $size = getimagesize($SOURCE);
  if ($size === false) die ('Bad image file!');

  
  $source = imagecreatefromjpeg($SOURCE)
    or die('Cannot load original JPEG');
				// �������� �������� 
				if ($size[0]>$size[1]){
				$ratio = $size[0]/$width;
				} else {
				$ratio = $size[1]/$width;
				}
				$X = round($size[0]/$ratio); 
				$Y = round($size[1]/$ratio);    
  // ������� ����� �����������
  $target = imagecreatetruecolor($X, $Y);
  
  // �������� ��������� ����������� � ����� � ���������� �������:
  imagecopyresampled(
    $target,  // ������������� ������ ����������
    $source,  // ������������� �������� ����������
    0,0,      // ��������� (x,y) ������� ������ ����
              // � ����� �����������
    0,0,      // ��������� (x,y) ������� ������ ���� �����������
              // ����� ���������� ����������
    $X,     // ���� ������ ����������� �����
    $Y,     // ���� ����� ����������� �����
    $size[0], // ������ �������� ����������� �����
    $size[1]  // ����� �������� ����������� �����
    );
  imagejpeg($target, $TARGET, 100);
  return $TARGET;
  // ��� ������, �� �������:
  imagedestroy($target);
  imagedestroy($source);
  
  }

function resize_gif($un_file, $after_resize, $width){	//������� GIF
chmod ($un_file, 0777);
 
$SOURCE=$un_file;  // ������ ����
$TARGET=$after_resize;     // �� ����� �� "�������"
$NEWX=100;                 // ������ "�������"
$NEWY=100;                // ����� "�������"

  $size = getimagesize($SOURCE);
  // ����� getimagesize, ����� � ������� ������ ��������� �� �����,
  // ��������� ������, ��������� (������ ������, � ��� ����� �������
  // � �����������), ������ - $size[0] - � ����� - $size[1] -
  // ���������� ����������. ������, �� �� ����������� �� �������� ������
  // ���������� GD, ��� ��� ��� �������� ��������������� � �����������
  // ��������� ������. � �����, ���� ������ ����� �� ���������, getimagesize
  // ��������� false:
  if ($size === false) die ('Bad image file!');

  // ������ � ���� JPEG-���� � ����� ������ imagecreatefromjpeg:
  $source = imagecreatefromgif($SOURCE)
    or die('Cannot load original GIF');
				// �������� �������� 
				if ($size[0]>$size[1]){
				$ratio = $size[0]/$width;
				} else {
				$ratio = $size[1]/$width;
				}
				$X = round($size[0]/$ratio); 
				$Y = round($size[1]/$ratio);    
  // ������� ����� �����������
  $target = imagecreatetruecolor($X, $Y);
  
  // �������� ��������� ����������� � ����� � ���������� �������:
  imagecopyresampled(
    $target,  // ������������� ������ ����������
    $source,  // ������������� �������� ����������
    0,0,      // ��������� (x,y) ������� ������ ����
              // � ����� �����������
    0,0,      // ��������� (x,y) ������� ������ ���� �����������
              // ����� ���������� ����������
    $X,     // ���� ������ ����������� �����
    $Y,     // ���� ����� ����������� �����
    $size[0], // ������ �������� ����������� �����
    $size[1]  // ����� �������� ����������� �����
    );

  // ������� �������� � JPEG-�����:
  // ������ �������� ��������� ������, ����� ��� imagejpeg,
  // ����� ������ �������� ����� ����� �� ����� � �������,
  // �� � � ����. �� ����� ������� ������ �� ����� � ������������
  // ������ ���������.
  // ������ ����� imagejpeg ����� � ������ ����������� �������� -
  // ������� ����������. ��������� ����������� ������� - 100.
  imagegif($target, $TARGET, 100);
  return $TARGET;
  // ��� ������, �� �������:
  imagedestroy($target);
  imagedestroy($source);
  
  }



?>