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 分钟前
Linux笔记---协议定制与序列化/反序列化
网络·笔记
草莓熊Lotso29 分钟前
【C++】递归与迭代:两种编程范式的对比与实践
c语言·开发语言·c++·经验分享·笔记·其他
我爱挣钱我也要早睡!3 小时前
Java 复习笔记
java·开发语言·笔记
知识分享小能手6 小时前
React学习教程,从入门到精通, React 属性(Props)语法知识点与案例详解(14)
前端·javascript·vue.js·学习·react.js·vue·react
汇能感知8 小时前
摄像头模块在运动相机中的特殊应用
经验分享·笔记·科技
阿巴Jun8 小时前
【数学】线性代数知识点总结
笔记·线性代数·矩阵
茯苓gao9 小时前
STM32G4 速度环开环,电流环闭环 IF模式建模
笔记·stm32·单片机·嵌入式硬件·学习
是誰萆微了承諾9 小时前
【golang学习笔记 gin 】1.2 redis 的使用
笔记·学习·golang
DKPT10 小时前
Java内存区域与内存溢出
java·开发语言·jvm·笔记·学习
aaaweiaaaaaa10 小时前
HTML和CSS学习
前端·css·学习·html