[Share] Detect PHP Backoor Image and How to Prevent or Clear The Image
#1
Assalamualaikum wr.wb
selamat siang semua
kali ini saya mau share kembali

sebelumnya setelah om @zee eichel membagi trik and tips tentang backdooring di thread berikut

kali ini saya akan berbagi bagai mana cara mendeteksinya dan mencegahnya

[hide]
Persiapan percobaan :
1. index.php/index.html berisikan script html untuk form upload
PHP Code:
<html>
    <
head>
        <
meta charset="UTF-8">
        <
title></title>
    </
head>
    <
form method="post" action="proses.php" enctype="multipart/form-data">
        <
input type="file" name="file"/><br/>
        <
input type="radio" name="for" value="Plugin"/>Plugin<br/>
        <
input type="radio" name="for" value="Theme"/>Theme<br/>
        <
input type="submit" name="submit"/>
    </
form>
    </
body>
</
html

2. File proses.php untuk menerima data post dari file index.html/index.php
PHP Code:
<?php

/* 
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
if(isset($_FILES['file'])){
    
$exif exif_read_data($_FILES['file']['tmp_name'], 0true);
    echo 
"File Name : ".$_FILES['file']['name']."<br />\n";
    echo 
"File exif data : <br/>\n";
    foreach (
$exif as $key => $section) {
        foreach (
$section as $name => $val) {
            echo 
"$key.$name$val<br />\n";
        }
    }

let's try it
ini gambar yang akan di upload
[Image: cp.jpg]

gambar tersebut bersih dari script
[Image: pure.png]

hasil upload tanpa manipulasi image
[Image: ss.png]

kemudian
rubah baris code di proses.php pada bagian ini
PHP Code:
echo "$key.$name$val<br />\n"
menjadi
PHP Code:
echo "$key.$name: ".htmlspecialchars($val)."<br />\n"

sisip kan script php ke image dengan perintah
PHP Code:
jhead -ce cp.jpg 
saya sisipkan
PHP Code:
<?php phpinfo(); ?>

hasilnya adalah
[Image: jheadscript.png]
[Image: viewscript.png]

secarang bagaimana mendeteksi image tersebut telah dimanipulasi berisikan php script

rubah code proses.php menjadi
PHP Code:
if(isset($_FILES['file'])){
    
$exif exif_read_data($_FILES['file']['tmp_name'], 0true);
    echo 
"File Name : ".$_FILES['file']['name']."<br />\n";
    echo 
"File exif data : <br/>\n";
    foreach (
$exif as $key => $section) {
        foreach (
$section as $name => $val) {
            if(
strcasecmp($key"COMMENT")==0){
                echo 
"Comment exif data found <br/>";
                echo 
"value : ".htmlspecialchars($val);
            }
        }
    }


hasilnya adalah seperti ini
[Image: found.png]

bagaimana menghilangkannya?
menghilangkannya dengan cara meng create ulang image tersebut dengan php gd extension
berikut code untuk menghilangkannya
PHP Code:
<?php

/* 
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
if(isset($_FILES['file'])){
    
$exif exif_read_data($_FILES['file']['tmp_name'], 0true);
    echo 
"File Name : ".$_FILES['file']['name']."<br />\n";
    echo 
"File exif data : <br/>\n";
    foreach (
$exif as $key => $section) {
        foreach (
$section as $name => $val) {
            if(
strcasecmp($key"COMMENT")==0){
                echo 
"Comment exif data found <br/>";
                echo 
"value : ".htmlspecialchars($val);
            }
        }
    }
    
$imageType;
    
$image;
    echo 
"<br/><br/>Re-create image : <br/><br/>";
    
$temp=getimagesize($_FILES['file']['tmp_name']);
        
$imageType=$temp[2];
        
        if( 
$imageType == IMAGETYPE_JPEG ){
            
$image imagecreatefromjpeg($_FILES['file']['tmp_name']);
            
imagejpeg($image,"upload/".$_FILES['file']['name']);
        }
        elseif( 
$imageType == IMAGETYPE_GIF ){
            
$image imagecreatefromgif($_FILES['file']['tmp_name']);
            
imagegif($image,"upload/".$_FILES['file']['name']);
        }
        elseif( 
$imageType == IMAGETYPE_PNG ){
            
$image imagecreatefrompng($_FILES['file']['tmp_name']);
            
imagepng($image,"upload/".$_FILES['file']['name']);
        }
     echo 
"File exif data : <br/>\n";
     
$newexif_read_data("upload/".$_FILES['file']['name'], 0true);
    foreach (
$new as $key => $section) {
        foreach (
$section as $name => $val) {
            echo 
$key." ".$name ." : ".$val."<br/>";
        }
    }


hasilnya sebagai berikut :
[Image: clear.png]

jadi kesimpulannya untuk mencegah backdoor image masuk, jangan gunakan move_upload() untuk menyimpan file upload, tapi dengan cara meng create ulang image tersebut.

[/hide]

Selamat mencoba..

Best regards

Junior Riau






Users browsing this thread: 1 Guest(s)