文章目錄
-
- 一、實驗目的:
- 二、工具:
- 三、實驗環境:
- 四、實驗目的:
- 五、漏洞說明:
-
- 1. 漏洞原理:
- 2. `js前端驗證`過程代碼:
- 六、實驗過程:
-
- 1. 判斷是否存在前端`js繞過漏洞`:
-
- 1.1 上傳非圖檔檔案:
- 1.2 上傳圖檔檔案:
- 2. 繞過方法一:删除或者禁用js:
-
- 2.1 upload-labs闖關遊戲(Pass-01):
- 2.2 DVWA靶場-low級别:
- 3. 繞過方法二:使用代理上傳檔案,比如`Burp Suite`:
一、實驗目的:
1、通過本次實驗掌握
js驗證原理
;
2、通過自寫代碼學習js驗證過程;
3、通過
掌握
upload-labs闖關遊戲(Pass-01)
技術。
js前端繞過
二、工具:
BurpSuite
火狐/谷歌浏覽器
AntSword(蟻劍)
三、實驗環境:
靶 機: windows10虛拟機:
192.168.100.150
自寫上傳頁面代碼
檔案上傳漏洞闖關遊戲
DVWA靶場
攻擊機: 實體機
四、實驗目的:
1、自寫上傳代碼,學習前端
js驗證
過程及漏洞産生的原理;
2、通過
檔案上傳漏洞闖關遊戲
upload-labs-master
,
Pass-01
,掌握
DVWA靶場-low級别
技術。
js繞過
五、漏洞說明:
1. 漏洞原理:
Web應用系統雖然對使用者上傳的檔案進行了校驗,但是校驗是通過前端javascript代碼完成的。由于惡意使用者可以對前端javascript進行修改或者是通過抓包軟體篡改上傳的檔案,就會導緻基于js的校驗很容易被繞過。
2. js前端驗證
過程代碼:
js前端驗證
1、在
windows10虛拟機
的網站主目錄下,建立一個
fileupload/js_test/
目錄,自己建構上傳頁面,上傳頁面代碼,前端驗證
index.html
檔案如下所示:
<!DOCTYPE html>
<html>
<head>
<title>檔案上傳</title>
<!-- 這裡進行編碼,編碼格式為UTF-8,防止浏覽器出現中文亂碼 -->
<meta charset="utf-8">
</head>
<body>
<!-- enctype="multipart/form-data":對表單傳輸的資料不需要進行編碼(為防止傳入背景進行編解碼過程中,出現問題,故不進行編碼處理) -->
<form action="fileupload.php" onsubmit="return checkupload();" method="POST" enctype="multipart/form-data">
請選擇要上傳的檔案:<input type="file" name="uploadfile">
<input type="submit" name="submit" value="送出">
</form>
<!-- 下面是使用js代碼對上傳的檔案進行前端驗證 -->
<script type="text/javascript">
function checkupload() {
// alert(111);
// 對上傳的檔案類型進行驗證:
// 1.擷取上傳檔案名:
var filetag = document.getElementById("uploadfile");
var filename = filetag.value;
// alert(filename)
// 2.截取檔案字尾名:
var lastloc = filename.lastIndexof(".")+1;
// alert(lastloc);
var suffix = filename.substring(lastloc);
// alert(suffix);
// 3.對檔案類型進行驗證:
if (suffix != "jpg"|"png") {
alert("檔案類型錯誤,上傳失敗");
return false;
}
}
</script>
</body>
</html>
2、在同一個目錄下,建立一個後端
fileupload.php
檔案:
<?php
header("Content-Type:text/html;charset=utf-8"); // 為了避免浏覽器中文亂碼,對頁面進行編碼,編碼格式為utf-8
echo "<pre>"; //對資料進行格式化輸出
if(isset($_FILES["file"])){
$file = $_FILES["file"];
$filename=$file["tmp_name"];
$name=$file["name"];
$name1=iconv("utf-8","gbk",$name); // 将字元串$name 從utf-8轉換編碼到gbk。這裡是為了防止上傳到伺服器時,圖檔在伺服器出現中文亂碼。
$destination="./upload/".$name1;
move_uploaded_file($filename,$destination);
}else{
echo "上傳檔案有誤";
}
?>
六、實驗過程:
1. 判斷是否存在前端 js繞過漏洞
:
js繞過漏洞
按打開調試面闆,選擇
F12(或者:在網頁空白處"右擊"-->選擇:"檢查")
,然後上傳
網絡
和
圖檔檔案
,然後對這兩個檔案的變化進行對比,如果網絡中沒有資料變化,說明存在
非圖檔檔案
,如果有變化說明不存在。
js前端驗證漏洞
(有變化說明,前端沒有做驗證,是把檔案傳輸到背景,在背景進行驗證的,是以才會有網絡請求。)
1.1 上傳非圖檔檔案:
1、建立一個test.php檔案:
檔案内容:
2、通過實體機通路URL,打開檢查元素,選中網絡,并上傳檔案test.php:
3、點選上傳檔案後,提示不允許上傳該檔案,并且沒有資料流量産生:
通過上面的操作,發現沒有資料向背景發送,說明前端有
js驗證
,存在
js繞過
漏洞。
1.2 上傳圖檔檔案:
1、通過實體機通路URL,打開檢查元素,選中網絡,并上傳檔案test.jpg:
2、點選上傳檔案後,發現網絡中有資料流量産生:
通過上圖可以看到,
網絡
欄有資料傳輸,說明有資料向背景發送。
2. 繞過方法一:删除或者禁用js:
2.1 upload-labs闖關遊戲(Pass-01):
通過
windows10虛拟機
中的
upload-labs闖關遊戲(Pass-01)
進行實驗:
1、在輸入框中輸入
about:config
點選
接受
2、在搜尋框中輸入
javascript
然後找到
javascript.enabled
選項
輕按兩下
,出現
false
:
3、回到
upload-labs-master
選擇第一關上傳
php
檔案:
通過上面操作,發現已經上傳成功。
4、上傳成功後允許
js
代碼運作,如下圖所示:
注:不開啟
js
代碼的話,如果頁面通過
ajxs
編寫的,可能就無法實作相應功能,比如這裡的檔案上傳功能可能就不能使用了。
2.2 DVWA靶場-low級别:
1、打開
DVWA靶場-low級别
:
2、上傳一個
1.jpg
檔案:
3、上傳完成後,會顯示檔案路徑,并會提示成功上傳:
4、可以正常通路:
5、接下來,上傳一個
一句話木馬
檔案
test.php
:
檔案内容:
6、可以正常上傳,并進行通路,并且能夠解析成功:
3. 繞過方法二:使用代理上傳檔案,比如 Burp Suite
:
Burp Suite
1、在
windows10虛拟機
桌面建立
test.php
檔案,寫入一句話木馬儲存,然後将字尾名改為
jpg
:
2、進入闖關遊戲
Pass-01
,點選
浏覽
選中建立好的
jpg檔案
:
3、打開
Burp Suite
,開啟流量攔截:
4、在浏覽器裡面,打開
Burp Suite
代理流量,然後點選上傳:
5、發現
Burp Suite
已經抓到資料:
6、将檔案格式改成
php檔案
,點選
Forward
發送資料包,并關閉浏覽器代理:
7、檢視
windows10虛拟機
,
\WWW\upload-labs-master\upload
檔案夾,出現
test.php
檔案上傳成功:
8、選中圖檔
右擊
,選擇
複制圖像連結
,即可獲得我們上傳檔案的
URL
,并進行通路:
9、把複制的URL,粘貼到蟻劍,測試連接配接,并添加連接配接:
10、可以看到已經成功獲得
windows10虛拟機
的webshell: