未授权访问,在平时的测试中,应该是比较容易的一个漏洞,只需要通过御剑等等软件来进行扫描,就可能得到一个未授权访问漏洞。
但是,它是什么原因造成的,请听我娓(xia)娓(bi)道(bi)来。
以下所有代码都是我自己写的,可能有不美观,代码错误等等问题,希望大家可以指正。
漏洞讲解
如下,这是一个登陆框,login.php
在平时的测试中,我们往往可以去尝试直接访问某些关键的文件,如果它的验证代码有问题,我们将可以直接访问到正常情况无法访问的内容
这里我们直接访问index.php页面
将直接可以访问到我们只有在登陆情况下,才能访问到的内容
接下来,我们看一下代码是如何写的
PS:在正常的项目中,可能不是这样写的,但是这里为了方便大家理解,就将所有代码都简写了,原理都是一样的
login.php
logins.php
index.php
PS:包含的fun.php为数据库操作函数
相信大家都能看懂这部分代码
login.php为登陆页面的代码,仅有一个form表单,在这里我们可以看到,它是将内容都传给了logins.php
logins.php内容为接收传过来的账号密码,先判断账号密码是否都填写了,然后带入数据库进行查询,如果存在,设置session并返回登陆成功,并跳转到session页面;否则将返回登陆失败。
接下来,主要是关注index.php文件的代码,这里才是我们造成未授权访问的最主要的部分
这里我将查询时的uid默认设置为1,方便我们操作
这里可以很明显的知道,它没有进行任何的检测,直接进行了sql查询,然后就可以在页面中查看到内容了
简单修复
因为在登陆成功的时候,设置了session,我们这里就可以直接在开头加一个判断session值的,如果session不存在,就直接跳出,不进行sql查询。
修改后代码如下
此时的效果为
就可以防止了未授权访问
拓展
这里还是要提一下,在写代码的时候一定要判断session值,而不能判断cookie,众所周知cookie值是存放在客户端,是可以伪造的。
经典案例,请阅读--》传销站经典案例之篡改cookie进后台
文章首发公众号:无心的梦呓(wuxinmengyi)
这是一个记录红队学习、信安笔记,个人成长的公众号
扫码关注即可