0x00 简介

SRCMS是一个开源的企业安全应急响应中心,基于ThinkPHP 3.2框架开发。该系统在2017-09-09已经停止更新了,主要是在翻看p神博客文章时看到这个,随想自己再审一次。

p神在2016年1月审过之后,作者做了一次更新,修补完了漏洞,几点大问题算是解决了。

在我仔细审过之后,发现了两处小越权,算是不痛不痒的,这篇文章主要是为了对在p神文章学到的审计点进行检测加强与衍伸。

下面是我的思考过程记录。

0x01 前思

p神的文章写到了两个点。

一是作者对于链式字符串where条件的误用,是tp的特性导致。这个问题在于很多人在理解一个东西的时候,都会把自己的思想掺杂进去,想当然的认为是这样。没有经过测试就直接发布,最终就导致了意外的结果。

后面作者使用了数组的形式进行了修复。

[代码审计]SRCMS的两点小越权-LMLPHP

二是thinkphp Model中设置的类型与实际执行的SQL类型不同导致,字段不限制,字段不验证,关键点在于主键字段是我们可以控制的。

其实这里的锅我感觉是要给tp背,毕竟create方法里面的判断是他们写的,开发者在使用的时候只是根据文档提供的函数来使用。

针对p神说的越权修改他人的联系方式这个点,作者的修复方式是取消使用D方法来create,而是直接使用M方法,从而避开了了使用自动完成可能带来的问题。

[代码审计]SRCMS的两点小越权-LMLPHP

但仍有一些使用了D方法的,其修复方式是加上了验证字段,从而导致我们没办法控制主键的字段。

[代码审计]SRCMS的两点小越权-LMLPHP

再看到tp的create方法

[代码审计]SRCMS的两点小越权-LMLPHP

在还没有执行到autoOperation的时候进行了字段限制,从而避免了这个问题。

至于第三个问题是p神说的横向挖掘,提升权限的问题,而这个问题的本质和问题二一样,同样是thinkphp 自动完成,字段不限制,字段不验证导致的。(所以为两个点)

那么总结衍伸一下可以知道,在字段限制的情况下,使用了D()方法进行create(),主键字段如果是在受限字段内的话,同样是存在越权的问题。(问题二)

0x02 后觉

在总结和思考了p神的文章和漏洞原理之后,接着就开始想自己挖一下。

最终让我找到了两个小越权,分别是越权评论别人的漏洞报告,越权查看别人漏洞报告下的评论。

看到User下的PostController.class.php的view和comment方法:

public function view(){
$rid = I('get.rid',0,'intval');
$model = M("Post");
$id = session('userId');
$comment = M('comment')->where(array('post_id'=>$rid))->select();
$post = $model->where(array('user_id'=>$id,'id'=>$rid))->find();
$tmodel= M('setting');
$title = $tmodel->where('id=1')->select();
$this->assign('title', $title);
$this->assign('model', $post);
$this->assign('comment',$comment);
$this->display();
} public function comment()
{
if (!IS_POST) {
$this->error("非法请求");
}
if (IS_POST) {
$data = I();
$data['update_time'] = time();
$data['user_id'] = session('username');
$model = M("Comment");
if ($model->add($data)) { //评论处这里有没有问题??
$this->success("评论成功", U('post/index'));
} else {
$this->error("评论失败");
}
}
}

首先是view方法,这里是对展示对应rid的漏洞报告和评论,可是评论根本就没有限制,导致可以获取别人漏洞报告的评论。

[代码审计]SRCMS的两点小越权-LMLPHP

直接修改rid即可:

[代码审计]SRCMS的两点小越权-LMLPHP

同样看到commnet方法,没有限制字段,接收数组类型数据,直接存储。

[代码审计]SRCMS的两点小越权-LMLPHP

在看到对应的模型,没有验证字段数据:

[代码审计]SRCMS的两点小越权-LMLPHP

就是典型的上面说的问题了,可以直接插入评论到别人的漏洞报告里面。

[代码审计]SRCMS的两点小越权-LMLPHP

两个漏洞虽然造成不了多大的影响,但也算是对p神文章的学习和小小的衍伸。

0x03总结

学习别人的漏洞类型文章,最主要的是学习别人的思考过程,与及理清楚整个漏洞原理,同时做出相应的思考衍伸。

写漏洞类型文章的精髓也是在于此,记录清楚整个思考的过程,洞悉出漏洞的本质。

而这个是我亟待加强的。

05-11 15:20