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/cn.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灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP