Java(Web 工程源代码安全审计实战,第 3 部分: 文件途径操作)

作者:阿文
围观群众:37
更新于

 

Web 运用要挟之文件途径操作

技能原理

当进犯者能够指定文件名、文件途径等文件操作的参数,就有或许越权拜访正常情况下无法抵达的体系资源。

Java(Web 工程源代码安全审计实战,第 3 部分: 文件途径操作)

问题剖析 PathBasedAccessControl.java129

源代码审计发现 PathBasedAccessControl.java 第 129 行 File() 办法。进犯者有或许操控文件途径越权拜访或许修正被维护的其他文件。该文件内容被作为页面米素显现。

图 1. 问题代码段

在已布置的 WebGoat 工程,发动出产环境。模仿进犯者登录,在左边导航目录下点选“Access Control Flaws - Bypass a Path Based Access Control Scheme”, 任选一个 combox 中的 xx.html 文件,点击“View Profile”提交。

进犯场景

图 2. 文件途径操作进犯场景

处理方案

快速修正

处理 WebGoat 工程的示例的文件途径操作问题,能够在 PathBasedAccessControl.java 第 97 行办法,增加对文件途径的校验。代码片段如下:

图 3. 整改文件途径操作的代码

布置整改后的代码,从头运转进犯场景,不行再现进犯。

触类旁通

一般的,为避免文件途径操作问题,开发者首先要运用正确的体系函数,其次能够自定义根据需求对文件操作参数进行过滤, 还能够运用服务器安全拜访结构。供给以下五种思路:

1. 运用标准途径 getCanonicalPath()

进犯者能够用包括 ../序列的参数来指定坐落特定目录之外的文件,然后违背程序安全战略,引发途径遍历缝隙,进犯者或许向恣意目录上传文件。

Java(Web 工程源代码安全审计实战,第 3 部分: 文件途径操作)

Java 言语对途径的操作有 getAbsolutePath() 获取肯定途径和 getCannonicalPath() 获取标准途径。getCannonicalPath() 首先将途径名转换成肯定途径名,这与调用 getAbsolutePath() 办法的作用相同。然后用与体系相关的方法将它映射到其专一途径名。这一般涉及到从途径名中移除剩余的称号(比方 "." 和 "..")、剖析符号衔接(关于 UNIX 渠道),以及将驱动器名转换成标准大小写方法(关于 Microsoft Windows 渠道)。所以应该尽量运用标准途径,躲避进犯者或许运用的剩余的剖析符号。

2. 开发者为运用到的文件操作参数进行输入验证,过滤字符(如“.”和“..”)

Java(Web 工程源代码安全审计实战,第 3 部分: 文件途径操作)

3. 针对运用场景,约束文件类型。比方运用的图片文件只能是后缀.png, .jpg 而不或许是.bat, .sh。 主张加强对文件的判别,要经过文件头而不仅仅是文件后缀来判别。

4.Java 安全管理器 permission Java.io.FilePermission

5. 服务器安全装备战略文件。能将所能读取的文件限定在特定的目录下。怎么装备安全战略文件,和详细运用的服务器类型相关

 

回页首

Web 运用要挟之体系日志 (Log) 诈骗和隐私走漏

当进犯者有或许写 Log 信息的时分,就有或许结构虚伪信息,利诱 Log 读者,利诱体系运维调试人员调试体系故障。Log 诈骗能够帮忙进犯者展开大型可继续进犯 (APT)。

源代码审计发现 HammerHead.java 第 271 行记载未经校验的 message,代码片段如下:

图 4. 问题代码段

在已布置的 WebGoat 工程,发动出产环境。

模仿进犯者登录,在左边导航目录下点选“Injection Flaws - Log Spoofing”, 在文本框输入“Smith%0d%0aLogin Succeeded for username: admin”, 提交后假定服务器 Log 这段文本,将会在 Log 文件中新的一行中写入虚伪信息“Succeeded for username: admin”。进犯的小窍门在换行符号n,也便是转码后的 %0d%0a, 换行使 Log 中的诈骗信息看起来更实在。

WebGoat 的这个示例项目仅仅描述性展现,没有真实代码履行写服务器日志。

处理方案

1. 换行符”n”。Log 诈骗最要害的米素便是换行符,假如 Log 信息用黑名单过滤,”n”必定要出现在黑名单中。假如 Log 信息用白名单过滤,”n”必定不能出现在白名单中

2. 开发完结,在出产环境上线之前,要悉数删去 System.out()

Java(Web 工程源代码安全审计实战,第 3 部分: 文件途径操作)

3. 分级 Log 开关。软件开发版别和发布版别,翻开不同等级的 Log 开关,明晰记载的一起将损害降到最小规模

Java(Web 工程源代码安全审计实战,第 3 部分: 文件途径操作)

4. 操控 Log 内容。不以任何方法记载用户的灵敏信息,哪怕是加密过的

5. 不记载隐私信息。当用户隐私信息被写到 Log 中时,就造成了隐私走漏。尤其是暗码信息,即使是加密之后的暗码信息,也不该该被存储到 Log 中。因为任何加密算法都有被破解的或许

WebGoat 工程演示了几十个 Web 问题事例,比方上传并履行歹意文件等等。本文篇幅有限,不一一列举其他事例。

以上议论了 Web 高危缝隙的审计。下面叙述几个因为 Java 言语特性,简单引导开发者犯下的编程过错。这些代码缺点使得工程不强健,需求定点审计排查、整改。

 

回页首

[1] [2]  黑客接单网

Java(Web 工程源代码安全审计实战,第 3 部分: 文件途径操作)

非特殊说明,本文版权归 茌平热点网 所有,转载请注明出处.

本文分类: 新闻

本文标题: Java(Web 工程源代码安全审计实战,第 3 部分: 文件途径操作)

本文网址: http://cdslpx.com/xinwen/3528.html

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

网站分类
搜索
最新留言
    标签列表