<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:st1="urn:schemas-microsoft-com:office:smarttags" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 11 (filtered medium)">
<!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]--><o:SmartTagType
 namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="PlaceType"/>
<o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
 name="PlaceName"/>
<o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
 name="place"/>
<!--[if !mso]>
<style>
st1\:*{behavior:url(#default#ieooui) }
</style>
<![endif]-->
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:Verdana;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman";
        color:black;}
a:link, span.MsoHyperlink
        {color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {color:blue;
        text-decoration:underline;}
p
        {mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:12.0pt;
        font-family:"Times New Roman";
        color:black;}
pre
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";
        color:black;}
span.EmailStyle19
        {mso-style-type:personal-reply;
        font-family:Arial;
        color:navy;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.25in 1.0in 1.25in;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body bgcolor=white lang=EN-US link=blue vlink=blue>

<div class=Section1>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>On some Linux flavors you can use file
command to test the file types. It will recognize php scripts even if files do
not have the right extension. Here is a sample output I have on RHEL 4 system:<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>$ file testfile.php<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>testfile.php: PHP script text<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>$ mv&nbsp; testfile.php testfile.jpg<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>$ file testfile.jpg<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>testfile.jpg: PHP script text<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>To automate that find + grep may be used
as follows, and these files can be singled out for manual examination or be
deleted right away if you wish.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>$ find . -name '*.jpg' -exec file {} \; |
grep PHP<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>./testfile.jpg: PHP script text<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<div>

<p class=MsoNormal><font size=2 color=black face=Arial><span style='font-size:
10.0pt;font-family:Arial'>----------------------------------------------------</span></font><o:p></o:p></p>

<p class=MsoNormal><font size=2 color=black face=Arial><span style='font-size:
10.0pt;font-family:Arial'>Paul Kozlov, CISSP</span></font><o:p></o:p></p>

<p class=MsoNormal><font size=2 color=black face=Arial><span style='font-size:
10.0pt;font-family:Arial'>Operations Manager, IT Infrastructure Services</span></font><o:p></o:p></p>

<p class=MsoNormal><st1:place w:st="on"><st1:PlaceName w:st="on"><font size=2
  color=black face=Arial><span style='font-size:10.0pt;font-family:Arial'>Harvard</span></font></st1:PlaceName><font
 size=2 face=Arial><span style='font-size:10.0pt;font-family:Arial'> <st1:PlaceType
 w:st="on">University</st1:PlaceType></span></font></st1:place><font size=2
face=Arial><span style='font-size:10.0pt;font-family:Arial'> UIS</span></font><o:p></o:p></p>

</div>

<div>

<div class=MsoNormal align=center style='text-align:center'><font size=3
color=black face="Times New Roman"><span style='font-size:12.0pt;color:windowtext'>

<hr size=2 width="100%" align=center tabindex=-1>

</span></font></div>

<p class=MsoNormal><b><font size=2 color=black face=Tahoma><span
style='font-size:10.0pt;font-family:Tahoma;color:windowtext;font-weight:bold'>From:</span></font></b><font
size=2 color=black face=Tahoma><span style='font-size:10.0pt;font-family:Tahoma;
color:windowtext'> owasp-boston-bounces@lists.owasp.org
[mailto:owasp-boston-bounces@lists.owasp.org] <b><span style='font-weight:bold'>On
Behalf Of </span></b>Javed Ikbal<br>
<b><span style='font-weight:bold'>Sent:</span></b> Thursday, November 12, 2009
10:25 AM<br>
<b><span style='font-weight:bold'>To:</span></b> owasp-boston@lists.owasp.org<br>
<b><span style='font-weight:bold'>Subject:</span></b> Re: [Owasp-boston]
Checking file types on upload</span></font><font color=black><span
style='color:windowtext'><o:p></o:p></span></font></p>

</div>

<p class=MsoNormal><font size=3 color=black face="Times New Roman"><span
style='font-size:12.0pt'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face=Verdana><span
style='font-size:10.0pt;font-family:Verdana'>Yes,&nbsp; &quot;&lt;?&quot; may
exist in an image file.<br>
<br>
But:<br>
Given the upload dirs may have hundreds, if not thousands of files, finding the
suspicious files would be a chore--hence my recommendation.<br>
<br>
grep will narrow down the list of suspects very quickly for the manual
examination, or the output of the grep could be piped to the php syntax check
as you suggested.<br>
<br>
Javed<br>
</span></font><br>
Stephane Corlosquet wrote: <o:p></o:p></p>

<blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;
margin-left:4.8pt;margin-right:0in'>

<p class=MsoNormal><font size=3 color=black face="Times New Roman"><span
style='font-size:12.0pt'>I guess you can run grep in the upload dirs to catch
misnamed php files<br>
that have already been upload, something like:<br>
<br>
grep -R &quot;&lt;?&quot; *.jpg *.gif *.png<o:p></o:p></span></font></p>

</blockquote>

<p class=MsoNormal style='margin-bottom:12.0pt'><font size=3 color=black
face="Times New Roman"><span style='font-size:12.0pt'><br>
An image file could contain &quot;&lt;?&quot; but that does not mean it's a PHP
file. Maybe you could run php --syntax-check on the command line to check the
syntax of a suspicious file.<br>
<br>
Steph.<o:p></o:p></span></font></p>

<div>

<p class=MsoNormal><font size=3 color=black face="Times New Roman"><span
style='font-size:12.0pt'>On Thu, Nov 12, 2009 at 9:57 AM, Javed Ikbal &lt;<a
href="mailto:javed@zsquad.com" moz-do-not-send=true>javed@zsquad.com</a>&gt;
wrote:<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 color=black face="Times New Roman"><span
style='font-size:12.0pt'>The most common (and error-prone) method is to use the
$_FILES array.<br>
The browser supplies this information to the server, and IE is notorious<br>
for using the extension to tell the server what the filetype is.<br>
<br>
As it uses the filename extension, it is easy to fool (or make the mistake)<br>
<br>
With PHP 5.3 or above, you can use fileinfo<br>
<br>
<a href="http://www.php.net/manual/en/function.finfo-file.php" target="_blank"
moz-do-not-send=true>http://www.php.net/manual/en/function.finfo-file.php</a><br>
<br>
For older versions, fileinfo is a loadable module.<br>
<br>
I guess you can run grep in the upload dirs to catch misnamed php files<br>
that have already been upload, something like:<br>
<br>
grep -R &quot;&lt;?&quot; *.jpg *.gif *.png<br>
<br>
Regards<br>
</span></font><font color="#888888"><span style='color:#888888'><br>
Javed</span></font><o:p></o:p></p>

<div>

<div>

<p class=MsoNormal><font size=3 color=black face="Times New Roman"><span
style='font-size:12.0pt'><br>
Laverty, Patrick wrote:<br>
&gt; Sorry for all the questions lately, but I'm wondering if someone has<br>
&gt; come up with a reliable way to check actual file types when they get<br>
&gt; uploaded to a server, preferably with PHP. &nbsp;We've had some issues
where<br>
&gt; people uploaded php files with a .jpg or .gif extension, so they slipped<br>
&gt; by for a while.<br>
&gt;<br>
&gt; We are turning off php in upload directories, among other security<br>
&gt; steps, but I just wanted to see if I could do more than just checking<br>
&gt; the file extension. &nbsp;Looking for that extra layer of security.<br>
&gt;<br>
&gt; Thanks!<br>
&gt;<br>
&gt; Patrick Laverty<br>
&gt; <st1:place w:st="on"><st1:PlaceName w:st="on">Brown</st1:PlaceName> <st1:PlaceType
 w:st="on">University</st1:PlaceType></st1:place><br>
&gt; _______________________________________________<br>
&gt; Owasp-boston mailing list<br>
&gt; <a href="mailto:Owasp-boston@lists.owasp.org" moz-do-not-send=true>Owasp-boston@lists.owasp.org</a><br>
&gt; <a href="https://lists.owasp.org/mailman/listinfo/owasp-boston"
target="_blank" moz-do-not-send=true>https://lists.owasp.org/mailman/listinfo/owasp-boston</a><br>
&gt;<br>
<br>
_______________________________________________<br>
Owasp-boston mailing list<br>
<a href="mailto:Owasp-boston@lists.owasp.org" moz-do-not-send=true>Owasp-boston@lists.owasp.org</a><br>
<a href="https://lists.owasp.org/mailman/listinfo/owasp-boston" target="_blank"
moz-do-not-send=true>https://lists.owasp.org/mailman/listinfo/owasp-boston</a><o:p></o:p></span></font></p>

</div>

</div>

</div>

<p class=MsoNormal><font size=3 color=black face="Times New Roman"><span
style='font-size:12.0pt'><br>
<br>
<o:p></o:p></span></font></p>

<pre><font size=2 color=black face="Courier New"><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></font></pre><pre
style='text-align:center'><font size=2 color=black face="Courier New"><span
style='font-size:10.0pt'>

<hr size=4 width="90%" align=center>

</span></font></pre><pre><font size=2 color=black face="Courier New"><span
style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></font></pre><pre><font
size=2 color=black face="Courier New"><span style='font-size:10.0pt'>_______________________________________________<o:p></o:p></span></font></pre><pre><font
size=2 color=black face="Courier New"><span style='font-size:10.0pt'>Owasp-boston mailing list<o:p></o:p></span></font></pre><pre><font
size=2 color=black face="Courier New"><span style='font-size:10.0pt'><a
href="mailto:Owasp-boston@lists.owasp.org">Owasp-boston@lists.owasp.org</a><o:p></o:p></span></font></pre><pre><font
size=2 color=black face="Courier New"><span style='font-size:10.0pt'><a
href="https://lists.owasp.org/mailman/listinfo/owasp-boston">https://lists.owasp.org/mailman/listinfo/owasp-boston</a><o:p></o:p></span></font></pre><pre><font
size=2 color=black face="Courier New"><span style='font-size:10.0pt'>&nbsp; <o:p></o:p></span></font></pre>

<p class=MsoNormal><font size=3 color=black face="Times New Roman"><span
style='font-size:12.0pt'><o:p>&nbsp;</o:p></span></font></p>

<div>

<p class=MsoNormal><font size=3 color=black face="Times New Roman"><span
style='font-size:12.0pt'>-- <o:p></o:p></span></font></p>

<div>

<p><font size=3 color=black face="Times New Roman"><span style='font-size:12.0pt'>Best
regards <o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 color=black face="Times New Roman"><span
style='font-size:12.0pt'>Javed<br>
-------------------------------------------------------------------<br>
Javed Ikbal, CISSP, CISM, CISA<br>
Principal<br>
<a href="http://www.zsquad.com">www.zsquad.com</a> | E: <a
href="mailto:javed@zsquad.com">javed@zsquad.com</a><br>
P: 617 780 9052 | F: 781 723 0590<o:p></o:p></span></font></p>

</div>

</div>

</div>

</body>

</html>