opensns最新版前台无限制注入(无需登录无视GPC)

漏洞触发点在/Application/People/Controller/IndexController.class.php中第48行:

我们可以看到对$arearank有这样一个赋值操作:$arearank = I(‘get.arearank’, 0);
我们跟踪一下I()函数,在/ThinkPHP/Common/functions.php中第343行:

可以看到这是一个取值得函数,那么$arearank就是取GET传进来的arearank的值,如果不存在,那么默认值为0。

但是可以看到I()函数有四 个参数,但是在$arearank这里只有两个参数,而第三个参数是filter,也就是过滤参数,可以看到如果没有filter参数的话,就按照默认的 过滤参数来过滤,也就是$filters = isset($filter) ? $filter : C(‘DEFAULT_FILTER’);

我们可以看一下DEFAULT_FILTER这个对应怎样的过滤函数,在/ThinkPHP/Conf/convention.php中第53行对DEFAULT_FILTER有定义:
‘DEFAULT_FILTER’ => ‘htmlspecialchars’, // 默认参数过滤方法 用于I函数

也就是如果没有指定过滤函数,那么就用htmlspecialchars()这个函数对值进行过滤。

那么我们继续回到上文,$arearank这个变量的值是由GET传递进来的arearank经过htmlspecialchars()处理后的值。

那么$arearank这个变量又带入到了哪一步操作中呢,我们可以看下文有一处操作:

直接将$arearank与upid=做拼接然后组装到了where语句中,周围并无引号进行包裹,是一个数字型的注入。

所以可以无视GPC。因为访问漏洞触发点是不需要登陆的,所以不需要登陆既可以注入。

因为无报错,所以只能用盲注,这里我选择用bool盲注:

payload:

这会返回一个页面(1=1):
1
我们改一下payload:

又会出现另一个页面(1=2):
1
由于手工测比较麻烦,我们利用burpsuite中的intruder模块来自动化,如图所示:
1

原文链接:,转发请注明来源!

发表评论

要发表评论,您必须先登录