web安全学习笔记(18)

记一下第31-32节课的内容。未授权访问漏洞;逻辑漏洞之任意用户密码重置的7种常用姿势

一、web未授权访问漏洞

1.跳转类型

我们这里演示两种跳转方式下,不进行登录,进行跳转的方式及其漏洞:

①Location跳转

②JS弹窗提示跳转

2.未授权访问漏洞的演示和修复

先看第一种方式:

这段代码存在的漏洞在于其使用Location跳转之后,并没有加die,也就是说代码依旧会往下运行。

打开靶场:

在这个登录界面,直接不输入用户名密码,直接点击登录,抓包并发送到repeater:

我们可以看到,实际上,这里虽然Location是cms_login.php,但是下面返回的内容里面,是把后台的HTML代码返回了的。

然后我们访问后台的地址,并抓包:

右键,Do intercept,Response to this request,然后forward,一个个筛选,找返回包,如果抓到的包有请求包,也要进行上述步骤,去抓他的返回包。

找到返回包之后,我们发现有location字段,对于这样的包,我们直接把这里删除掉,然后forward:

这个时候我们再看浏览器,直接进入了后台:

形成这个漏洞的原因是,由于源码header处没有加die,导致程序继续向下运行。

我们再来看第二种方式:

其中alert_href函数内容如下:

这里和上面一样,也是因为没有加die,导致可以进行未授权访问。

下面进行演示。

这里会提示一个"请重新登录"的弹窗,并跳转到登录界面:

与上面类似,我们访问后台,并进行抓包,抓到的第二个包,右键,Do intercept,Response to this request,并发送到repeater。

在点击go之后,我们发现虽然response里有网页源码,但是上面还有跳转的代码(红框框起来的)

我们重新访问后台,并开启拦截,抓取返回包:

找到这个返回包,然后直接把这里的JS代码删除掉,然后forward,这个时候我们就成功访问了后台:

这个漏洞寻找的难点在于,我们要首先找到网站后台功能性文件的名称,才能进行接下来的操作,所以我们可以使用dirsearch来进行扫描,找到我们想要的文件,再通过抓包来看是否返回了后台的HTML内容。

二、逻辑漏洞之任意用户密码重置的7种常用姿势

打开9002.zcbug靶场,到找回密码界面:

我们发现这里有一个洞,是非常明显的,他会直接展示出用户的邮箱和手机号:

我们回退到刚才的界面,开启抓包:

我们把数据包发送到repeater,然后drop掉。

接下来我们看一下源码:

通过查看源码,我们可以知道,这里只允许AJAX_POST才能进入到代码中,进入if语句后,接收post中的参数并转化成一位数组;然后判断username是否填写;紧接着查询会员是否存在,如果不存在的话提示"用户名不存在";然后查询手机号和邮箱是否都不存在,如果都不存在的话,提示"您未绑定手机或邮箱,无法自助找回密码,请联系管理员";然后判断验证码是否填写以及是否填写正确,若错误则给出相应的提示;

这样我们就有了如下的思路:由于代码是顺序运行,我们可以对用户名进行爆破,根据response返回值的不同,来判断用户名是否存在,由于网站存在会直接展示出手机号和邮箱的漏洞,我们就可以通过这样的方式获取到用户的手机号和邮箱。另外,我们可以直接在数据包中将IsVertify参数改为1以外的数字,这样就可以直接绕过880-888行的if判断。

第889行,这里的VerifyData里面存的内容可以查看873行中的代码内容,其实就是将用户的id,mobile和email存在一个一位数组中,我们可以var_dump然后抓包看一下:

890-891行实现的是如果验证成功,给出相应的提示,并跳转到第二步(也就是找回密码的第二步)。

进入到第二步之后,我们选择手机号并验证,同时开启抓包,将抓到的包发送到repeater并drop:

对于数据包中的参数,我们可以查看源码大致了解其含义:

然后我们在网页中点击发送验证码,抓包,发送到repeater,并drop掉:

在第二步中,如果验证码不会失效的话,我们可以通过爆破的方式,直到将其爆破出来:

所以如果没有下面的代码来检查验证码是否失效,就会导致验证码不失效的安全问题:

另外,还要验证一下验证码是否重复使用的问题,否则就可能造成一码多用的安全问题,我们可以使用同一个验证码多次对同一个账号进行密码重置:

下面进行一下总结:

逻辑漏洞之密码重置漏洞

类型:

①验证码不失效

②验证码一码多用

③修改接收的手机或邮箱:指的是在修改密码的验证手机号界面,抓包,并在burp中将他的手机号改为自己的手机号并获取相应的验证码,这样可以直接绕过第二步验证,直接修改密码。

④验证码返回在响应包中

⑤修改返回包绕过JS验证:

这时我们可以先做一次正确的操作,并通过抓包获取返回的正确信息:

然后,我们修改别人的密码时,就可以直接将数据包中报错的内容(下图红框中的部分)替换为正确的内容:

⑥跳过验证环节直接修改密码:

我们直接在浏览器中将step改成3,有可能直接绕过第二步直接进入第三步,但是这种可能性一般都比较小。

⑦未校验被修改的用户是否为找回用户:

如果未校验被修改的用户是否为找回用户,我们可以在第三步中通过修改userid来实现修改任何人的密码:

相关推荐
黑叶白树22 分钟前
简单的签到程序 python笔记
笔记·python
@小博的博客25 分钟前
C++初阶学习第十弹——深入讲解vector的迭代器失效
数据结构·c++·学习
幸运超级加倍~1 小时前
软件设计师-上午题-15 计算机网络(5分)
笔记·计算机网络
南宫生1 小时前
贪心算法习题其四【力扣】【算法学习day.21】
学习·算法·leetcode·链表·贪心算法
易云码2 小时前
信息安全建设方案,网络安全等保测评方案,等保技术解决方案,等保总体实施方案(Word原件)
数据库·物联网·安全·web安全·低代码
懒惰才能让科技进步2 小时前
从零学习大模型(十二)-----基于梯度的重要性剪枝(Gradient-based Pruning)
人工智能·深度学习·学习·算法·chatgpt·transformer·剪枝
love_and_hope2 小时前
Pytorch学习--神经网络--搭建小实战(手撕CIFAR 10 model structure)和 Sequential 的使用
人工智能·pytorch·python·深度学习·学习
Chef_Chen2 小时前
从0开始学习机器学习--Day14--如何优化神经网络的代价函数
神经网络·学习·机器学习
芊寻(嵌入式)2 小时前
C转C++学习笔记--基础知识摘录总结
开发语言·c++·笔记·学习
准橙考典3 小时前
怎么能更好的通过驾考呢?
人工智能·笔记·自动驾驶·汽车·学习方法