免责申明
本文章仅用于信息安全防御技术分享,因用于其他用途而产生不良后果,作者不承担任何法律责任,请严格遵循中华人民共和国相关法律法规,禁止做一切违法犯罪行为。
一、前言
最近搞代码审计培训许多学员都出货了,我们来看看其中一个学员的一个案例:某项目的一个权限绕过漏洞。
二、审计漏洞权限绕过
先来查看一下相关代码,可以很明显的看出来这个是基于ThinkPHP来进行开发的一个源码
针对TP开发的网站,我们知道是运行在Public目录下的,并且我们可以看出来这套源码的入口文件为index.php文件,我们先来分析一下其中的网站登录逻辑。
这里网站为我自己的VPS,我们可以根据路径来找到对应的文件。
可以看到就是上图当中对应的方法,其中要根据TP框架的路由来进行寻找
TP的路由一般为http://网址/index.php/分组/控制器/操作方法
我们可以看到接受用户传递过来的username以及password参数,并且进行调用了UserModel类当中的login方法,跟入login方法来查看。
在这里进行将username进行SQL查询,查询出来的password与用户输入的sha1加密之后的password密码进行验证,成功的话返回对应信息,否则无法登录,我们回到刚才的代码中。
可以看到传递到了方法createToken方法当中,继续跟入查看。
可以看到对应进行了JWT处理,并且JWT当中的信息也只有我们的username信息,所以我们如果拿到了对应的JWT密钥是可以进行任意用户登录的,继续跟入。
我们发现了jwt硬编码的漏洞,那么利用这个jwt是可以进行任意用户伪造的,我们先来正常登录对应的超级管理员查看对应的jwt信息。
ok看样子我们是可以伪造的,接下来来进行漏洞利用。
三、漏洞利用
打开对应的目标网站(我自己的服务器)
随便进行输入,并且抓包修改返回包的JWT即可(因为超级管理员是默认创建的,并非install进行创建,所以默认都是存在这个管理员的),本地拿到对应的jwt然后进行替换目标的jwt即可。
直接进行替换
OK成功登录!
四、完结!
原文始发于微信公众号(进击安全):一次针对PHP项目的代码审计
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论