gpt4 book ai didi

java - 防止 "Null Byte Attacks"| java

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:47:23 25 4
gpt4 key购买 nike

我对这个话题的初步理解是,我需要防止一些请求中可用的垃圾字符来避免这些攻击。

我决定在使用之前通过对每个请求参数进行模式匹配来解决这个问题。 Internet 上的大多数帖子都在谈论 Null Byte,并且给出的示例显示了文件 IO 如何成为这种攻击的主要受害者。下面是我的问题

  1. 文件 IO 是空字节唯一可以影响的东西还是其他操作也是这种攻击的受害者?
  2. 如果我想过滤我的请求参数以防止 null bye 攻击,我需要注意哪些字符/字符串/模式?我有一份 list ,但我确信它不完整。 %00\0十六进制的 0x00

我指的文章是:

http://projects.webappsec.org/w/page/13246949/Null%20Byte%20Injection

http://www.perlmonks.org/index.pl?node_id=38548

http://hakipedia.com/index.php/Poison_Null_Byte

提前致谢


所以为了更清楚:

第一篇文章指出了我正在谈论的 java 中的漏洞。字符串 serverlogs.txt%00.db 在 java 中是允许的,但是当涉及到 C/C++ 时,这是 serverlogs.txt 因为在 C %00 中将被空字节替换导致字符串在 serverlogs.txt 之后终止。所以我们应该避免这样的字符。这就是我试图弄清楚我不应该允许使用哪些此类字符的原因。

String fn = request.getParameter("fn");
if (fn.endsWith(".db"))
{
File f = new File(fn);
//read the contents of “f” file

}

最佳答案

你试过了吗?我写了这个快速单元测试:

@Test
public void test() throws Exception {
FileOutputStream out = new FileOutputStream("test.txt");
out.write("hello!".getBytes("utf-8"));
out.close();
String badPath = "test.txt\0foo";
File file = new File(badPath);
FileInputStream in = new FileInputStream(file);
System.out.println(StreamUtils.copyToString(in, Charset.forName("utf-8")));
}

现在,如果空字符破坏了字符串,我希望将我的文件内容打印到控制台。相反,我得到一个 FileNotFoundException。作为记录,这是在 Ubuntu 13.04 上使用 Java 1.7.0_40。

更新

进一步调查显示 File#isInvalid 中的这段代码:

final boolean isInvalid() {
if (status == null) {
status = (this.path.indexOf('\u0000') < 0) ? PathStatus.CHECKED
: PathStatus.INVALID;
}
return status == PathStatus.INVALID;
}

关于java - 防止 "Null Byte Attacks"| java ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18995530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com