Ruby On Rails find_by_* SQL Injection (CVE-2012-6496)

  • A+
所属分类:WooYun-Zone

详情分析链接在此:http://blog.phusion.nl/2013/01/03/rails-sql-injection-vulnerability-hold-your-horses-here-are-the-facts/

RoR,著名的Web开发框架,众所周知的Github,javaeye,csdn部分站点都是使用这个框架开发的。注意这个漏洞是出现在框架的Active Record模式操作数据库模块中的,因此是全框架都中招。

主要攻击模式是,当程序中用到User.find_by_something(params[:id])这种模式的代码时(实际上所有数据库查询操作基本都是这模式的),如果使用类似的代码就会产生注入:

User.find_by_name("kotori", :select => "id, name FROM users; DROP TABLE users; --")

而这个:select是可以和前面的字符串通过一个字典传入的。因此这个就变得可利用了。

但是利用场景很有限,由于需要你带入的字典key也就是:select必须是symbol格式的,而不像是PHP之类都是string。所以必须要找个有序列化字符串可以注入,且反序列化后有被find_by_xxx查询的场景(具体可以看文中给出的EXP链接。思路很yd,我很喜欢。利用的是RoR session会有这个过程。)。因为只有这样,你注入的代码才能被Ruby解释为他的Object,然后才能把你的string的key变成symbol的。

所以,虽然这个漏洞贴出来的时候名头很大,全版本RoR收到影响,但实际上,估计也就开源程序可以被找到类似的苛刻场景吧。

和php unserialize漏洞有异曲同工之妙,不是么? Ruby On Rails find_by_* SQL Injection (CVE-2012-6496)

  1. 1#

    qiaoy (一顿黄金有几重?) | 2013-01-05 13:47

    如此有营养的帖怎么没人叫好?

    谢谢lz。

  2. 2#

    xsser | 2013-01-05 15:40

    在丽江叫好

  3. 3#

    xsser | 2013-01-05 15:41

    最近的众测也许可以用

  4. 4#

    GaRY | 2013-01-05 16:14

    @xsser 我操又去丽江,艳遇多不

  5. 5#

    蟋蟀哥哥 (̷ͣ̑̆ͯ̆̋͋̒ͩ͊̋̇̒ͦ̿̐͞҉̷̻̖͎̦̼) | 2013-01-05 16:17

    @GaRY 他是过去吃方小顿的,不是为了艳遇的。不过他悄悄告诉,在丽江有个男子爱上了他。

  6. 6#

    shine | 2013-01-05 17:06

    @xsser  + Phusion Passenger 3.0.17 (mod_rails/mod_rack) 还真是的!有时间测测!