[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

#2
ini yang kasih thanks pada baca gak ya :/
atau cuma lihat :/
atau malah gak ngerti :/

#3
hahhaa ternyata yang ginian yg suka bikin BD-jpeg kaga jalan Angry

berarti fitur auto resize pada images upload juga bisa yah menangkal BD Image.. ?
mantap om tutorialnya :-bd
Cek Kolor Confused:-

#4
(03-28-2014, 12:47 AM)drewcode Wrote: hahhaa ternyata yang ginian yg suka bikin BD-jpeg kaga jalan Angry

berarti fitur auto resize pada images upload juga bisa yah menangkal BD Image.. ?
mantap om tutorialnya :-bd
Cek Kolor Confused:-

iya, untuk resize image juga akan menghapus script php di dalam image
sipsip sama sama om
isi kolor masih lengkap=))Big Grin:Smile:-

#5
(03-27-2014, 07:23 PM)junior.riau18 Wrote: ini yang kasih thanks pada baca gak ya :/
atau cuma lihat :/
atau malah gak ngerti :/

gk ngerti beb
berat bahasa nya Big Grin
pake bahasa seawam mungkin dong :*
ada kodok teroret teroret dipinggir kali terorret teroret mencari makan teroret teroret setiap pagi teroret teroret

visit: http://warungiso.blogspot.com/

I was not smart or special but I was unix

#6
thanks biar bisa baca Big Grin selanjutnya siap2 mikir buat ngertiin Big Grin

#7
baca dulu postingan om @zee eichel

#8
owh bener juga ya, jgn diupload dulu tp di taruh di temp trus dilihat metadata filenya pake exif, setelah itu diubah file namenya.

ide bagus bro Big Grin

cek kulkas






Users browsing this thread: 1 Guest(s)