網絡滲透上傳漏洞闖19關-第11關你們期待的「白名單」繞過

網絡滲透上傳漏洞闖19關-第11關你們期待的「白名單」繞過

在前面幾期的時候,關注頭條號的粉絲說,如果上傳漏洞,我直接用白名單過濾,不就解決了嗎? OK,從這期開始就是白名單的繞過,各位看官得仔細領會了(@^_^@)

採用的防禦手法是白名單過濾,只允許上傳jpg、png和gif類型,並且將上傳的文件給重命名為了白名單中的後綴

$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 = '上傳失敗!';

}

處理上傳文件的方式

$img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;

看起來這樣防禦並沒有什麼問題,但是這一關上傳目錄是可控的所以可以先上傳一個後綴名為jpg,內容為一句話木馬的文件,然後修改上傳目錄為.php後綴,之後在.php後使用截斷後面的拼接內容,注意這裡需要關掉magic_quotes_gpc這個php擴展,否則00會被轉義

$_GET['save_path']這裡使用00截斷."/".rand(10, 99).date("YmdHis").".".$file_ext;

注意這裡的00字符因為在url的GET參數中,所以需用進行url編碼

網絡滲透上傳漏洞闖19關-第11關你們期待的「白名單」繞過

通過這種方法就可以成功繞過十一關的上傳檢測

網絡滲透上傳漏洞闖19關-第11關你們期待的「白名單」繞過

網絡滲透上傳漏洞闖19關-第11關你們期待的「白名單」繞過

By the way,許多對安全感興趣但沒有這方面經驗的小朋友,看到這裡總是感覺顯示一個phpinfo的頁面能代表什麼,能夠執行phpinfo(),這個函數證明,上傳的文件可以執行PHP腳本,這個時候如果上傳的是一句話木馬,就可以直接配合『菜刀』拿下整個站點,查看源碼,甚至修改數據庫或者控制操作系統。


分享到:


相關文章: