Java-Sec-Code学习3-目录穿越漏洞
case1
java-sec-code默认的漏洞URL是http://127.0.0.1:8080/path_traversal/vul?filepath=../../../../../etc/passwd
。
直接审计源代码,看看漏洞代码啥样。
这里很简单,/path_traversal/vul路由下就是直接通过接受filepath参数值作为文件路径读取内容。这里通过getImgBase64来进行读取,可以看一下具体方法。
可以看到方法中,创建了一个File对象来读取filepath对应的文件,如果路径不是目录且文件存在,就直接读取文件内容再base64编码后返回。这也是为什么我们读取/etc/passwd是回显的不是直接明文,而是base64编码内容了。
这里没有对用户输入的filepath参数做任何的处理,直接读取文件,造成了任意的目录穿越和文件读取。
case2
这是一个修复后的安全案例,看看他怎么修的。
主要就是对filepath做路径过滤,通过调用了一个SecurityUtil.pahtFilter()方法来实现的,那么我们跟一下,看看具体过滤怎么写的。
这里的37应该是html编码中的37,也就是对应的%,这里其实是首先对filepath进行url解码直到没有%出现为止。然后,只有不包含..
和不以/
开头才能通过验证,否者被返回null。