浅析路径遍历漏洞 文/饭
許多的Web應(yīng)用程序一般會(huì)有對(duì)服務(wù)器的文件讀取查看的功能,大多會(huì)用到提交的參數(shù)來(lái)指明文件名,形如:http://www.nuanyue.com/getfile=image.jgp
當(dāng)服務(wù)器處理傳送過(guò)來(lái)的image.jpg文件名后,Web應(yīng)用程序即會(huì)自動(dòng)添加完整路徑,形如“d://site/images/image.jpg”,將讀取的內(nèi)容返回給訪問(wèn)者。
初看,在只是文件交互的一種簡(jiǎn)單的過(guò)程,但是由于文件名可以任意更改而服務(wù)器支持“~/”,“/..”等特殊符號(hào)的目錄回溯,從而使攻擊者越權(quán)訪問(wèn)或者覆蓋敏感數(shù)據(jù),如網(wǎng)站的配置文件、系統(tǒng)的核心文件,這樣的缺陷被命名為路徑遍歷漏洞。在檢查一些常規(guī)的Web應(yīng)用程序時(shí),也常常有發(fā)現(xiàn),只是相對(duì)隱蔽而已。
發(fā)現(xiàn)路徑遍歷漏洞
路徑遍歷漏洞的發(fā)現(xiàn),主要是對(duì)Web應(yīng)用程序的文件讀取交互的功能塊,進(jìn)行檢測(cè),面對(duì)這樣的讀取方式:
“http://www.nuanyue.com/test/downfile.jsp?filename=fan.pdf”
我們可以使用 “../”來(lái)作試探,比如提交Url:“getfile=/fan/fan/*53.pdf”,而系統(tǒng)在解析是“d://site/test/pdf/fan/fan/http://www.cnblogs.com/*53.pdf”,通過(guò)“../”跳轉(zhuǎn)目錄“/fan”,即“d://site/test/pdf/*53.pdf”,返回了讀取文件的正常的頁(yè)面。
路徑遍歷漏洞隱藏一般在文件讀取或者展示圖片功能塊這樣的通過(guò)參數(shù)提交上來(lái)的文件名,從這可以看出來(lái)過(guò)濾交互數(shù)據(jù)是完全有必要的。惡意攻擊者當(dāng)然后會(huì)利用對(duì)文件的讀取權(quán)限進(jìn)行跨越目錄訪問(wèn),比如訪問(wèn)一些受控制的文件,“http://www.cnblogs.com/http://www.cnblogs.com/http://www.cnblogs.com/../etc/passwd“或者”http://www.cnblogs.com/http://www.cnblogs.com/boot.ini“,當(dāng)然現(xiàn)在部分網(wǎng)站都有類似Waf的防護(hù)設(shè)備,只要在數(shù)據(jù)中會(huì)有/etc /boot.ini等文件名出直接進(jìn)行攔截。
遍歷路徑攻擊變異
路徑遍歷漏洞是很常見(jiàn)的,在Web應(yīng)用程序編寫(xiě)過(guò)程,會(huì)有意識(shí)的對(duì)傳遞過(guò)來(lái)的參數(shù)進(jìn)行過(guò)濾或者直接刪除,存在風(fēng)險(xiǎn)的過(guò)濾方式,一般可以采用如下方式進(jìn)行突破:
以下是一些繞過(guò)的方法,當(dāng)然在實(shí)際運(yùn)行過(guò)程中,可以組合使用。
(1) 加密參數(shù)傳遞的數(shù)據(jù);在Web應(yīng)用程序?qū)ξ募M(jìn)行加密之后再提交,比如:“downfile.jsp?filename= ZmFuLnBkZg- “,在參數(shù)filename用的是Base64加密,而攻擊者要想繞過(guò),只需簡(jiǎn)單的將文件名加密后再附加提交即可。所以說(shuō),采用一些有規(guī)律或者輕易能識(shí)別的加密方式,也是存在風(fēng)險(xiǎn)的。
(2)? 編碼繞過(guò),嘗試使用不同的編碼轉(zhuǎn)換進(jìn)行過(guò)濾性的繞過(guò),比如Url編碼,通過(guò)對(duì)參數(shù)進(jìn)行Url編碼提交,“downfile.jsp?filename= %66%61%6E%2E%70%64%66“來(lái)繞過(guò)。
(3)? 目錄限定繞過(guò);在有些Web應(yīng)用程序是通過(guò)限定目錄權(quán)限來(lái)分離的。當(dāng)然這樣的方法不值得可取的,攻擊者可以通過(guò)某些特殊的符號(hào)“~“來(lái)繞過(guò)。形如這樣的提交“downfile.jsp?filename=~/../boot”。能過(guò)這樣一個(gè)符號(hào),就可以直接跳轉(zhuǎn)到硬盤(pán)目錄下了。
(4)? 繞過(guò)文件后綴過(guò)濾;一些Web應(yīng)用程序在讀取文件前,會(huì)對(duì)提交的文件后綴進(jìn)行檢測(cè),攻擊者可以在文件名后放一個(gè)空字節(jié)的編碼,來(lái)繞過(guò)這樣的文件類型的檢查。例如:http://www.cnblogs.com/http://www.cnblogs.com/boot.ini%00.jpg,Web應(yīng)用程序使用的Api會(huì)允許字符串中包含空字符,當(dāng)實(shí)際獲取文件名時(shí),則由系統(tǒng)的Api會(huì)直接截短,而解析為“http://www.cnblogs.com/http://www.cnblogs.com/boot.ini”。在類Unix的系統(tǒng)中也可以使用Url編碼的換行符,例如:http://www.cnblogs.com/../etc/passwd%0a.jpg如果文件系統(tǒng)在獲取含有換行符的文件名,會(huì)截短為文件名。也可以嘗試%20,例如: http://www.cnblogs.com/../index.jsp%20
(5)? 繞過(guò)來(lái)路驗(yàn)證。在一些Web應(yīng)用程序中,會(huì)有對(duì)提交參數(shù)的來(lái)路進(jìn)行判斷的方法,而繞過(guò)的方法可以嘗試通過(guò)在網(wǎng)站留言或者交互的地方提交Url再點(diǎn)擊或者直接修改Http Referer即可,這主要是原因Http Referer是由客戶端瀏覽器發(fā)送的,服務(wù)器是無(wú)法控制的,而將此變量當(dāng)作一個(gè)值得信任源是錯(cuò)誤的。
防范遍歷路徑漏洞
在防范遍歷路徑漏洞的方法中,最有效的是權(quán)限的控制,謹(jǐn)慎的處理向文件系統(tǒng)API傳遞過(guò)來(lái)的參數(shù)路徑。主要是因?yàn)榇蠖鄶?shù)的目錄或者文件權(quán)限均沒(méi)有得到合理的配置,而Web應(yīng)用程序?qū)ξ募淖x取大多依賴于系統(tǒng)本身的API,在參數(shù)傳遞的過(guò)程,如果沒(méi)有得嚴(yán)謹(jǐn)?shù)目刂?#xff0c;則會(huì)出現(xiàn)越權(quán)現(xiàn)象的出現(xiàn)。在這種情況下,Web應(yīng)用程序可以采取以下防御方法,最好是組合使用。
(1)? 數(shù)據(jù)凈化,對(duì)網(wǎng)站用戶提交過(guò)來(lái)的文件名進(jìn)行硬編碼或者統(tǒng)一編碼,對(duì)文件后綴進(jìn)行白名單控制,對(duì)包含了惡意的符號(hào)或者空字節(jié)進(jìn)行拒絕。
(2)? Web應(yīng)用程序可以使用chrooted環(huán)境訪問(wèn)包含被訪問(wèn)文件的目錄,或者使用絕對(duì)路徑+參數(shù)來(lái)控制訪問(wèn)目錄,使其即使是越權(quán)或者跨越目錄也是在指定的目錄下。
總結(jié)
路徑遍歷漏洞允許惡意攻擊者突破Web應(yīng)用程序的安全控制,直接訪問(wèn)攻擊者想要的敏感數(shù)據(jù) ,包括配置文件、日志、源代碼等,配合其它漏洞的綜合利用,攻擊者可以輕易的獲取更高的權(quán)限,并且這樣的漏洞在發(fā)掘上也是很容易的,只要對(duì)Web應(yīng)用程序的讀寫(xiě)功能塊直接手工檢測(cè),通過(guò)返回的頁(yè)面內(nèi)容來(lái)判斷,是很直觀的,利用起來(lái)也相對(duì)簡(jiǎn)單。
轉(zhuǎn)載于:https://www.cnblogs.com/demonspider/archive/2012/05/24/2515911.html
總結(jié)
以上是生活随笔為你收集整理的浅析路径遍历漏洞 文/饭的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 关于stm32启动文件的选择
- 下一篇: Memcached入门指南