代码改变世界

大叔手记(18):利用Elmah和Google体验一把入侵的快感

2012-01-13 15:28  汤姆大叔  阅读(14782)  评论(18编辑  收藏  举报

介绍

关于ELMAH,相信大家都不陌生了,最流行的错误日志记录组件,用过的人都知道其强大的威力,可以记录非常详细的错误信息供管理员和开发人员进行分析。Elmah配置起来也非常简单,但是同时也带来了一个问题:那就是如果配置不好的话,就会被入侵,而且入侵的方法非常非常简单,本文我讲演示一下,如何利用Elmah错误信息和Google搜索来入侵一个站点,同时本文也提供了正确的Elmah配置方法

原文整理自:http://www.troyhunt.com/2012/01/aspnet-session-hijacking-with-google.html

注1:本人目的是让大家正确配置ELMAH,不是教大家入侵哦,入侵有风险,实施需谨慎,请参考结果贴

注2:在这里,我要澄清一下,利用Elmah入侵站点,并不是说Elmah本身的问题,而是由于配置的问题导致的,所以大家不要对Elmah组件丧失信心,它依然很好用,并且依然是我的第一选择。

Elmah的强大功能

背景知识:ELMAH是Atif Aziz开发的一个错误日志记录组件,目前非常流行,其流行程度可以从NuGet上看出来,目前总排名是14。

我们先来看看他的几个特点:

  1. 你可以直接添加ELMAH组件,不用再次编译就可以直接使用,需要做的只是引用类库和简单配置一下设置就可以了。
  2. 日志的存储非常方便,你可以使用内存存储,也可以使用文件,Email,甚至各种数据库(Access、SqlServer、Oracle、Sqlite、VistaDB)来存储,一旦配置好,日志就会自动记录了。
  3. 上面提到的Email功能其实也可以做得非常强大,比如当页面出错的时候,你可以直接给该用户自动发邮件告诉他“你好,我看到你遇到问题了,我们会立即解决”,这样让用户看起来就非常激动,因为看起来你很在意他。
  4. 错误日志查看非常方便,直接通过/almah.axd就可以访问到了,不需要额外建立aspx文件。
  5. ELMAH记录的信息确实是非常非常详细,以便开发人员可以很快追踪到问题的来源,但同时也有了一个问题,那就是一旦被黑客看到了错误信息,那黑客就可以从这些详细的信息里搜寻到非常有利于入侵的信息,这也是写本篇文章的目的。

嗅探信息

让我们来看看到底能从ELMAH里获取什么样的有用信息。来看一个例子,如图:

通过图片可以看到,我们故意访问了一个/blah.aspx文件,然后ELMAH记录了这个文件未找到的404错误,点击进去我们可以查看到该错误的详细日志信息,如下图:

改图信息页包括了最详细的stack trace信息(包括.Net的内部实现细节),尽管你可以通过自定义错误信息页来引导用户跳转到这个页面,但是ELMAH依然会记录404这样的错误信息。让我们从这个信息页里寻找点什么东西吧,Oh yeah!发现了,看下图:

图片里红框标记的内容是我最感兴趣的,我来解释一下:

  1. AUTH_USER变量显示的是admin,这个是错误发生时候登陆该系统的认证用户名,换句话说,在那个错误发生的时候admin正好登陆到这个系统上了。
  2. .ASPXAUTH cookie,这是使用ASP.NET membership provider的时候系统生成的用于验证用户信息的特殊cookie值,用来存储一个用户的认证状态,也就是说包含你的安全验证信息,我们后面会验证。

查找目标

这时候大家看到本篇文章的关键点了吧,那就是没有把ELMAH日志的错误保护好,以至于所有人都能看到,那如果想入侵一个这样的站点的话,是非常简单的事情,只需要到Google上搜索一下这个关键字:inurl:elmah.axd ASPXAUTH 就行了,看看下图:


Oh, Man,多么可怕的事情了,有上万条包括验证(authentication)信息的记录,使用额外的ASPXAUTH关键字可以将这些符合条件的信息都排在最上面。虽然有些信息是同一个站点上的,但是这么多的信息足以值得我们关注。

在Google引擎里出现这种情况,其实行内人都称之为 Google Dork,这个词语的大概意思就是说这种信息虽然没有禁止Google收录,但是往往是安全或者致命的信息,比如phpMyAdmin初始化的时候,如果没有设置密码,或者管理员没有删除类似的初始化页面,默认页一般是初始化操作,比如Welcome to phpMyAdmin,然后让你创建一个数据库(Create new database),那你如果搜索"Welcome to phpMyAdmin" AND " Create new database"的话,Google会给你一大批记录,但是我觉得作为Google这样的搜索引擎,应该对这些比较有名的系统(比如Wordpress, ELMAH, PhpMyAdmin)的默认的安全信息给予屏蔽,不屏蔽,就叫Google Dork了,或者你可以叫做傻逼Google,百度的信息好像不多哦?嘿嘿。

猎杀目标

到现在为止,其实我们只要有.ASPXAUTH信息基本上就OK了,如果你没有这些信息,那你可以通过一些花招来获取嘛,比如给这个网站的管理员发个信息,或者在他的微博上留个言啥的,让他点击自己网站的一个地址进去,那就有法子咯。

看到上面图里的留言了么,那个default和aspx直接不是逗号,是<,一般如果管理员不注意点进去了,肯定就写错误日志到ELMAH里了,很可能就留下他的cookie了,即便当时管理员没有登录,也可以伪造需要需要都登陆的地址让他点击。

不管怎么说,得到.ASPXAUTH的cookie值还是比较简单的,假如我们得到了如下一个字符串:

.ASPXAUTH=3C886BA2344099338361C921C846EAF4E02F2A88E5E7EDE6838705928F7BB7C6FF46
9D35FEB1532C44B81DB38F200DEE08B6ED0E6121B945C659E932D8CE8B69FFF09E7B59DBE48208
73DBD7891DD6B6BC4A486F35A2F99849017A6C72D9C6A44517D9AFDC731B3A3C55596E79732806

入侵的步骤,其实就很简单了,Chrome和Firefox都有相应的cookie扩展插件可以使用,修改或添加一个cookie就行了,name是.ASPXAUTH, value是上面的一大串字符串,域名就是要工具的网站。

修改以后,再刷新一下,看下图:

Oh yeah,成功了!成功了!这不是汤姆大叔的功劳,不是我一个人的功劳,这只是一个演示站点!

真正的入侵方式可能会有不同的站点少许有些变化,但是一般来说只要是用了ASP.NET Membership provider,并且你能获取这个.ASPXAUTH的话,都应该可以成功。入侵成功以后能做啥,我就不多说了,权限啊,超级账户啊,财务信息啊,点卡啊,积分啊啥的,发挥你的想象力吧。

更多可入侵的途径

ELMAH暴露的信息其实不仅仅是ASP.NET的Session(Cookie)那么简单,通过它有时候我们可以查到很多其它的丰富信息,比如利用大家熟知的SQL注入漏洞,所以如下你发现了如下图这样的信息,那就意味着这个站点可能就有问题了:

或者是SQL批处理语句产生的错误信息,也是很致命的:

或者你搜索和密码相关的关键字,也可以得出有用的信息哦:


甚至你可以搜索一个主流的开源组件名称(如果他又漏洞的话),来看看该网站有没有使用这个组件,有的话,那岂不爽了?

不过,最大的问题不是十分有这些问题,而是黑客可能使用各种各样的尝试,一般ELMAH生产各种各样的日志,然后从这些日志里分析各种有用的信息:物理地址,IP地址,其它的cookie值等等。ELMAH记录的错误信息太具体了!

预防方法

看到这么多利用ELMAH信息攻击的方法,是不是感到很担忧,其实预防的方法很简单,那就是最常用的限制URL访问,由于你使用了membership和role provider,配置web.config阶段禁用URL就非常简单了:

<location path="admin">
<system.web>
<httpHandlers>
<add verb="POST,GET,HEAD" path="elmah.axd"
type
="Elmah.ErrorLogPageFactory, Elmah" />
</httpHandlers>
<authorization>
<allow roles="Admin" />
<deny users="*" />
</authorization>
</system.web>
<system.webServer>
<handlers>
<add name="Elmah" path="elmah.axd" verb="POST,GET,HEAD"
type
="Elmah.ErrorLogPageFactory, Elmah"
preCondition
="integratedMode" />
</handlers>
</system.webServer>
</location>

需要注意的是:需要把ELMAH handler放到admin path里面去,因为如果你不这样做的话,即便限制了admin/elmah.axd,那人家也可以从/foo/elmah.axd这样的任意目录进去,因为你配置的仅仅是elmah.axd。

检验工具

该文原文的作者开发了一个网站http://asafaweb.com/ 用来帮助ASP.NET开发者检测网站安全,你只需要输入互联网能访问的网站地址就可以帮助你检测了,如下图:

如果你的网站有问题的话,它会给出红色的提示,如果没问题会给出绿色的提示:

点击每个红色按钮的时候,会显示这个安全相关的信息以及如果消除这个安全隐患的建议行为:

入侵博客园

我们来检测一下博客园的漏洞信息:

由图可以看出没有这方面的漏洞,看来dudu还是很强大的,牛X! 那咱就只能放弃咯。

总结

一个ELMAH的配置不当导致了这么多问题,大家看完以后,知道有多严重了吧,所以在使用第三方组件的时候一定要详细了解配置情况和安全设置情况。

关于ASP.NET的安全问题,原文的作者写了OWASP Top 10的.net版,还是非常不错的,英文好的博友可以自行参阅以下,年后我会陆续放出中文翻译版,敬请关注。

同步与推荐

本文已同步至目录索引:《大叔手记全集》

大叔手记:旨在记录日常工作中的各种小技巧与资料(包括但不限于技术),如对你有用,请推荐一把,给大叔写作的动力。