WEBKT

HTTP请求参数篡改漏洞:绕过支付验证的“奇技淫巧”

9 0 0 0

什么是HTTP请求参数篡改?

为什么会出现这种漏洞?

如何进行HTTP请求参数篡改?

1. 抓包工具

2. 浏览器开发者工具

3. 请求重放

4. 参数分析

5. 绕过客户端校验

案例分析

案例一:某电商网站优惠券漏洞

案例二:某支付平台积分抵扣漏洞

案例三:某游戏充值漏洞

如何防范HTTP请求参数篡改漏洞?

1. 服务端校验

2. 数据签名

3. Token机制

4. 最小权限原则

5. 安全编码

总结

“喂,老哥,最近手头紧,有没有啥‘薅羊毛’的法子?”

“薅羊毛?你想干啥?可别乱来啊!”

“放心,就是研究研究,看看能不能‘白嫖’点东西……”

好吧,我知道你又想搞些“歪门邪道”了。今天咱们就来聊聊一种被称为“HTTP请求参数篡改”的漏洞,它能让你在某些情况下绕过支付验证,实现低价甚至免费购买商品。不过先说好,这玩意儿可不是让你用来干坏事的,咱们只是技术交流,技术交流!

什么是HTTP请求参数篡改?

在Web应用程序中,客户端(通常是浏览器)和服务器之间通过HTTP协议进行通信。客户端向服务器发送HTTP请求,服务器根据请求进行处理并返回HTTP响应。请求中通常会包含各种参数,比如你要购买的商品ID、数量、支付方式、优惠券ID等等。这些参数决定了服务器如何处理你的请求。

而HTTP请求参数篡改漏洞,就是指攻击者通过修改HTTP请求中的参数,来欺骗服务器,达到未经授权的目的。在支付场景中,攻击者可能会尝试修改商品价格、数量、优惠券信息等,从而绕过支付验证,实现“薅羊毛”。

为什么会出现这种漏洞?

这种漏洞的出现,通常是因为Web应用程序对用户输入的数据验证不足。开发者可能过于信任客户端提交的数据,没有对请求参数进行严格的校验,导致攻击者可以随意修改参数。

举个栗子:

假设一个电商网站的支付请求如下:

POST /pay HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
productId=123&quantity=1&price=100&couponId=456&payMethod=wechat

这个请求表示用户购买了ID为123的商品,数量为1,价格为100,使用了ID为456的优惠券,支付方式为微信支付。

如果服务器端没有对这些参数进行严格的校验,那么攻击者就可以尝试修改这些参数:

  • 修改商品价格(price):将price=100改为price=1,甚至price=0.01,尝试以极低的价格购买商品。
  • 修改商品数量(quantity):将quantity=1改为quantity=100,尝试大量购买商品,然后再退款(如果退款流程存在漏洞)。
  • 修改优惠券ID(couponId):将couponId=456改为一个不存在或者已过期的优惠券ID,或者改为一个更大额度的优惠券ID,尝试获取更大的优惠。
  • 修改支付方式(payMethod):将payMethod=wechat改为payMethod=creditcard,然后尝试伪造信用卡信息。

如果服务器端没有对这些修改进行校验,那么攻击者就可能成功绕过支付验证。

如何进行HTTP请求参数篡改?

要进行HTTP请求参数篡改,你需要一些工具和技巧。

1. 抓包工具

首先,你需要一个抓包工具,比如Burp Suite、Fiddler、Charles等。这些工具可以拦截客户端和服务器之间的HTTP请求和响应,让你能够查看和修改请求中的参数。

我个人比较喜欢用Burp Suite,因为它功能强大,而且有很多插件可以扩展功能。Fiddler和Charles也不错,看你个人喜好吧。

2. 浏览器开发者工具

现代浏览器都内置了开发者工具,你可以通过按F12键或者右键点击“检查”来打开。开发者工具可以让你查看网页的源代码、网络请求、Cookie等信息,也可以用来修改请求参数。

3. 请求重放

抓包工具和浏览器开发者工具都可以重放HTTP请求。你可以先正常发起一个支付请求,然后用抓包工具拦截这个请求,修改其中的参数,再重放这个请求,看看服务器会如何响应。

4. 参数分析

在修改参数之前,你需要先分析一下请求中的参数,了解每个参数的含义和作用。你可以通过查看网页源代码、抓包分析、猜测等方式来分析参数。

5. 绕过客户端校验

有些Web应用程序会在客户端进行一些简单的校验,比如检查商品价格是否为数字、优惠券ID是否为空等。你需要想办法绕过这些客户端校验。你可以通过修改JavaScript代码、禁用JavaScript、使用抓包工具等方式来绕过。

案例分析

下面我们来看几个真实的案例,看看HTTP请求参数篡改漏洞是如何被利用的。

案例一:某电商网站优惠券漏洞

某电商网站有一个优惠券系统,用户可以在结算时使用优惠券来抵扣一部分金额。攻击者发现,在提交订单时,HTTP请求中包含一个couponId参数,表示用户使用的优惠券ID。攻击者尝试将couponId修改为一个不存在的优惠券ID,发现服务器并没有进行校验,直接返回了“优惠券不存在”的错误信息。但是,攻击者发现,如果将couponId修改为一个已过期的优惠券ID,服务器竟然返回了“优惠券已过期”的错误信息,但是订单金额却减少了!这意味着服务器虽然提示优惠券已过期,但实际上还是应用了优惠券的折扣。

案例二:某支付平台积分抵扣漏洞

某支付平台有一个积分抵扣功能,用户可以使用积分来抵扣一部分支付金额。攻击者发现,在支付请求中,有一个points参数,表示用户使用的积分数量。攻击者尝试将points修改为一个非常大的值,比如99999999,发现服务器并没有进行校验,直接返回了“支付成功”的信息。这意味着攻击者可以使用任意数量的积分来抵扣支付金额,实现免费购买商品。

案例三:某游戏充值漏洞

某游戏有一个充值系统,玩家可以通过购买游戏币来进行游戏。攻击者发现,在充值请求中,有一个amount参数,表示玩家充值的金额。攻击者尝试将amount修改为一个负数,比如-100,发现服务器并没有进行校验,直接返回了“充值成功”的信息,并且玩家的游戏币数量竟然增加了!这意味着攻击者可以通过充值负数金额来刷游戏币。

如何防范HTTP请求参数篡改漏洞?

要防范HTTP请求参数篡改漏洞,Web应用程序的开发者需要采取以下措施:

1. 服务端校验

永远不要信任客户端提交的数据!对所有来自客户端的请求参数进行严格的校验,包括数据类型、长度、范围、格式等。确保用户提交的数据符合预期,防止攻击者篡改参数。

2. 数据签名

对关键的请求参数进行签名。服务器端生成一个签名,将签名和参数一起发送给客户端。客户端在提交请求时,需要将签名和参数一起提交。服务器端收到请求后,会验证签名是否正确,如果签名不正确,则拒绝请求。这样可以防止攻击者篡改参数,因为攻击者无法生成正确的签名。

3. Token机制

使用Token机制来验证用户身份。服务器端生成一个Token,将Token发送给客户端。客户端在后续的请求中都需要携带这个Token。服务器端收到请求后,会验证Token是否有效,如果Token无效,则拒绝请求。这样可以防止攻击者伪造用户身份。

4. 最小权限原则

在设计Web应用程序时,遵循最小权限原则。只授予用户必要的权限,不要授予用户过多的权限。这样即使攻击者成功篡改了参数,也无法造成太大的危害。

5. 安全编码

使用安全的编码方式,避免出现SQL注入、跨站脚本攻击(XSS)等其他安全漏洞。这些漏洞可能会被攻击者利用来进行HTTP请求参数篡改。

###6. 定期安全测试

定期对Web应用程序进行安全测试,包括渗透测试、代码审计等。及时发现和修复安全漏洞,防止被攻击者利用。

总结

HTTP请求参数篡改漏洞是一种常见的Web安全漏洞,攻击者可以通过修改HTTP请求中的参数来绕过支付验证,实现低价甚至免费购买商品。Web应用程序的开发者需要对用户输入的数据进行严格的校验,并采取其他安全措施来防范这种漏洞。

记住,技术本身是中立的,关键在于如何使用它。咱们可以研究漏洞,但千万不要利用漏洞去做违法的事情哦!

“懂了,老哥!我这就去研究研究,看看能不能‘薅’到点啥……”

“喂喂喂,我可不是让你去干坏事啊!……”

技术宅老王 HTTP请求参数篡改支付安全

评论点评

打赏赞助
sponsor

感谢您的支持让我们更好的前行

分享

QRcode

https://www.webkt.com/article/8578