尝试访问

http://mdsec.net/shop/28/

现在,虽然price字段并未显示在屏幕上,用户无法对其进行编辑,但这只是因为应用程序指示浏览器隐藏该字段而已。因为在客户端进行的一切操作最终将由用户控制,用户需要编辑价 格时就可解除这个限制。

要实现编辑操作,一种方法是保存HTML页面的源代码,编辑字段的值,然后将源代码重新载入浏览器,并单击Buy按钮。但是,使用拦截代理服务器(intercepting proxy)对数据进行动态修改更加简单方便。

在攻击Web应用程序时,拦截代理服务器极其有用,它是一种不可或缺的工具。我们可以找到大量拦截代理服务器工具,本书使用其中一位作者编写的Burp Proxy工具。

代理服务器位于Web浏览器和目标应用程序之间。它拦截应用程序发布和收到的每一个HTTP或HTTPS请求和响应。用户可通过它拦截任何消息,对其进行检查或修改。如果之前从未用过拦截代理服务器,请参阅第20章了解有关拦截代理服务器的运行机制,如何配置和使用拦截代理服务器的详细信息。

安装拦截代理服务器并进行相应配置后就可以拦截提交表单的请求,随意修改price字段的值,如图5-2所示。

img108

图5-2 使用拦截代理服务器修改隐藏表单字段的值

如果应用程序根据表单提交的价格处理交易,就能够以选择的任何价格购买该产品。

img004  提示  如果发现应用程序易于受到这种攻击,看看是否可以提交一个负数价格值。有些时候,应用程序居然接受使用负数价格值的交易。攻击者不仅收到订购的货物,信用卡还会收到退款——一种两面得利的情况(如果出现这种情况的话)。

5.1.2 HTTP cookie

HTTP cookie是通过客户端传送数据的另一种常用机制。和隐藏表单字段一样,HTTP cookie一般并不显示在屏幕上,也不可由用户直接修改。当然,用户可使用拦截代理服务器,通过更改设置cookie的服务器响应或随后发布这些cookie的客户端请求,对HTTP cookie进行修改。

下面以前面的示例(稍作修改)为例进行说明。消费者登录应用程序后,收到以下响应:

img109a

DiscountAgreed cookie是依靠客户端控件(基于cookie一般无法被修改这个事实)保护通过客户端传送的数据的典型示例。如果应用程序信任DiscountAgreed cookie返回给服务器的值,那么消费者修改这个值就可获得任意折扣。例如:

img109b