这次的漏洞是出在默认的插件小说插件里,虽然有这个文件但是并没有安装,如果不安装的话,是没有这个表段的,所以说我们需要安装一下这个插件。然后查看数据库是不是多了一个表名为,XXXX_bookfeedback。
详细安装教程:
这里我就不演示安装了,我们开始看代码
漏洞文件:/plus/bookfeedback.php
首先看这个函数,这个函数的主要作用就是获取书的内容,如书名等,此处不存在注入漏洞
256-266行
这里是个引用回复的地方 首先进入这个If判断需要让$comtype的值为reply,这个很简单 Get 或者 Post数组中有一个键名是comtype内容是reply即可,然后下面是一个SQL语句,$fid此处也不存在注入漏洞,然后赋值,把表段arctitle字段的值赋值给$arctitle,然后aid字段赋值给$aid $msg进行了一下拼接,然后下方过滤了一下。这里其实是存在一个二次注入漏洞的,因为$row['arctitle']取出是没有做任何过滤的,直接取出来,aid是数字型 根本带不进去单引号。因为plus目录默认转义是addslashes()函数,导致单引号可以直接写入数据库,然后在取出的时候并没有做过滤导致单引号截断。但是这个地方是设置书名的地方,也就是说这里是书的名字,只能在后台设置,难道说这是一个毫无作用的后台注入? 不存在的,在引用回复的上面还有一段代码,如下。
239-254行
老样子,Get 或者 Post数组中有一个键名是comtype内容是comments即可,然后就是一个没有任何用处的过滤,为什么没有用我们都知道,当然即使有用也不影响我们二次注入,上来addslashes()函数转义了$arcRow['arctitle']并赋值给$arctitle然后又给$arctitle赋值$arcRow['arctitle']所以说没有任何用,然后就是一个判断 判断$msg是否为0,这个也是用默认变量注册进入循环,这个地方的SQL语句其实根本就没有用到$arctitle变量,这是一个INSERT INTO语句,给$@__bookfeedback表写入内容的,这里可以看到arctitle的字段位置写入的是$bookname,我们只需要用变量注册写入一个单引号,默认的addslashes函数会直接转义成\’然后写入数据库就是一个单引号了’,之后再引用评论的时候引用一下就可以达到二次注入的效果,如下。
validate为验证码&bookname为注入的内容 ,访问后
然后我们直接点击引用,输入框随便输入即可。看一下MySQL监控,自己搞的一个小工具
成功写入单引号截断,爆管理员用户名密码的EXP我就不发了,反正肯定能爆出来。爆不出来我们也不会发出来这个漏洞。
领取专属 10元无门槛券
私享最新 技术干货