挖掘逻辑漏洞

     所有应用程序都是通过逻辑实现各种丰富多彩的功能的,要实现这些功能,必须掌握大量的技巧并进行周密的安排。但是,有很多情况这些功能逻辑存在缺陷,比如程序员的安全意识,比如考虑问题不周全等。

     即使是最简单的web应用程序,每个阶段都会执行大量的逻辑操作,这些逻辑操作代表着一个复杂的攻击面,它从没有消失,只是容易被遗忘。

黑客在挖掘逻辑漏洞时的操作步骤如下。

1.发现网站所提供的功能模块。比如:修改密码、找回密码、修改个人资料等功能。

2.针对具体的功能确定业务流程,详细划分具体步骤,以购物为例介绍,购物流程如下。挑选商品,商品可多选立即购买,在‘立即购买’按钮旁边可以选择购买数量、购买样式等;显示购买信息,在此步骤可以给卖家留言,填写购买数量、使用优惠券、匿名购买、找人代付等;提交订单付款

3.拦截HTTP/HTTPS请求,分析其参数项的含义

4.修改参数值,尝试触发逻辑漏洞;

5.返回第2步骤,对其他功能继续测试。简单地说,黑客挖掘逻辑漏洞有两个重点,就是业务流程和HTTP/HTTPS请求篡改。


下面详细介绍常见的逻辑漏洞

一:绕过授权验证


授权在网络上的意思是指,对特定资源的读写权限。通俗地讲,就是你的权限能让你做什么事情。而验证则表示你是否真的可以对这些资源进行读写。这就好比朋友在网上向你借钱,在转账时,你要求用电话确认一下,是否真的是朋友找你借钱,这就是验证。

授权问题是指访问了没有授权的资源或信息,也叫越权。顾名思义,越权就是超越原本的权限。越权又可以分为两种:水平越权与垂直越权。


(1)水平越权

      水平越权就是相同级别(权限)的用户或者同一角色的不同用户之间,可以越权访问、修改或者删除的非法操作。如果出现此类漏洞,那么将可能会造成大批数据泄露,严重的甚至会造成用户信息被恶意篡改。比如https://www.xxxx.com提供了用户修改资料功能,当访问https://www.xxxx.com/userinfo.action?id=2时,会显示自己的信息,并且可以编辑,代码没有对ID做任何验证,直接接收用户ID,然后根据ID来查询用户信息。当提交URL为:https://www.xxxx.com/userinfo.action?id=3时,就看到了返回ID为3的user信息到页面,这就是水平越权。

(2)垂直越权

     垂直越权是不同级别之间或不同角色之间的越权。垂直越权又被分为向上越权与向下越权。比如,某些网站,像发布文件、删除文章等操作是属于管理员做的事情,假设一个匿名用户也可以做相同的事情,也就叫作向上越权。

      向下越权与向上越权恰恰相反,向下越权是一个高级别用户可以访问一个低级别的用户信息。这样做似乎没错,而且很多网站都是这么做的,包括低级别密码也可以被高级别用户掌控,但这样做可以是完全错误!因为即使权限再低的用户都有他自己的隐私,可能用户为了更方便,会将自己的银行卡号与密码记录在网站中,这些信息都属于用户的隐私。

      后台管理页面一般只允许管理员访问,如果普通用户可以访问,就存在向上越权漏洞。


密码找回逻辑漏洞


      为了防止用户遗忘密码,大多数网站都提供了找回密码功能。常见的找回密码方式有:邮箱找回密码、根据密码保护问题找回密码、根据手机号码找回密码等。虽然这些方式都可以找回密码,但实现方式各不同。无论是哪种密码找回方式,在找回密码时,除了自己的用户密码,如果还能找回其他用户的密码,就存在密码找回漏洞。

      密码找回漏洞在逻辑漏洞中占了较大的比例。测试密码找回漏洞与其他逻辑漏洞的方法相同,其中必经的两个步骤是:熟悉业务流程(密码找回过程)与对流程中的HTTP请求分析。

      如:https://www.xxxx.com提供了密码找回的功能,业务流程为:输入注册邮箱地址--收取邮件--更改密码 。点击跳转到发送成功页面,同时邮箱也接收到了网站发来的重置密码的链接。看起来这些步骤并没有漏洞,但有些东西隐藏在背后,只有抓包才能看到。

      如burp suite抓包显示 GET .......=123456789@qq.com http/1.1   这是接收连接邮箱 。  这时可以猜想,网站是否根据此邮箱发送的重置密码链接。尝试修改参数为另一个邮箱,然后发送,发现果然发来了密码重置邮件,这样一个任意修改密码漏洞就出现了,如果知道其他用户的邮箱,就可以更改他的密码。 


支付逻辑漏洞

     不同的功能分别对应不同的逻辑漏洞,例如密码找回功能就对应任意修改密码的问题,查询功能可能存在越权的问题,但查询功能最多是让你看到了不该看到的资源,却不会造成一些其他的漏洞,如删除某些资源,也就是说,只与查询有关的漏洞。而支付逻辑漏洞与钱有关,那么对应的则是"刷钱","免费购买"等漏洞。

     同样,测试支付逻辑漏洞的重点是对HTTP请求业务流程的分析。在测试支付逻辑漏洞时,也有几个侧重点,就是由用户提交的参数,如:购买数量、商品价格、折扣、运费、商品信息的中转页面、跳转到支付接口时等参数。


接下来介绍几种常见的逻辑支付漏洞场景。

(1)商品数量为负数

     商品数量为负数的情况多数出现在有站内货币(虚拟币)的网站上,当购买一个产品时,算法一般为,购买数量*商品单价=支付金额,但如果购买数量为负数,比如-5,有漏洞的时候金额反而会增加。


(2) 0元购买商品  

      至今,大多数脚本语言都会支持异常处理机制,而异常处理机制有哪些好处呢?比如,我们的程序正在读取数据库,这时突然断网了,程序无法控制网络是否畅通,如果没有正确处理,则会产生致命的错误,可能程序都会因此而崩溃,而有了异常处理机制后,程序员可以将关键性的代码、可能会出现异常的代码块使用异常处理机制处理,即使这块代码真的出了问题,程序也不会因此问题而使整个软件崩溃,这就是异常处理。逻辑漏洞的例子数不胜数,这里关键是看程序员的思维,很多程序都是闭源的,我们看不到其源码,只能盲目地修改HTTP请求参数测试,也就是Fuzz Testing (模糊测试)。

      常见的支付逻辑漏洞场景还有商品价格修改、物流运费修改等。



实例1:电视台网站的Web2.0

     在北加州,某电视台的网站为了Web2.0化,开发了一个新的功能:允许网友们提供当地的天气信息,该信息将在电视新闻中滚动播出。为了防止垃圾信息,网友们提供的信息是经过人工审核后才播出的。但是这套系统在设计时还允许网友们对信息进行编辑。此处存在一个逻辑漏洞:审核通过后的信息,如果被用户重新编辑了,不会再次进行审核,也会直接发送到电视新闻的滚动条中。于是不少人利用这一逻辑漏洞,在电视新闻中发送各种垃圾信息。


实例2:在线竞拍

     某家在线购物网站为了对抗密码暴力破解,规定短时间内帐户登录失败5次,就将锁定帐户一个小时。该网站的业务中,提供了一个在线竞拍的功能,用户可以给喜欢的商品出价,后来者必须给出一个更高的价格。在拍卖时间截止后,商品将为出价高者所得。某黑客在给商品出价后,在网站上继续观察谁出了一个更高的价格,当他发现有人出价更高时,就去恶意登录这个用户的帐户:当登录失败次数达到5次,该帐户就被系统锁定了。订单系统和帐户安全系统是相关联的,当订单系统发现帐户被锁定后,该用户的出价也同时作废。这样,黑客就能以极低的价格,获取他所想竞拍的物品。





2017-04-02  /   

评论