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来实现修改任何人的密码:

相关推荐
自身就是太阳2 分钟前
如何使用Spring框架来实现一个基于SSM(Spring、SpringMVC、MyBatis)的整合项目
java·开发语言·后端·学习·spring·mybatis
Victory_orsh3 分钟前
本科生如何学习机器学习
学习·机器学习
yxg2012_04_065 分钟前
聪明办法学 Python 第二版.1.学习安排
开发语言·python·学习
IOT.FIVE.NO.11 小时前
Linux实操笔记2 Ubuntu安装Nginx的不同方法
linux·笔记·ubuntu
不染_是非1 小时前
Django学习实战篇四(适合略有基础的新手小白学习)(从0开发项目)
数据库·后端·学习·django·web
Niu_brave1 小时前
Python基础知识学习(2)
开发语言·python·学习
akbar&1 小时前
计算机三级 - 数据库技术 - 第十三章 大规模数据库架构 笔记
数据库·笔记
sixteenyy2 小时前
学习笔记(一)
笔记·学习
计算机学姐3 小时前
基于python+django+vue的在线学习资源推送系统
开发语言·vue.js·python·学习·django·pip·web3.py
吃什么芹菜卷3 小时前
2024.9最新:CUDA安装,pytorch库安装
人工智能·pytorch·笔记·python·深度学习