[代码审计]SRCMS的两点小越权
0x00 简介
SRCMS是一个开源的企业安全应急响应中心,基于ThinkPHP 3.2框架开发。该系统在2017-09-09已经停止更新了,主要是在翻看p神博客文章时看到这个,随想自己再审一次。
p神在2016年1月审过之后,作者做了一次更新,修补完了漏洞,几点大问题算是解决了。
在我仔细审过之后,发现了两处小越权,算是不痛不痒的,这篇文章主要是为了对在p神文章学到的审计点进行检测加强与衍伸。
下面是我的思考过程记录。
0x01 前思
p神的文章写到了两个点。
一是作者对于链式字符串where条件的误用,是tp的特性导致。这个问题在于很多人在理解一个东西的时候,都会把自己的思想掺杂进去,想当然的认为是这样。没有经过测试就直接发布,最终就导致了意外的结果。
后面作者使用了数组的形式进行了修复。

二是thinkphp Model中设置的类型与实际执行的SQL类型不同导致,字段不限制,字段不验证,关键点在于主键字段是我们可以控制的。
其实这里的锅我感觉是要给tp背,毕竟create方法里面的判断是他们写的,开发者在使用的时候只是根据文档提供的函数来使用。
针对p神说的越权修改他人的联系方式这个点,作者的修复方式是取消使用D方法来create,而是直接使用M方法,从而避开了了使用自动完成可能带来的问题。

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

再看到tp的create方法

在还没有执行到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的漏洞报告和评论,可是评论根本就没有限制,导致可以获取别人漏洞报告的评论。

直接修改rid即可:

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

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

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

两个漏洞虽然造成不了多大的影响,但也算是对p神文章的学习和小小的衍伸。
0x03总结
学习别人的漏洞类型文章,最主要的是学习别人的思考过程,与及理清楚整个漏洞原理,同时做出相应的思考衍伸。
写漏洞类型文章的精髓也是在于此,记录清楚整个思考的过程,洞悉出漏洞的本质。
而这个是我亟待加强的。
[代码审计]SRCMS的两点小越权的更多相关文章
- 【阿里云产品公测】小白对OTS两点小建议
作者:阿里云用户荷包蛋 我是大一的新生,作为一个爱技术爱学习爱折腾的熊孩子,我在暑假申请了ECS,学到了很多东西.现在阿里巴巴又开放了很多免费测试,我抱着学习和围观的心态申请了测试,其中有OTS这个高 ...
- 1. 从系统架构到Hello World
Android起源与发展: Android操作系统最初在2003年的时候由Andy Rubin开发,主要支持手机.2005年8月由Google收购注资.2007年11月,Google与84家硬件制造商 ...
- Unity3D性能优化--- 收集整理的一堆
http://www.cnblogs.com/willbin/p/3389837.html 官方优化文档--优化图像性能http://docs.unity3d.com/Documentation/Ma ...
- 精通 Oracle+Python,第 1 部分:查询最佳应践
原文链接:http://www.oracle.com/technetwork/cn/articles/dsl/mastering-oracle-python-1391323-zhs.html 在 Py ...
- asp.net资料! (.NET) (ASP.NET)
使用SqlBulkCopy类加载其他源数据到SQL表 在数据回发时,维护ASP.NET Tree控件的位置 vagerent的vs2005网站开发技巧 ASP.NET2.0小技巧--内部控件权限的实现 ...
- IOS开发之格式化日期时间的使用 && 编程中常见问题
今天在做一个有关时间的一些开发的时候,遇见了一写问题,反正来说既是很简单的问题,但毕竟用了我一些时间去调错误,遂记录之. 本来是想用 NSDateFormat 来转换一下服务器返回的时间,然后在客户端 ...
- MySQL filesort优化案例一则
今天遇到一个filesort优化的案例,感觉不错,分享出来. MySQL中filesort是什么意思?官方手册定义: MySQL must do an extra pass to find out h ...
- 可靠通信的保障 —— 使用ACK机制发送自定义信息——ESFramework 通信框架4.0 快速上手(12)
使用ESPlus.Application.CustomizeInfo.Passive.ICustomizeInfoOutter接口的Send方法,我们已经可以给服务端或其它在线客户端发送自定义信息了, ...
- 关于LR监视Windows和linux的说明
一.监控windows系统: 1.监视连接前的准备工作 1)进入被监视windows系统,开启以下二个服务Remote Procedure Call(RPC) 和Remote Registry Ser ...
随机推荐
- 查找和替换img src
$("#imgId")[0].src; //获取 $("#imgId").attr('src',path); //修改
- internal in C#
说白了 被 internal 修饰的东西只能在本程序集(当前项目)内被使用. 被 protected internal 修饰的属性/方法 可以在其他项目中,被派生类使用 例如有两个项目app1和app ...
- day64_SpringMVC学习笔记_02
1.springmvc对多视图的支持 (1)导入xml格式视图支持的jar包 注意:springmvc本身就支持xml格式,所以不用导入其他支持的jar包了. (2)在springmvc.xml中 ...
- Tensorflow中的变量
从初识tf开始,变量这个名词就一直都很重要,因为深度模型往往所要获得的就是通过参数和函数对某一或某些具体事物的抽象表达.而那些未知的数据需要通过学习而获得,在学习的过程中它们不断变化着,最终收敛达到较 ...
- Oracle 基本操作符
1.一般操作符 (1)!= 不等于 select empno,ename,job from scott.emp where job!='manager' (2)^= 不等于 select empno, ...
- SQL Server 索引(一)数据结构和存储结构
本文关注以下方面(本文所有的讨论基于SQL Server数据库): 索引的分类: 索引的结构: 索引的存储 一.索引定义分类 让我们先来回答几个问题: 什么是索引? 索引是对数据库表中一列或多列的值进 ...
- 云计算--hdfs dfs 命令
在hadoop安装目录下:/hadoop2/hadoop-2.7.3 1.创建目录 bin/hdfs dfs -mkdir /user bin/hdfs dfs -mkdir /user/<us ...
- 003_cd pushd popd三个命令的区别
一. It depends. In zsh you can configure cd to push the old directory on the directory stack automati ...
- python抓取猫眼电影列表
抓取地址:http://maoyan.com/board/4 分析url分页规则:http://maoyan.com/board/4?offset=0 其中offset参数值为0到90 用到的库: P ...
- Python黑魔法
1. 赋值 In [1]: x = 1 ...: y = 21 ...: print x, y ...: ...: x, y = y, x ...: print x, y 1 21 21 1 2. 列 ...