標籤:大小 輸入 sed 長度 點擊 網頁 html 擴充 php
關於原理方面就不加贅述了,可以Google一下,我貼一下幾百年前我的理解:原理:上傳一個指令碼(jsp,asp,php),然後就得到機子的shell (哇,感覺很粗糙)
檔案上傳漏洞的幾種常見的姿勢:
1.js前端驗證
2.mime
3.尾碼名
4.修改字母大小寫(同第一種,就是把PHP幾種大小寫試一試 還有可能是phtml)
5.00截斷
6.上傳含有一句話的圖片
最簡單的:先直接上傳一個php檔案,看是否正確
1.js前端驗證:
一般都是在網頁上寫一段JavaScript指令碼,校正上傳檔案的尾碼名,有白名單形式也有黑名單形式。
判斷方式:在瀏覽負載檔案,但還未點擊上傳按鈕時便彈出對話方塊,內容如:只允許上傳.jpg/.jpeg/.png尾碼名的檔案,而此時並沒有發送資料包。
解決方案:
1):抓包,修改檔案尾碼名 比如:傳上去的是一個jpg格式,然後改成php 要看能不能傳上去 如果傳不上去就改尾碼 然後抓包改成php
2):直接F9,HTML裡面 將filename="xxser.jpg"修改為filename="1.php"
這裡注意第二種,把長度修改了,要是之前Content-Length =200 這裡就要修改為196
2.MIME驗證:
MIME類型用來設定某種副檔名檔案的開啟檔案,當具有該副檔名檔案被訪問時,
瀏覽器會自動使用指定的應用程式來開啟。
1)content-type欄位校正:
GIF 圖片的MIME image/gif
CSS text/css
jpg image/jpg
比如:上傳了一個php,抓包,看到php的MIME類型為 application/php ,
而在Upload.php判斷檔案類型是否為image/jpeg,這裡就無法通過驗證
解決:在包裡面把Content-Type 更改為 image/jpeg ,通過驗證
2)檔案頭校正
可以通過自己寫正則匹配,判斷檔案頭內容是否符合要求,這裡舉幾個常見的檔案頭對應關係:
(1) .JPEG;.JPE;.JPG,”JPGGraphic File”
(2) .gif,”GIF 89A”
(3) .zip,”Zip Compressed”
(4) .doc;.xls;.xlt;.ppt;.apr,”MS Compound Document v1 or Lotus Approach APRfile”
解決辦法:在木馬內容基礎上再加了一些檔案資訊,有點像下面的結構
GIF89a<?php phpinfo(); ?>
3.尾碼名( 00截斷) 這是一個講述截斷在檔案上傳和包含之中的利用:http://www.2cto.com/article/201502/377462.html
用戶端傳輸到服務端 在服務端:緩衝上傳的檔案,然後伺服器端進行驗證,如果符合要求,就上傳到目錄, 如果不符合,就直接把快取檔案刪除
方法:抓包,將上傳的1.jpg改成 2.php(空格)1.jpg 然後單擊HEX進入十六進位編輯,
將檔案名稱中空格的十六進位20改成00 (這裡就是去找到改的那句話),單擊“GO”
發現成功上傳2.php 2.php後面的字元已經被截斷(可以在Raw裡面找到)
6.上傳含有一句話的圖片
上傳含有一句話的圖片,上菜刀,右鍵添加shell,地址欄輸入 上傳地址
講述中國菜刀用法:
這裡上傳成功了(一般php都是傳自己寫的一句話木馬),就在網址欄得到網址欄了,開啟菜刀,
右鍵添加,編碼格式選擇UTF-8,指令碼類型PHP ,然後串連,shell拿到了,然後就開始可以去搞事情了
或者flag拿到了
檔案上傳+繞過方法+菜刀的基本用法