代码审计

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

字号+ 作者:0day5 来源:转载 2016-12-27 09:53 我要评论( )

漏洞触发点在/Application/People/Controller/IndexController.class.php中第48行: public function area() { $map = $this-setMap(); $arearank = I(get.arearan......

漏洞触发点在/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


本文来自: 蜗蜗侠's Blog-关注网络安全 http://blog.icxun.cn/hack/Code/497.html

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
网友点评
暂时未开启评论功能~