[代码审计]yxcms从伪xss到getshell
0x00 前言
这篇文章首发于圈子,这里作为记录一下。
整个利用链构造下来是比较有趣的,但实际渗透中遇到的几率比较少。
此次审的是yxcms 1.4.6版本,应该是最后一个版本了吧?
0x01 从任意文件删除漏洞说起
yxcms经过修修补补,前台的一些洞都挖得差不多了,一番挖掘没什么效果,转到后台去。后台的防护是比较松懈的。
找到了个任意文件删除漏洞。
/protected/apps/admin/controller/filesController.php
public function del()
{
$dirs=in($_GET['fname']);
$dirs=str_replace(',','/',$dirs);
$dirs=ROOT_PATH.'upload'.$dirs;
if(is_dir($dirs)){del_dir($dirs); echo 1;}
elseif(file_exists($dirs)){
if(unlink($dirs)) echo 1;
}else echo '文件不存在';
}
代码很简单,接收文件名,拼接路径,判断文件是否存在,直接删除。没有过滤。
后台大部分请求是有csrf防护的,但有一些是没有,比如这里的文件删除。
那么我们自然想到的是csrf咯,发个链接给管理员,删除install.lock进行重装,然后getshell。
但这样动作太大了,非常容易被管理员发现。
其实我们无非就是希望能够获得管理员的权限,还有没有其他办法?
0x02 更为轻松的办法:session固定漏洞
先简单介绍一下session固定漏洞,session固定漏洞最为核心的其实应该是程序使用session作为认证方式,但又放开了session_id的设置,并且设置session_id在session_starts()执行之后,session_id以key/value的形式指定了后端使用哪个session。
有这么一个场景,当管理员登陆之后,程序生成一个认证session,而此时的session是没有指定session_id的。如果存在一个接口能够让我们指定session_id,那么我们就可以在设置一个session_id连接到这个已经认证的session上去。
构造一个请求设置session_id的链接让管理员点击,那么我们就拥有了管理员的权限。(CSRF)
在攻击成功之后,怎么设置我们的session_id呢?
其实就是我们前端经常看到的这个东西。
PHPSESSID=fdpmos0quo6o7rq69h6v1u6i50;
攻击成功之后,设置PHPSESSID=你自己设置的session_id
,然后带着这个cookie请求即可访问后台。
yxcms也是存在session固定漏洞的,看到文件protected\include\lib\common.function.php
function session($name='',$value = '') { //session固定
if(empty($name)){
return $_SESSION;
}
$sessionId = request('request.sessionid');
if(!empty($sessionId)){ //不为空,就设置session_id
session_id($sessionId);
}
if(!isset($_SESSION)){
session_starts();
}
if($value === ''){
$session = $_SESSION[$name];
}else if($value==null){
unset($_SESSION[$name]);
}else{
$session = $_SESSION[$name] = $value;
}
return $session;
}
这里接收了一个REQUEST请求,参数名为sessionid的参数,将它设置为session_id。
追溯一下session方法的调用。
用户进行后台相关页面的访问 - >> 先进行登陆和权限检查 --> 调用auth类进行检查
跟进auth类的check方法
先进行session的初始化,然后调用checkLogin方法判断是否有登陆。
static public function checkLogin()
{
$groupid=session(self::$config['AUTH_SESSION_PREFIX'].'groupid');
if(!empty($groupid))
return true;
else
return false;
}
而checkLogin里调用了session方法。
那么我们整个调用链就很清晰了。
请求后台任意需要认证的页面都是会调用session()方法,而且sessionid的接收时REQUEST方式,那么我们只要让登陆后台的管理员点击类似这样的链接,就可以拿到后台的权限了。
http://demo.yxcms.com/index.php?r=admin/index/index&sessionid=123test
要让管理员登陆状态下点你的链接,最好的方法是找到个后台的xss啦。
0x03 留言伪xss
随便找了一下,在前台留言的地方发现了一个伪xss,可以插入html标签。
虽然构造不成xss,但是已经足够了。利用img 标签发起一个请求,正好够我们session固定用了。
还有点美中不足的是,在实际场景中,你留了个言,你怎么知道这个管理员什么时候触发呢?
有没有办法能够在第一时间通知我们呢?
其实是有的。
我们可以在我们的公网服务器上,放一个跳转脚本。然后在服务器上写一个脚本去统计访问了这个跳转脚本(脚本名字可以设置的复杂点,以防被扫描器扫到)的服务器,并在第一时间发邮件通知我们。
0x04 后台getshell
终于到了后台getshell,拿到了权限之后其实就很简单了。
后台有一个编辑模板的地方可以直接getshell。
编辑加入shell代码,访问首页,直接getshell。
0x05 总结
通过前台留言功能,在后台构造了一个伪xss,利用img标签发起csrf session固定请求,中间利用跳转脚本及时记录下获取到权限的服务器,登陆后台利用模板编辑功能就能轻松getshell。
Have Fun !
[代码审计]yxcms从伪xss到getshell的更多相关文章
- DedeCMS Xss+Csrf Getshell \dede\file_manage_control.php
目录 . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 对这个漏洞的利用方式进行简单的概括 . 这个漏洞的利用前提是需要登录到后台进行操作 ...
- [代码审计]青云客Cms前台有条件注入至getshell,后台xss至getshell、至弹你一脸计算器
之前写了一篇关于青云客cms的文章,发在了t00ls,就不copy过来了. 给个链接,好记录一下. https://www.t00ls.net/thread-43093-1-1.html
- PHPMyWind5.4存储XSS后续getshell提权
0x0 前言 通过留言处的xss,我们可以得到管理员的cookie,进而登陆后台: https://www.cnblogs.com/Rain99-/p/10701769.html 现在要从后台入手,进 ...
- [代码审计]:PhpMyWind储存型XSS漏洞(CVE-2017-12984)
简介 今天开启一下代码审计的篇章 python安全编程剩下的看起来没意思就结束了 ,现在规划每2周写一个爬虫练练手, 然后今天开启代码审计和Docker的学习 我个人感觉先看漏洞利用过程再看漏洞分析 ...
- ASP代码审计学习笔记 -2.XSS跨站脚本
XSS漏洞: 漏洞代码: <% xss=request("xss") response.write(xss) %> 漏洞利用: 漏洞修复: Server.HTMLEnc ...
- 2020/1/29 PHP代码审计之进一步学习XSS【持续更新】
0x00 上午学习了XSS漏洞,中午吃饭想了想,还是思考的太浅层了,这种老生常谈的东西对于现在的我意义不大.现在我需要的是思考.于是就有了这个随笔.在本文中,我会持续更新一些XSS的深入思考,payl ...
- 【代码审计】MIPCMS 远程写入配置文件Getshell
0x00 环境准备 MIPCMS官网:https://www.mipcms.cn 网站源码版本:MIPCMS内容管理系统 V3.1.0(发布时间:2018-01-01) 程序源码下载:http://w ...
- 代码审计之seacms v6.45 前台Getshell 复现分析
1.环境: php5.5.38+apache+seacms v6.45 seacms目录结构: │─admin //后台管理目录 │ │─coplugins //已停用目录 │ │─ebak //帝国 ...
- 代码审计之seacms v6.54 前台Getshell 复现分析
1.环境: php5.5.38+apache+seacms v6.54 上一篇文章针对seacms v6.45 进行了分析,官方给出针对修复前台geishell提供的方法为增加: $order = ( ...
随机推荐
- 「Vue」路由
Vue-routerrouter-link active-class类型: string默认值: "router-link-active"设置 链接激活时使用的 CSS 类名.默认 ...
- 第六节 事务XML方式[声明方式]
事务管理: 管理事务,管理数据,数据完整性和一致性 事务[业务逻辑] : 由一系列的动作[查询书价格,更新库存,更新余额],组成一个单元[买书业务], 当我们动作当中有一个错了,全错~ ACID 原子 ...
- vue 使用v-cloak让在页面加载时不显示{{}}花括号
官方说法: 这个指令保持在元素上直到关联实例结束编译. 和 CSS 规则如 [v-cloak] { display: none } 一起用时,这个指令可以隐藏未编译的 Mustache 标签直到实例准 ...
- Maven的国内镜像(解决jar下载过慢)
Maven简介 maven作为一个项目管理工具确实非常好用,结果在使用时候,你会发现下载jar速度不如自己在网上下载.之前oschina的中央仓库可用,现在oschina的maven服务器关了,只能拿 ...
- os_cpu_a.asm
在OS_CPU_A.ASM中,定义了开.关中断的方法,在uC/OS-II系统中有三种方法可以实现中断开关,而ARM只适用于模式三,即使用一个局部变量,在中断进入之间保存CPU状态,退出时候再恢复状态. ...
- Java多线程学习(八)线程池与Executor 框架
目录 历史优质文章推荐: 目录: 一 使用线程池的好处 二 Executor 框架 2.1 简介 2.2 Executor 框架结构(主要由三大部分组成) 2.3 Executor 框架的使用示意图 ...
- 【CTF REVERSE】WHCTF2017-CRACKME
1.前言 假装大学生水一下CTF题目,常规思路.程序没有加壳,是VC写的MFC程序. 2.破题思路 1.MessageBox 下断点 2.找到提示错误字符串的函数B 3.跟踪函数 4.跟踪算法 3.实 ...
- Python 优雅获取本机 IP 方法
原文 见过很多获取服务器本地IP的代码,个人觉得都不是很好,例如以下这些 不推荐:靠猜测去获取本地IP方法 #!/usr/bin/env python # -*- coding: utf-8 -*- ...
- 【linux kernel】 中断处理-中断上半部【转】
转自:http://www.cnblogs.com/embedded-tzp/p/4451354.html 欢迎转载,转载时需保留作者信息,谢谢. 邮箱:tangzhongp@163.com 博客园地 ...
- linux 串口驱动(三) 【转】
转自:http://blog.chinaunix.net/uid-27717694-id-3495825.html 三.串口的打开在用户空间执行open操作的时候,就会执行uart_ops->o ...