我是一个pentester,在对API进行模糊测试时,我发现了一个“怪异”响应,该响应似乎源于默认的.Net类CultureInfo。现在,我不是.Net方面的专家,我甚至都不是开发人员,如果这是一个菜鸟问题,那么请抱歉。
CultureInfo使用具有诸如en-US或nl-NL的语言环境的名称,并且可以从系统返回特定于语言环境的信息。
当模糊此区域设置时(因此,nl-NL部分),对于大于152的区域设置,我得到了两个不同的响应。我仅模糊了最后一部分,即国家(地区)部分,因此对CultureInfo的请求如下所示:nl-AAAAAA(以及更多的AAAA。
一个响应是错误“不支持文化”,其中包含一些其他信息。我收到的大多数请求都超过152个A。
奇怪的是,对于某些值,我得到了一个“正常”的默认响应,它假定nl-ANYTHING表示您想要nl-NL的结果,并且没有错误生成。例如(A的数量): 190、198、255、266和1900 我看不出为什么这些数量的A不会产生错误而其他类型的A却没有产生直接联系。
现在,此错误最有可能(如果我查看源代码)源自GetCultureInfoHelper(),该错误在CultureInfo()类的GetCultureInfo()中调用。这将以lcid 0进行调用,并将使用name参数创建一个新的CultureInfo类。然后,名称参数将为nl-(A * 190)。通常,它会中断并返回null和错误,但是对于某些数量的A,它不会在那里中断并返回正确的值。
实际的问题是:为什么要这样做?为什么不总是出错,还是总是返回默认值?
更多信息: 所有这些都运行在运行x64 Amazon Linux(不确定是Amazon Linux还是Ubuntu / Debian)的Linux服务器上的.Net容器中(据我所知)。
最可能重要的.Net来源:
public static CultureInfo GetCultureInfo(string name)
{
if (name == null)
throw new ArgumentNullException(nameof (name));
CultureInfo cultureInfoHelper = CultureInfo.GetCultureInfoHelper(0, name, (string) null);
if (cultureInfoHelper == null)
throw new CultureNotFoundException(nameof (name), name, SR.Argument_CultureNotSupported);
return cultureInfoHelper;
}
这部分是GetCultureInfoHelper方法的一部分,并且是唯一实际返回Null的部分(据我所知):
CultureInfo cultureInfo2;
try
{
switch (lcid)
{
case -1:
cultureInfo2 = new CultureInfo(name, altName);
break;
case 0:
cultureInfo2 = new CultureInfo(name, false);
break;
default:
cultureInfo2 = new CultureInfo(lcid, false);
break;
}
}
catch (ArgumentException ex)
{
return (CultureInfo) null;
}
编辑: 有关该类的更多信息: https://docs.microsoft.com/en-us/dotnet/api/system.globalization.cultureinfo?view=netframework-4.7.2