昨晚,一位客户发疯了,因为谷歌缓存了员工私人信息的版本。除非您登录,否则该信息不可用。
他们对自己的域名进行了谷歌搜索,例如:
site:example.com
并注意到 Google 已经抓取并缓存了一些内部页面。
自己查看页面的缓存版本:
This is Google's cache of 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 设法诱使网络服务器在 url 中将会话交给它,它是如何接管另一个用户的会话的?
是的,Google一个非恶意机器人劫持了一个会话
该网站多年来一直被机器人抓取。过去的 5 月 29 日也不例外。
谷歌通常通过检查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 Authentication。这个世界一切都很好。
直到有一天; 从哪儿冒出来
直到有一天,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 会话。但忽略这一事实,谷歌如何绕过身份验证?
- GoogleBot 正在访问该网站,并尝试随机输入用户名和密码(不太可能,日志显示未尝试登录)
- GoogleBot 决定在 url 字符串中插入一个随机的无 cookie 会话,并且它恰好与现有用户的会话匹配(不太可能)
- 用户设法弄清楚如何让 IIS 网站返回无 cookie 的 url (不太可能),然后将该 url 粘贴到另一个网站(不太可能),谷歌在该网站上找到了无 cookie 的 url 并对其进行了爬网
- 用户正在通过移动代理运行(他们不是)。代理服务器不支持 cookie,因此 IIS 创建了一个无 cookie 会话。该(例如Opera Mobile)缓存服务器被破坏(不太可能)并且所有缓存的链接都发布在黑客论坛上。GoogleBot 爬取了黑客论坛,并开始跟踪所有链接;包括我们的
jatwood@example.com
无 cookie 会话 URL。 - 用户感染了病毒,它设法诱使任何 IIS 网络服务器返回一个无 cookie 的 URL。然后该病毒向总部报告。这些 url 发布到 GoogleBot 抓取的可公开访问的资源上。然后,GoogleBot 会在我们的服务器上显示无 cookie 的 URL。
这些都不是真正合理的。
Google一个非恶意网络爬虫如何绕过 WebForms 身份验证,并劫持用户的现有会话?
你在问什么?
我什至不知道没有配置为发出无cookie会话的ASP.net网站如何发出无cookie会话。是否可以将基于cookie 的会话 id 反向转换为基于cookie的会话 id?我可以引用 and 的相关部分<sessionState>
,并表明不存在web.config
machine.config
<sessionState cookieless="true">
Web 服务器如何确定浏览器不支持 cookie?我尝试在 Chrome 中阻止 cookie,但从未获得过无 cookie 会话标识符。我可以模拟一个不支持 cookie 的浏览器,以验证我的服务器没有发出无 cookie 会话吗?
服务器是否通过用户代理字符串决定无 cookie 会话?如果是这样,我可以将 Internet Explorer 设置为带有欺骗性的 UA。
ASP.net 中的会话标识是否仅取决于 cookie?任何 IP 的任何人都可以使用 cookie-url 访问该会话吗?默认情况下,ASP.net 是否也考虑在内?
如果 ASP.net确实将 IP 地址与会话绑定在一起,那是否意味着会话不可能来自员工在家中的计算机上?因为当 GoogleBot 爬虫尝试从 Google IP 使用它时,它会失败吗?
是否有任何实例(除了我链接的那个)ASP.net 在未配置时发出无 cookie 会话?是否存在 Microsoft Connect 问题?
是否已知 Web-Forms 身份验证存在问题,并且不应该用于安全性?
奖金阅读
编辑:删除了绕过特权的谷歌机器人的名称,因为人们是智障人士的裤子;将Google的爬虫名称与其他内容混淆。我使用Google爬虫的名称作为提醒,它是一个非恶意的网络爬虫,它设法将它爬入另一个用户的 WebForm 会话。这是为了将其与试图闯入另一个用户会话的恶意爬虫进行对比。没有什么比书呆子更能激怒了。