NetSecurity 板


LINE

2017.W27 - Path Traversal > 重新設計輪子當然可以 只要妳開的車裝上你的輪子 ## 前言 ## 最近在處理公司上的事情 一直覺得重新造輪子是個不錯的概念 但是也不要在公司產品上用你設計輪子啊 QQ ## 內容 ## Path Traversal 或者稱為 Directory Travelsal 是一系列安全性的漏洞概念 主要是處理檔案路徑時不正確 造成存取的檔案超出設計者的預期 從 CWE 列表中可以從 CWE-21 - Pathname Traversal and Equivalence Errors[0] 開始 引起各種 Path Travelsal 的問題 主要的問題都會回歸到所謂的 CWE-20 Improper Input Validateion[1] 也就是不正確的使用者輸入驗證 簡單的例子:有一個 web service 會提供 上傳檔案 與 自動轉檔 功能 轉檔功能操作時 需要指定檔案的路徑 一個基本的驗證則是快速判斷檔案路徑中是否包含 . 跟 .. (Linux-Based) 但是這樣的假設也不盡正確 原因是這樣就代表不允許使用 ..abc 這樣的名稱 因此一個聰明的概念就是利用 / 來切割檔案名稱 並且逐一檢查是否包含 . 或者 .. 然而一個優秀的 c/c++ programmer 應該會知道 glibc 會提供 realpath 這個函數 根據 man realpath 可以得到他的主要描述 returns the canonicalized absolute pathname 在下面的描述中的第一段話更明確的表示他的主要功能 The realpath() function resolves all symbolic links, extra ``/'' characters, and references to /./ and /../ in file_name. 這代表用 realpath 處理過後的檔案已經不會包含任何 . .. 跟 symbolic link 這些有機會跳轉的符號 從 glibc 的 realpath 的 source code[2] 來看 可以看到 __realpath 主要有以下幾個判斷 1. 輸入的檔名是否為空 2. 當下路徑不存在則報錯 3. 相對路徑則自動帶入當下路徑 getcwd 4. 依序處理每一個 / 切割的元素 4.1 無視連續的 / 4.2 無視 . 的元素 4.3 .. 則跳到上一個資料夾 已經是 / 則無視 4.4 透過 stat 判斷檔案是否檔案、資料夾是否存在 4.5 如果是 symbolic link 則透過 readlink 獲得真實路徑 透過 realpath 的好處在於你可以獲得一個乾淨的絕對路徑 之後就能透過這個路徑 判斷目的地是否在允許的路徑之下 至於為什麼不需要重新造輪子 原因在於這個問題不是第一天發現 因此在這個平台下這個方式會經過各種優化 像是在這篇文章中[3] 提到的 GNU 的 yes 指令快到突破天際 (12.8 GB/s) 這就是針對平台已經特殊優化的結果了 再重新設計一個 yes 除非有特殊的需求 不然還是乖乖用經過千錘百鍊的版本吧! [0]: https://cwe.mitre.org/data/definitions/21.html [1]: https://cwe.mitre.org/data/definitions/20.html [2]: https://github.com/lattera/glibc/blob/master/stdlib/canonicalize.c [3]: https://www.reddit.com/r/unix/comments/6gxduc/how_is_gnu_yes_so_fast/ --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.193.122.171
※ 文章網址: https://webptt.com/m.aspx?n=bbs/NetSecurity/M.1499176697.A.AA1.html
1F:推 skycat2216: 12.8GB/S AS FUK 08/17 20:59







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Boy-Girl站內搜尋

TOP