gpt4 book ai didi

security - 无害的搜寻器如何绕过WebForms身份验证并劫持用户的 session ?

转载 作者:行者123 更新时间:2023-12-02 14:15:07 29 4
gpt4 key购买 nike

昨晚,一位客户之所以疯狂,是因为Google缓存了私人员工信息的版本。除非您登录,否则该信息不可用。

他们已经在Google中搜索了自己的域名,例如:

site:example.com


并注意到Googled已抓取并缓存了一些内部页面。

我自己查看页面的缓存版本:


这是Google的 https://example.com/(F(NSvQJ0SS3gYRJB4UUcDa1z7JWp7Qy7Kb76XGu8riAA1idys-nfR1mid8Qw7sZH0DYcL64GGiB6FK_TLBy3yr0KnARauyjjDL3Wdf1QcS-ivVwWrq-htW_qIeViQlz6CHtm0faD8qVOmAzdArbgngDfMMSg_N4u45UysZxTnL3d6mCX7pe2Ezj0F21g4w9VP57ZlXQ_6Rf-HhK8kMBxEdtlrEm2gBwBhOCcf_f71GdkI1))/ViewTransaction.aspx?transactionNumber=12345缓存。这是该页面于2013年9月15日00:07:22 GMT出现的快照


我对长网址感到困惑。而不是:

https://example.com/ViewTransaction.aspx?transactionNumber=12345


插入了一个长字符串:

https://example.com/[...snip...]/ViewTransaction.aspx?transactionNumber=12345


我花了几分钟的时间来记住:这可能是ASP.net的“无cookie会话”的症状。如果您的浏览器不支持Set-Cookie,则该网站将在URL中嵌入cookie。

除了我们的网站不使用它。

即使我们的站点确实有自动检测到的无cookie会话,并且Google设法使Web服务器哄骗它在url中发送会话,它如何接管另一个用户的会话?

是的,一个非恶意的Google机器人劫持了一个会话

该网站已被漫游器爬了多年。而过去的5月29日也是如此。

Google通常通过检查 robots.txt文件(我们没有文件)来开始抓取。但是没有任何人未经未经身份验证即不允许在网站上准备任何东西(包括 robots.txt),因此失败:

Time      Uri                      Port  User Name         Status
======== ======================= ==== ================ ======
1:33:04 GET /robots.txt 80 302 ;not authenticated, see /Account/Login.aspx
1:33:04 GET /Account/Login.aspx 80 302 ;use https plesae
1:33:04 GET /Account/Login.aspx 443 200 ;go ahead, try to login


一直以来,Google一直在寻找robots.txt文件。从来没有一个。然后返回以尝试对根进行爬网:

Time      Uri                      Port  User Name         Status
======== ======================= ==== ================ ======
1:33:04 GET / 80 302 ;not authenticated, see /Account/Login.aspx
1:33:04 GET /Account/Login.aspx 80 302 ;use https plesae
1:33:04 GET /Account/Login.aspx 443 200 ;go ahead, try to login


在安全站点上再次检查robots.txt:

Time      Uri                      Port  User Name         Status
======== ======================= ==== ================ ======
1:33:04 GET /robots.txt 443 302 ;not authenticated, see /Account/Login.aspx
1:33:04 GET /Account/Login.aspx 443 200 ;go ahead, try to login


然后登录页面上的样式表:

Time      Uri                      Port  User Name         Status
======== ======================= ==== ================ ======
1:33:04 GET /Styles/Site.css 443 200


这就是GoogleBot,msnbot和BingBot每次爬网的工作方式。机器人,登录,安全,登录。永远不会到达任何地方,因为它无法通过WebForms身份验证。世界一切都很好。

直到有一天;从哪儿冒出来

直到一天,GoogleBot才会出现,并带有一个Session cookie!

Time      Uri                        Port  User Name            Status
======== ========================= ==== =================== ======
1:49:21 GET / 443 jatwood@example.com 200 ;they showed up logged in!
1:57:35 GET /ControlPanel.aspx 443 jatwood@example.com 200 ;now they're crawling that user's stuff!
1:57:35 GET /Defautl.aspx 443 jatwood@example.com 200 ;back to the homepage
2:07:21 GET /ViewTransaction.aspx 443 jatwood@example.com 200 ;and here comes the private information


用户 jatwood@example.com已有一天未登录。 (我希望IIS为两个同时访问者提供相同的会话标识符,并由应用程序回收隔开)。并且我们的站点( web.config)未配置为启用无会话cookie。并且服务器( machine.config)未配置为启用无会话cookie。

所以:


Google如何获得无会话Cookie?
Google如何获得有效的无会话Cookie?
Google如何获得属于另一个用户的有效的无会话Cookie?


直到10月1日(4天前),GoogleBot仍然显示,手持cookie,以该用户身份登录,抓取,缓存和发布他们的一些私人详细信息。

Google如何通过绕过WebForms身份验证的非恶意网络爬虫?

IIS7,Windows Server 2008 R2,单服务器。

理论

服务器未配置为发出无cookie会话。但是忽略这一事实,Google如何绕过身份验证?


GoogleBot正在访问该网站,并尝试随机输入用户名和密码(不太可能,日志显示没有尝试登录)
GoogleBot决定在url字符串中插入一个随机的无cookie会话,它恰好与现有用户的会话匹配(不太可能)
用户设法弄清楚了如何使IIS网站返回无cookie的URL(不太可能),然后将该URL粘贴到另一个网站(不太可能),Google在其中找到了无cookie的URL并对其进行了爬网。
用户正在通过移动代理运行(不是)。代理服务器不支持cookie,因此IIS创建了一个无cookie的会话。该缓存服务器(例如Opera Mobile)被破坏(不太可能),并且所有缓存的链接都发布在了黑客论坛上。 GoogleBot抓取了黑客论坛,并开始关注所有链接;包括我们的 jatwood@example.com无cookie会话网址。
用户感染了一种病毒,该病毒设法诱使任何IIS Web服务器返回无cookie的URL。然后,该病毒会报告给总部。这些网址会发布到GoogleBot抓取的可公开访问的资源上。然后,GoogleBot将使用无cookie的网址显示在我们的服务器上。


这些都不是真的合理。

非恶意网络抓取工具如何Google绕过WebForms身份验证,并劫持用户的现有会话?

你在问什么?

我什至不知道没有配置为发出无cookie会话的ASP.net网站如何发出无cookie会话。是否可以将基于cookie的会话ID反向转换为基于非cookie的会话ID?我可以引用 <sessionState>web.config的相关 machine.config部分,并显示不存在

<sessionState cookieless="true">


网络服务器如何确定浏览器不支持cookie?我曾尝试在Chrome中阻止Cookie,但从未获得无cookie会话标识符。我可以模拟不支持Cookie的浏览器,以验证我的服务器没有发出无cookie会话吗?

服务器是否通过User-Agent字符串确定无cookie会话?如果是这样,我可以将Internet Explorer设置为具有欺骗性的UA。

ASP.net中的会话身份是否仅取决于Cookie?任何人都可以从任何IP地址使用cookie-url访问该会话吗?默认情况下,ASP.net是否不考虑?

如果ASP.net确实将IP地址与会话相关联,这是否意味着该会话不能源自其家庭计算机上的员工?因为那样当GoogleBot搜寻器尝试通过Google IP使用它时,会失败吗?

在未配置ASP.net的情况下,是否有任何实例(除了我链接的实例之外)发出无cookie会话?是否存在Microsoft Connect问题?

是否知道Web表单身份验证存在问题,并且不应用于安全性?

奖励阅读


A guy on StackOverflow who's web-server is sometimes giving out cookieless urls when it's not configured to


编辑:删除了绕过特权的bot的Google的名称,因为人们的脑袋是智障;使Google混淆了该搜寻器的名称。我使用Google搜寻器的名称来提醒自己,这是一个非恶意的网络搜寻器,设法将其爬网到另一个用户的WebForm会话中。与此形成鲜明对比的是,该恶意爬虫试图闯入另一个用户的会话。没有什么比助学士更能激怒了。

最佳答案

尽管该问题主要涉及会话标识符,但标识符的长度让我感到异常。

至少有两种类型的cookie /无cookie操作可以修改查询字符串以包括ID。


无Cookie会话
无Cookie表单身份验证令牌


它们是彼此完全独立的(据我所知)。

会话状态

无cookie会话允许服务器基于URL中的唯一ID与cookie中的唯一ID来访问会话状态数据。尽管ASP.Net重用了会话ID,这使它更易于进行会话固定尝试(单独的主题,但值得了解),但通常被认为是一种好的做法。


ASP.net中的会话身份是否仅取决于Cookie?能够
任何人,从任何IP,使用cookie-url,都可以访问该会话?是否
默认情况下,ASP.net还不考虑在内吗?


会话ID就是全部。

General Session Security Reading

表格认证

根据示例数据的长度,我猜您的URL实际上包含表单身份验证值,而不是会话ID。源代码表明无cookie模式不是必须明确启用的东西。

/// <summary>ASP.NET determines whether to use cookies based on
/// <see cref="T:System.Web.HttpBrowserCapabilities" /> setting.
/// If the setting indicates that the browser or device supports cookies,
/// cookies are used; otherwise, an identifier is used in the query string.</summary>
UseDeviceProfile


确定的方法如下:

// System.Web.Security.CookielessHelperClass
internal static bool UseCookieless( HttpContext context, bool doRedirect, HttpCookieMode cookieMode )
{
switch( cookieMode )
{
case HttpCookieMode.UseUri:
return true;
case HttpCookieMode.UseCookies:
return false;
case HttpCookieMode.AutoDetect:
{
// omitted for length
return false;
}
case HttpCookieMode.UseDeviceProfile:
if( context == null )
{
context = HttpContext.Current;
}
return context != null && ( !context.Request.Browser.Cookies || !context.Request.Browser.SupportsRedirectWithCookie );
default:
return false;
}
}


猜猜默认是什么? HttpCookieMode.UseDeviceProfile。 ASP.Net维护设备和功能的列表。此列表通常是一件很糟糕的事情;与Netscape 4相同的 example, IE11 gives a false positive for being a downlevel browser

原因

我认为吉恩的解释很有可能。 Google从某些用户操作中找到了该URL并对其进行了爬网。

完全可以想象Google机器人不支持cookie。但这并不能解释URL的来源,即是什么用户操作导致Google看到已经有ID的URL?一个简单的解释可能是用户使用的浏览器被认为不支持cookie。根据浏览器的不同,其他所有内容对用户来说似乎也不错。

时间安排,即有效期似乎很长,尽管我对身份验证凭单的有效期限以及在什么情况下可以续签的身份并不熟悉。 ASP.Net完全有可能像对持续活跃的用户那样继续重新发行/续订票证。

可能的解决方案

我在这里做了很多假设,但是如果我是对的:


首先,重现您环境中的行为。
通过使用 HttpCookieMode.UseCookies明确禁用无cookie的行为。

web.config:

 <authentication mode="Forms">
<forms loginUrl="~/Account/Login.aspx" name=".ASPXFORMSAUTH" timeout="26297438"
cookieless="UseCookies" />
</authentication>



尽管这可以解决问题,但是您可以研究扩展表单身份验证HTTP模块并添加其他验证(或至少记录/诊断)。

关于security - 无害的搜寻器如何绕过WebForms身份验证并劫持用户的 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19188717/

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