天天看點

【檔案上傳繞過】——前端檢測_前端js驗證漏洞

文章目錄

    • 一、實驗目的:
    • 二、工具:
    • 三、實驗環境:
    • 四、實驗目的:
    • 五、漏洞說明:
      • 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的校驗很容易被繞過。
【檔案上傳繞過】——前端檢測_前端js驗證漏洞

2. 

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繞過漏洞

  按

F12(或者:在網頁空白處"右擊"-->選擇:"檢查")

打開調試面闆,選擇

網絡

,然後上傳

圖檔檔案

非圖檔檔案

,然後對這兩個檔案的變化進行對比,如果網絡中沒有資料變化,說明存在

js前端驗證漏洞

,如果有變化說明不存在。

(有變化說明,前端沒有做驗證,是把檔案傳輸到背景,在背景進行驗證的,是以才會有網絡請求。)

1.1 上傳非圖檔檔案:

1、建立一個test.php檔案:

檔案内容:

【檔案上傳繞過】——前端檢測_前端js驗證漏洞

2、通過實體機通路URL,打開檢查元素,選中網絡,并上傳檔案test.php:

【檔案上傳繞過】——前端檢測_前端js驗證漏洞

3、點選上傳檔案後,提示不允許上傳該檔案,并且沒有資料流量産生:

【檔案上傳繞過】——前端檢測_前端js驗證漏洞

通過上面的操作,發現沒有資料向背景發送,說明前端有

js驗證

,存在

js繞過

漏洞。

1.2 上傳圖檔檔案:

1、通過實體機通路URL,打開檢查元素,選中網絡,并上傳檔案test.jpg:

【檔案上傳繞過】——前端檢測_前端js驗證漏洞

2、點選上傳檔案後,發現網絡中有資料流量産生:

【檔案上傳繞過】——前端檢測_前端js驗證漏洞

通過上圖可以看到,

網絡

欄有資料傳輸,說明有資料向背景發送。

2. 繞過方法一:删除或者禁用js:

2.1 upload-labs闖關遊戲(Pass-01):

通過

windows10虛拟機

中的

upload-labs闖關遊戲(Pass-01)

進行實驗:

1、在輸入框中輸入

about:config

點選

接受

【檔案上傳繞過】——前端檢測_前端js驗證漏洞
【檔案上傳繞過】——前端檢測_前端js驗證漏洞

2、在搜尋框中輸入

javascript

然後找到

javascript.enabled

選項

輕按兩下

,出現

false

:

【檔案上傳繞過】——前端檢測_前端js驗證漏洞
【檔案上傳繞過】——前端檢測_前端js驗證漏洞

3、回到

upload-labs-master

選擇第一關上傳

php

檔案:

【檔案上傳繞過】——前端檢測_前端js驗證漏洞
【檔案上傳繞過】——前端檢測_前端js驗證漏洞

通過上面操作,發現已經上傳成功。

4、上傳成功後允許

js

代碼運作,如下圖所示:

注:不開啟

js

代碼的話,如果頁面通過

ajxs

編寫的,可能就無法實作相應功能,比如這裡的檔案上傳功能可能就不能使用了。

【檔案上傳繞過】——前端檢測_前端js驗證漏洞

2.2 DVWA靶場-low級别:

1、打開

DVWA靶場-low級别

【檔案上傳繞過】——前端檢測_前端js驗證漏洞

2、上傳一個

1.jpg

檔案:

【檔案上傳繞過】——前端檢測_前端js驗證漏洞
【檔案上傳繞過】——前端檢測_前端js驗證漏洞
【檔案上傳繞過】——前端檢測_前端js驗證漏洞

3、上傳完成後,會顯示檔案路徑,并會提示成功上傳:

【檔案上傳繞過】——前端檢測_前端js驗證漏洞

4、可以正常通路:

【檔案上傳繞過】——前端檢測_前端js驗證漏洞

5、接下來,上傳一個

一句話木馬

檔案

test.php

檔案内容:

【檔案上傳繞過】——前端檢測_前端js驗證漏洞
【檔案上傳繞過】——前端檢測_前端js驗證漏洞

6、可以正常上傳,并進行通路,并且能夠解析成功:

【檔案上傳繞過】——前端檢測_前端js驗證漏洞

3. 繞過方法二:使用代理上傳檔案,比如

Burp Suite

1、在

windows10虛拟機

桌面建立

test.php

檔案,寫入一句話木馬儲存,然後将字尾名改為

jpg

:

【檔案上傳繞過】——前端檢測_前端js驗證漏洞
【檔案上傳繞過】——前端檢測_前端js驗證漏洞

2、進入闖關遊戲

Pass-01

,點選

浏覽

選中建立好的

jpg檔案

:

【檔案上傳繞過】——前端檢測_前端js驗證漏洞

3、打開

Burp Suite

,開啟流量攔截:

【檔案上傳繞過】——前端檢測_前端js驗證漏洞

4、在浏覽器裡面,打開

Burp Suite

代理流量,然後點選上傳:

【檔案上傳繞過】——前端檢測_前端js驗證漏洞

5、發現

Burp Suite

已經抓到資料:

【檔案上傳繞過】——前端檢測_前端js驗證漏洞

6、将檔案格式改成

php檔案

,點選

Forward

發送資料包,并關閉浏覽器代理:

【檔案上傳繞過】——前端檢測_前端js驗證漏洞
【檔案上傳繞過】——前端檢測_前端js驗證漏洞

7、檢視

windows10虛拟機

\WWW\upload-labs-master\upload

檔案夾,出現

test.php

檔案上傳成功:

【檔案上傳繞過】——前端檢測_前端js驗證漏洞

8、選中圖檔

右擊

,選擇

複制圖像連結

,即可獲得我們上傳檔案的

URL

,并進行通路:

【檔案上傳繞過】——前端檢測_前端js驗證漏洞
【檔案上傳繞過】——前端檢測_前端js驗證漏洞

9、把複制的URL,粘貼到蟻劍,測試連接配接,并添加連接配接:

【檔案上傳繞過】——前端檢測_前端js驗證漏洞
【檔案上傳繞過】——前端檢測_前端js驗證漏洞

10、可以看到已經成功獲得

windows10虛拟機

的webshell:

【檔案上傳繞過】——前端檢測_前端js驗證漏洞

繼續閱讀