如何从代码层防御10大安全威胁中的 Xpath Injection?

普遍性和可检测性:

Xpath 注入是 OWASP TOP10 安全威胁中 A1 Injection 中的一种,注入漏洞发生在应用程序将不可信的数据发送到解释器时。虽然注入漏洞很容易通过审查代码发现,但是却不容易在测试中发现。

影响严重:

注入能导致数据丢失或数据破坏、缺乏可审计性或者是拒绝服务。注入漏洞有时候甚至能导致完全主机接管。

从代码层次如何防御:

首先我们先来看一下在 Java 中引用 xpath 需要用的 lib 库:

  • javax.xml.xpath
  • org.jdom.xpath
  • org.jdom2.xpath等

那么xpath注入是从哪些途径进入到代码逻辑的呢?大家仔细思考一下无外乎三个途径:cookieheaderrequest parameters/input。如果我们能对这三个注入源头进行严格得入参检查是否就能够防御绝大部分的注入攻击了呢?

答案是可以防御大部分注入攻击,下面我们就一起来看一下如何进行有效得进行入参检查: 
我们将入参都转化为 Map 对象,Map<K, Collection<V>> asMap();

然后通过CheckMap(finnal Map<String, String> params)方法,检查入参是否合法。

下面我们来实现这个CheckMap内部方法:

1. 通过遍历检查Map中key得合法性

    for (final String key : params.keySet()) {
        if (this.checkString(key)) {
            return true;
        }

2.检查每一个 key 对应得 value 得合法性:

  final Collection<String> coll = (Collection<String>)params.get((Object)key);
        for (final String input : coll) {
            if (this.checkString(input)) {
                return true;
            }
        }

做完这些就是细节方面得检测了,具体得就是 checkString 如何实现。笔者暂时能想到认为一个入参是 xpath 得检测条件大概有以下几点:

private boolean checkString(final String input) {
    return null != input && input.length() > 1 && (this.parser.IsOutBoundary(input) || (-1 != input.indexOf(39) && (this.parser.IsOutBoundary(input.replace("'", "''")) || this.parser.IsOutBoundary(input.replace("'", "\\'")))) || (-1 != input.indexOf(34) && (this.parser.IsOutBoundary(input.replace("\"", "\"\"")) || this.parser.IsOutBoundary(input.replace("\"", "\\\"")))) || this.parser.IsQuoteUnbalanced(input));
}

通过查 ASCII 码表我们知道39对应“'”,34对应“"”;所以有了检测条件

-1!=input.indexOf(39)&&(this.parser.IsOutBoundary(input.replace("'","''")
-1!=input.indexOf(34)&& this.parser.IsOutBoundary(input.replace("\"", "\"\""))

上述检测条件中用到两个关键方法IsOutBoundaryIsQuoteUnbalance


public boolean IsOutBoundary(String input) {
    int offset = 0;
    if (null == input || input.length() <= 1) {
        return false;
    }
    input = input.toLowerCase();
    while (true) {
        final int x = this.getRawValue().indexOf(input, offset);
        final int y = x + input.length();
        if (-1 == x) {
            return false;
        }
        final int ceil = this.getCeiling(this.boundaries, x + 1);
        if (-1 != ceil && ceil < y) {
            return true;
        }
        offset = y;
    }
}

public boolean IsQuoteUnbalanced(String input) {
    input = input.toLowerCase();
    return this.getRawValue().contains(input) && this.stack.size() > 0 && input.indexOf(this.stack.peek()) != -1;
}

 public String getRawValue() {
        return this.input;
    }

 private int getCeiling(final List<Integer> boundaries, final int value) {
    for (final int x : boundaries) {
        if (x >= value) {
            return x;
        }
    }
    return -1;
}
漏洞攻击示例

看完代码是如何检查得我们来一个真真正正 Xpath 注入的示例;来检验一下我们代码是都有效。

WebGoat 是 OWASP 推出得一款开源的含有大量漏洞攻击的应用,在 Github 上可以直接搜到源码。

我们找到 Xpath Injection 得 lession,如下图:

hints提示我们攻击的入参:

Try username: Smith' or 1=1 or 'a'='a and a password: anything

点击 Submit 之后神奇得事情出现了!

面对这样得一种攻击那么我们该如何防御呢?如果对代码感兴趣得同学可以把 WebGoat 得源码 down 下来;然后将上面得入参检测得方法封装一下嵌入到 WebGoat 得源码中,然后我们再攻击一下,那么接下来会发生什么样的事情呢?

Xpath 查询失败了,并没有返回任何结果,攻击被拦截之后,前端页面没有渲染任何东西。由此可见入参检查在注入类得漏洞防御中可以起到立竿见影得作用。

Xpath 查询失败了,并没有返回任何结果,攻击被拦截之后,前端页面没有渲染任何东西。由此可见入参检查在注入类得漏洞防御中可以起到立竿见影得作用。

参考文献:

[1] OWASP TOP10-2013 release

[2] ASCII(wikipedia)

[3] WebGoat

本文系 OneAPM 架构师吕龙涛原创文章。如今,多样化的攻击手段层出不穷,传统安全解决方案越来越难以应对网络安全攻击。OneASP 自适应安全平台集成了预测、预防、检测和响应的能力,为您提供精准、持续、可视化的安全防护。想阅读更多技术文章,请访问 OneAPM 官方技术博客

本文转自 OneAPM 官方博客

时间: 2024-11-08 19:13:50

如何从代码层防御10大安全威胁中的 Xpath Injection?的相关文章

杀毒软件也许只能防御10%的网络威胁

在CBC.ca的采访中诸多安全专家都赞同"反病毒软件已无法有效防护当代网络威胁"这个观点.网络犯罪目前更倾向于社会工程学和钓鱼方式,而不再是设法绕过反病毒软件. 杀毒软件也许只能防御10%的网络威胁 加拿大大学教授Mohammad Mannan在采访中坦言反病毒软件和家长控制软件的糟糕程度令他惊讶,其中不乏用户认知非常高的品牌.这些应用大部分会绕过浏览器的安全方案来扫描用户的加密网络流量,此外为了再次确保连接安全,这些应用会使用自家的配置来替代浏览器的安全方案.这种做法是非常糟糕的,他

Black Hat 2017:需要当心的10大安全威胁

Black Hat大会每年都会汇聚业界最优秀的安全研究人员,展示新的威胁研究和漏洞发现,这样自然而言就能洞察到今年最大的.致命性的新攻击.今年的威胁研究名单中,包括在一些渠道最常用的软硬件中发现的安全漏洞,包括苹果设备.容器.Office 365.Windows 10.VMware.安卓移动设备等等.下面就让我们来看看今年Black Hat大会上最受关注的10个安全威胁. 苹果 今年Black Hat大会上有几个议题都提到了对苹果设备和苹果操作系统的安全威胁.Objective-See创始人Pa

2016黑帽大会:值得关注的10大安全威胁

谈谈安全威胁 本周在拉斯维加斯举行的一年一度黑帽(Black Hat)大会上,有数千名黑客和安全专家现身,揭示了如今我们在安全领域面临的最新.最大的安全威胁.在整个星期的介绍和演讲中,安全研究人员和黑客们展示了在攻击和漏洞方面的发现,揭示了在连接设备.商业基础设施中的漏洞,等等. 下面就让我们来看看今年黑帽大会值得关注点的10个安全威胁. 软件定义网络 软件定义网络(SDN)带来了灵活性和控制力等好处,但是也带来了新的威胁,Changhoon Yoon和Seungsoo Lee这样表示.通过攻击

2016 黑帽大会:值得关注的 10 大安全威胁

谈谈安全威胁 本周在拉斯维加斯举行的一年一度黑帽(Black Hat)大会上,有数千名黑客和安全专家现身,揭示了如今我们在安全领域面临的最新.最大的安全威胁.在整个星期的介绍和演讲中,安全研究人员和黑客们展 示了在攻击和漏洞方面的发现,揭示了在连接设备.商业基础设施中的漏洞,等等. 下面就让我们来看看今年黑帽大会值得关注点的10个安全威胁. 软件定义网络 软件定义网络(SDN)带来了灵活性和控制力等好处,但是也带来了新的威胁,Changhoon Yoon和Seungsoo Lee这样表示.通过攻

不只是提醒:2009年10大安全威胁

一点不夸张,稍不留神,你就有可能成为电脑犯罪的受害者.由于利益的诱惑,越来越多的不法分子通过制作病毒软件入侵普通用户的电脑系统,来窃取有价值的数据和其它信息,安全环境正在经受着前所未有的威胁.我们对于2009年安全领域可能会面临的威胁作了一个估计,下面就逐一简要介绍一下. 1.木马/信息窃取键盘记录器/快速蔓延的僵尸网络 攻击者常常通过在伪造的中奖信息中植入窃取程序和键盘记录器,网络用户一旦阅读这些伪造信息,窃取程序和键盘记录器就会神不知鬼不觉地被自动安装到用户的系统中,从而随意窃取用户的敏感和

安全专家:杀毒软件只能防御10%的网络威胁

在CBC.ca的采访中诸多安全专家都赞同"反病毒软件已无法有效防护当代网络威胁"这个观点.网络犯罪目前更倾向于社会工程学和钓鱼方式,而不再是设法绕过反病毒软件. 加拿大大学教授Mohammad Mannan在采访中坦言反病毒软件和家长控制软件的糟糕程度令他惊讶,其中不乏用户认知非常高的品牌.这些应用大部分会绕过浏览器的安全方案来扫描用户的加密网络流量,此外为了再次确保连接安全,这些应用会使用自家的配置来替代浏览器的安全方案.这种做法是非常糟糕的,他甚至坦言部分反病毒软件完全没有做到&q

网站入侵10大隐患 看网站为何如此脆弱

中介交易 SEO诊断 淘宝客 云主机 技术大厅 网络安全如今一直是客户最头疼的问题,个人数据泄密的事件屡见不鲜.是什么造成了这一切? 安全咨询专家Joel Snyder说,"很多网站站长忽略了这样一个问题,在网站开发小组里,你寻找的首要目标是那些很有创意并且能够构建有创意的网站的人才,可能最后考虑的问题才是安全问题." 我们不难看出,如今在网络应用程序没有一种机制区分或验证系统来保证不同部分的数据移动.网站开发的技术人员都还没有对安全问题引起足够的重视. Forrester公司的高级安

网站为何如此脆弱 网站入侵10大隐患

中介交易 SEO诊断 淘宝客 云主机 技术大厅 如今网络安全是一直在客户最头疼的问题,个人数据泄密的事件屡见不鲜.是什么造成了这一切? 安全咨询专家Joel Snyder说,"很多网站站长忽略了这样一个问题,在网站开发小组里,你寻找的首要目标是那些很有创意并且能够构建有创意的网站的人才,可能最后考虑的问题才是安全问题." 我们不难看出,如今在网络应用程序没有一种机制区分或验证系统来保证不同部分的数据移动.网站开发的技术人员都还没有对安全问题引起足够的重视. Forrester公司的高级

黑莓登榜首一周10大畅销手机销量排名

腾讯数码讯如果你想了解最新发售的热门手机的销售情况,那么来自英国手机市场的动态无疑是个最好的选择.虽然从手机市场规模来说,英国与俄罗斯和德国还有一定的差距.但这里却云集了如沃达丰.Orange.O2.T-Mobile及Carphone Warehouse等著名电信运营商及手机销售连锁巨头.同时全球主要的手机品牌,包括诺基亚.索尼爱立信.三星.摩托罗拉和LG等也都会在这里率先发售自己的新款手机.因而,来自竞争激烈的英国市场的手机销售情况,不仅可以很好的体现当前欧洲人对手机品牌及功能的喜好程度,而且