[代码审计]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 ...
随机推荐
- HDU 6156 数位dp
Palindrome Function Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 256000/256000 K (Java/Ot ...
- Hadoop生态圈-Azkaban实现hive脚本执行
Hadoop生态圈-Azkaban实现hive脚本执行 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客中在HDFS分布式系统取的数据,而这个数据的是有之前我通过MapRed ...
- 设置 Linux 服务器中 MySQL 允许远程访问
开启 MySQL 远程访问权限: 在linux系统上登陆mysql服务. -- root 是用户名 [root@localhost ~]# mysql -u root -p Enter passwor ...
- Linux使用imagemagick的convert命令压缩图片、节省服务器空间
一.安装: sudo apt-get install imagemagick 二.说明 imagemagick的命令convert可以完成此任务,其参数-resize用来改变图片尺寸,可以直接指定像素 ...
- 流媒体技术学习笔记之(十三)Windows安装FFmpeg
一.下载地址: 网址:https://ffmpeg.org/ 选择Windows版本:https://ffmpeg.org/download.html#build-windows 二.解压安装: 下载 ...
- python学习笔记5--加密模块hashlib
import hashlib # md5 ybm_pwd='yuanbapqingsdfs234FF234HF@F' # m = hashlib.md5() # bytes_ybq = ybm_pwd ...
- swift相关文档
swift官方文档 swift官方文档 https://itunes.apple.com/cn/book/swift-programming-language/id881256329?mt=11 sw ...
- HDU 2112 HDU Today 最短路
题目描述: Problem Description 经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强.这 ...
- Tensorflow数据读取的方式
深度学习既然是基于数据的方法,先不管多抽象,那总归是有读取数据的方法的吧,这里的数据应该是一个统称,包含我们讲的数据集和变量tensor. tf读取数据一共有3种方法: 供给数据(Feeding): ...
- Python 入门基础9 --函数基础2 实参与形参
今日内容: 一.函数参数 1.形参与实参定义 2.实参分类 3.形参分类 4.可变参数的整体使用 一.形参与实参定义 def fn(参数们): pass 1.1 形参 定义函数,在括号内声明的变量名, ...