某logCMS的代码审计:越权到后台getshell

前言

​ 学习CTF这么久还没真正意义上审计过一款cms,这次决定花点时间去审计一款cms作为代码审计提升的跳板。由于相关要求,这里就省去cms全名了,主要分享一下学习思路。

代码审计

安装漏洞

​ 其实一般代码审计都是从安装文件开始审计,一般安装脚本主要存在如下漏洞:

  • 无验证功能,任意重装覆盖
  • 表单不做过滤写入config.php导致getshell
  • $_GET['step']跳过限制步骤

漏洞文件:install.php

​ 首先我们直奔第一个点能否任意重装,我们可以看到必须常量DEL_INSTALLER为1的时候才会触发删除install.php,那么我们追踪DEL_INSTALLER看看

​ 这里可以看到DEL_INSTALLER默认值就是0,所以一般情况下这里是可以任意重装的,我们从黑盒的测试也可以印证这一点。同时表单也做了过滤所以这里也没有后面两种情况。

越权漏洞

​ 在安装完毕后打开config.php看到两个比较奇怪的常量定义:AUTH_KEY和AUTH_COOKIE_NAME从名字来看这连个常量肯定是有一定联系的。如下图:

​ 我们在抓包时候发现了AUTH_COOKIE_NAME这个常量,说明这是一个cookie名。我们继续再代码中追踪这个常量。

​ 我们可以看到在登录验证cookie中使用了这个常量,我们追踪一下cookie值是如何构造的

​ 这里可以看到,调用了emHash这个类方法,并且这里使用了AUTH_KEY这个常量,这里说明这两个常量是有联系的。我们在继续追踪hash_hmac()到底使用key做了什么。

​ 这里对传入的$key也就是AUTH_KEY进行了md5加密到一个二进制字符串中而后分割为64个字节与一个字符*64次的字符串进行异或最后得到两个字符串$ipad,$opad最后再将他们打包拼接用md5加密返回给上级调用。我们再回到上级。

​ 我们知道generateAuthCookie方法中的 $key、$hash是由AUTH_KEY加密而成。最终的cookie是由$user_login 、 $expiration $hash拼接而成,而$expiration是cookie的生存时间,$user_login是用户名。这里可以得知$key、$user_login、$expiration都是固定的那么只要知道AUTH_KEY就有伪造cookie造成越权的可能。

​ 例如我们准备两个靶机,一个靶机登陆,获取这个靶机的cookie即可越权登陆另外一个靶机。前提是两个靶机的AUTH_KEY得一致。这里有点鸡肋但是还是有利用的可能。我们将两个靶机的cookie拿出来比较确实是一样的。

后台getshell(一)

​ 其实上诉两个漏洞已经能够让我们进入后台了,现在的任务就是如何Getshell了。这里我随便看了一下发现后台有设置上传附件后缀的功能。

​ 但是测试发现,加入php后缀你发现会将phpt替换为X,从源码中可有很直观看到这点。

​ 此时我注意到了备份功能,这个后缀是保存在数据库中的,既然我不能直接将后缀写入数据库,那么我能不能通过数据备份恢复的方法写入数据库呢。

​ 这里直接备份所有表,下载下来然后找到写入后缀的语句,加上php,如下

​ 导入备份后发现设置中的上传后缀有php

​ 直接在文章发表出上传PHP文件即可getshell

后台getshell(二)

​ 我们还发现这个cms中上传插件的地方可以上传zip,这里我们想如果在插件中插入一句话木马是不是也能getshell?我们找到插件上传的脚本,发现使用了一个叫emUnzip的函数。

​ 我们继续追踪这个函数,发现这个解压函数是使用ZipArchive()类来实现解压缩的。我们可以看到代码755行中获取了压缩包的内部目录/文件的名称 ,并将其分割为数组将第一个元素赋值给了$dir,我们看到switch中plugin选项,这里又将获取的第一个文件夹名称赋值给$plugin_name,使用getFromName方法获取了压缩包是否存在$dir . $plugin_name . '.php'这个文件。综上这里就是检测压缩包中文件夹里面是否存在一个与文件夹名称一致的PHP文件,最后在再压。这里也没对文件进行其他校验操作。因此我们只要再构造 文件夹名和文件名相同的内容的压缩包,同时由上方代码也可以知道,文件将会被解压到 /content/plugins/a/a.php(文件夹名称a)

构建压缩包上传插件:

总结

​ 这次代码审计也是十分传统地从安装文件入手,黑盒结合白盒测试的方法进行审计。总的来说作者有一点安全意识在输入时候对php进行过滤,但是如果服务器是iis可以解析asp但是这里并没有对asp进行过滤,并且如果服务器解析phtml这些后缀在附件上传处同样可以getshell。总的来说在开发时候上传部分应当锁死不应让用户可控。

asp 退出登录修改cookie能进入后台_某logCMS的代码审计:越权到后台getshell相关推荐

  1. asp 退出登录修改cookie能进入后台_深入浅出让你理解跨域与SSO单点登录原理与技术...

    一:SSO体系结构 SSO SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他应用 ...

  2. asp 退出登录修改cookie能进入后台_用Python实现模拟登录正方教务系统抢课

    6月23日更新:由于国内高校正方教务系统或多或少都会有所不同,所以细节地方还是需要自己修改的,我这个过程也只是一个案例,但这其中的本质上是不变的,即是抓包分析. 如果有什么不懂的,可以在评论区评论,或 ...

  3. asp 退出登录修改cookie能进入后台_Vue3.0 - Composition API 体验版开发后台管理系统...

    手把手撸码前端,实战大公司级后台管理系统开发,正规实践了解项目开发整体流程 由0到1搭建后台管理系统,采用 Vue3.0 - Composition API 体验版开发,优先体验3.0 API 语法: ...

  4. 用户退出登录清空cookie

    @ApiOperation(value = "用户退出登录", notes = "用户退出登录", httpMethod = "POST") ...

  5. ajaxfileupload 访问不到后台_一套简单通用的Java后台管理系统,拿来即用,非常方便(附项目地址)...

    前言 这套Base Admin是一套简单通用的后台管理系统,主要功能有:权限管理.菜单管理.用户管理,系统设置.实时日志,实时监控,API加密,以及登录用户修改密码.配置个性菜单等 技术栈 前端:la ...

  6. thinkphp后台_前后端分离决方案|thinkphpvueadmin 后台接口

    thinkphp-vue-admin 后台接口 |前后端分离决方案 它一套有thinkphp开发集成性后台接口,内置权限管理,api响应,psysh等多功能工具 他的作用 自带登录校验 快速完成数据格 ...

  7. CRM客户关系管理系统1登录模块分析和退出登录

    前台; 进入登录页面,浏览器发送请求 后台 登录按钮绑定onclick事件 @Controller public class IndexController extends BaseControlle ...

  8. jwt退出登录的解决方案

    jwt退出登录 前言 JWT 的原理是,服务器认证以后,生成一个 JSON 对象,发回给用户,就像下面这样. { "姓名": "张三", "角色&qu ...

  9. thinkphp框架之后台登录页面cookie有效期设置

    目前开始学框架了,发现蛮有意思的,可能是由于人性天生对未知事物的好奇, 居然感到乐趣丛生,可是也感觉要学的东西实在太多压力山大: 今天就碰到个后台登录页面设置cookie有效期的小问题,本来蛮简单的, ...

最新文章

  1. 2021年大数据ZooKeeper(五):ZooKeeper Java API操作
  2. 计算概论(A)/基础编程练习1(8题)/4:求一元二次方程的根
  3. Kafka、RabbitMQ、RocketMQ等消息中间件的对比 —— 消息发送性能和区别
  4. Python3 爬虫实战 — 模拟登陆12306【点触验证码对抗】
  5. ubuntu永久修改主机名
  6. PowerShell 查询 Excel记录
  7. UVA960 Gaussian Primes【数学】
  8. vlc_for_android(基于git-3.0.0)快速集成并播放电视节目直播
  9. SCI科技论文写作成长营(完整版)
  10. 安兔兔跑分可信吗_安兔兔跑分能信吗?手机性能与跑分关系分析,说点你不知道的!...
  11. 案例分析:如何从0到1对一款产品游戏化
  12. SQL语句中,为什么where子句不能使用列别名,而order by却可以?
  13. 30000台苹果电脑遭恶意软件入侵,包括最新的M1系列!
  14. 基于因果逻辑库的定性事件结果及结果方向性预测
  15. cadence allegro 之如何添加泪滴
  16. O2OA:移动办公市场中的另一股清流
  17. 我的世界1.14java原版命令_我的世界1.14.4第一个预览版发布 添加了debugreport命令...
  18. [jzoj 4742] 单峰 {快速幂}
  19. 解决Win7无法登陆OneDrive并报错0x8004de40问题(亲测解决)
  20. 2019最全大数据学习资源整理(值得收藏)

热门文章

  1. rto净化效率计算公式_旋转式RTO,催化燃烧设备,在各行业的应用及优势
  2. jsp ---- JSTL
  3. buck电路pscad仿真_十二脉波整流器谐波抑制控制策略仿真
  4. Provisional headers are shown问题
  5. Mybatis 查询返回List<String>集合
  6. JAVA中Calendar与Date类型互转
  7. ES查看索引库结构和数据
  8. Linux查看端口被那个进程占用
  9. php折半查找算法,PHP如何实现折半查找算法
  10. C程序100例 第一题