业务逻辑漏洞挖掘-某网站绕过下载付费机制进行下载文件

某网站绕过下载付费机制进行下载文件

学习漏洞也学了一段时间了,对于一些常见的漏洞也就在靶场上练习。靶场毕竟是靶场,挖漏洞还是得尝试在一些真实的网站进行练习。于是,不多说了,虚拟机启动,burpsuite打开,谷歌搜索启动。
在这里插入图片描述
就先看看能不能找个业务逻辑漏洞吧,毕竟这类漏洞在一些小型网站还是比较可能出现的。使用googlehack的搜索方式,随便发现了一个小网站。
在这里插入图片描述
这个网站一看就做的很简陋,应该会有漏洞吧(应该吧),这么想着,就打开一些网页看看。这网站就尼玛离谱,好多html文件,尝试找这网站的后台登录管理系统一下也没找到,常见的/admin或者/admin_login.php也试了一下。看来弱口令漏洞可能有点难找了。
要不就看看有没有支付漏洞吧,毕竟这网站有些东西得付费才能下载。
在这里插入图片描述
随便点开一个需要付费下载的讲座页面,一看这个讲座提供者是web,那么这个网站的管理员可能就是web了,感觉这个信息对找这个网站的后台或者是找到后台尝试弱口令爆破也比较有用,不过先看看有没有支付漏洞再说。不过这个讲座上传到网站的时间竟然是2020年10月19日,原来这个网站竟然现在还在运营吗哈哈哈。
在这里插入图片描述
点一下购买下载,这里提示余额不足不能购买讲座,那么这里可能是有个前端的验证,如果绕过这个验证,是不是就能直接下载呢?
在这里插入图片描述

使用burpsuite抓下包,这个POST数据包里的cookie是啥啊那么一大串,不过后面几个差不多认识,应该就是用户名和密码信息,还有就是session信息之类的。之前那串UM_distinctid之类的东西查了一下,貌似是百度的脚本相关的东西,这个网站难道用了百度的什么服务?
POST数据包中的请求信息里有个cmd参数,cmd这个参数应该对能否购买下载有重要的作用。这个前端的验证应该是已经完成了,不过如果是购买成功,这个cmd的值是多少呢,毕竟这个cmd的值没有单纯的用数字或者一些简单常见的英文表示。把这个数据包的cmd值改成act_up试试吧。
在这里插入图片描述
看来不是想的那么简单呀,那咋办呢。看来得看看这个前端的代码了。
在这里插入图片描述

哟,看看发现什么,JS脚本,这个ui_script的JS文件里面应该有啥东西,点一下看看能不能看。
在这里插入图片描述
找了下发现了这个网站购买下载服务的代码。比较明显的,看来当cmd的值为act_down2的时候,就可以下载了。
在这里插入图片描述
使用burpsuite抓取数据包,将cmd的值改为act_down2。
在这里插入图片描述
发现可以下载了哈哈哈。当然我也没有去下载,毕竟只是学习挖掘漏洞,这个网站也没有授权测试,就碰碰不进去哈哈哈。

挖到真实的web网站漏洞还是比较兴奋的,不过漏洞的种类繁多,而且有些漏洞还比较复杂。好好学习,天天向上。

  • 8
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,我会尽力为您解答。首先,让我们来了解一下凑硬币问题。 在凑硬币问题中,我们需要找到最少的硬币数来凑成给定的金额。例如,如果我们需要凑成 11 元,而有 1 元、2 元、5 元三种不同面值的硬币可供使用,那么最少需要使用 3 枚硬币,即 5 元、5 元和 1 元。 下面是一种使用动态规划解决凑硬币问题的方法: 1. 创建一个长度为 amount+1 的数组 dp,其中 dp[i] 表示凑成面值为 i 元所需的最少硬币数。 2. 初始化 dp[0] 为 0,其余元素初始化为一个较大的数(例如 amount+1),表示当前面值无法被凑成。 3. 遍历硬币数组 coins,对于每个硬币,遍历 dp 数组,更新 dp[j] 的值为 dp[j-coins[i]]+1,其中 j>=coins[i],表示当前面值可以被凑成。 4. 最终 dp[amount] 就是凑成 amount 元所需的最少硬币数,如果 dp[amount]>amount,则表示无法凑成给定金额。 下面是使用 JavaScript 实现该算法的代码: ```javascript function coinChange(coins, amount) { const dp = new Array(amount + 1).fill(amount + 1); dp[0] = 0; for (let i = 0; i < coins.length; i++) { for (let j = coins[i]; j <= amount; j++) { dp[j] = Math.min(dp[j], dp[j - coins[i]] + 1); } } return dp[amount] > amount ? -1 : dp[amount]; } ``` 这个函数接受两个参数,一个是硬币数组 coins,另一个是需要凑成的金额 amount。最终返回凑成 amount 元所需的最少硬币数,如果无法凑成则返回 -1。 例如,若 coins = [1, 2, 5],amount = 11,则 coinChange(coins, amount) 的返回值为 3,表示凑成 11 元最少需要 3 枚硬币。 希望这个简单的解释和代码能够帮到您,如果您还有其他问题,请随时问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值