[代码审计]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 !

原文地址:https://www.cnblogs.com/r00tuser/p/8419300.html

时间: 2024-09-30 03:00:40

[代码审计]yxcms从伪xss到getshell的相关文章

DedeCMS Xss+Csrf Getshell \dede\file_manage_control.php

目录 1. 漏洞描述 2. 漏洞触发条件 3. 漏洞影响范围 4. 漏洞代码分析 5. 防御方法 6. 攻防思考 1. 漏洞描述 对这个漏洞的利用方式进行简单的概括 1. 这个漏洞的利用前提是需要登录到后台进行操作,准确来说是从cookies的角度来说是需要处于登录的后台状态 2. 后台的Logo上传存在xss漏洞,黑客可以在img的src中注入xss的代码 3. 黑客可以利用xss未过滤漏洞,发起CSRF攻击,劫持目标用户向"/dede/file_manage_control.php"

代码审计学习之反射型XSS

0x01 基础介绍 xss漏洞分类:一般来说分三种 反射型XSS 保存型XSS 基于DOM的XSS 今天先学习反射型xss:它通过给别人发送带有恶意脚本代码参数的URL,当URL地址被打开时,特有的恶意代码参数被HTML解析.执行.它的特点是非持久化,必须用户点击带有特定参数的链接才能引起. 0x02 造成原因及利用 一般来说,许多漏洞造成的原因都是因为对用户的输入太信任造成的,没有进行严谨的过滤,通常在代码审计的过程中,审计获取用户输入的函数或者操作如存储等等 一.对变量直接输出 例如: <?

XerCMS-1.0.3代码审计(文件名报错注入后台getshell)

链接:https://share.weiyun.com/6b98e41d036967178e1a21fb88ed340f (密码:YnNY) 文件名报错注入 index.php?m=member&a=upfiles&id=2 在这个文件夹中XerCMS\Modules\member\index.php 前台注册个用户 在头像上传处抓包reperter一下用mysql监控工具 发现有insert数据库操作 分析一下 跟进upfiles函数 public function upfiles()

【代码审计】MIPCMS 远程写入配置文件Getshell

0x00 环境准备 MIPCMS官网:https://www.mipcms.cn 网站源码版本:MIPCMS内容管理系统 V3.1.0(发布时间:2018-01-01) 程序源码下载:http://www.mipcms.cn/mipcms-3.1.0.zip 本地测试网站: 0x01 代码分析 1.漏洞文件位置/app/install/controller/Install.php  第13-23行:   public function index()     {  ?       if (is_

代码审计之seacms v6.45 前台Getshell 复现分析

1.环境: php5.5.38+apache+seacms v6.45 seacms目录结构: │─admin //后台管理目录 │ │─coplugins //已停用目录 │ │─ebak //帝国备份王数据备份 │ │─editor //编辑器 │ │─img //后台静态文件 │ │─js //后台js文件 │ │─templets //后台模板文件 │─article //文章内容页 │─articlelist //文章列表页 │─comment //评论 │ │─api //评论接口文

通过代码审计找出网站中的XSS漏洞实战(三)

一.背景 笔者此前录制了一套XSS的视频教程,在漏洞案例一节中讲解手工挖掘.工具挖掘.代码审计三部分内容,准备将内容用文章的形式再次写一此,前两篇已经写完,内容有一些关联性,其中手工XSS挖掘篇地址为快速找出网站中可能存在的XSS漏洞实践(一)https://segmentfault.com/a/1190000016095198 本文主要记录通过代码审计的方式进行XSS漏洞挖掘,分为了找出关键位置,正向审计,反向审计三个部分,审计的系统为permeate渗透测试系统,测试系统的搭建可以参考笔者的

技术专题-PHP代码审计

作者:坏蛋链接:https://zhuanlan.zhihu.com/p/24472674来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 一.前言 php代码审计如字面意思,对php源代码进行审查,理解代码的逻辑,发现其中的安全漏洞.如审计代码中是否存在sql注入,则检查代码中sql语句到数据库的传输 和调用过程. 入门php代码审计实际并无什么门槛要求,只需要理解基础的php语法规则,以及理解各种类型漏洞的出现原因则可以开始尝试审计php源代码.通常的漏洞演示中

PHP代码审计中你不知道的牛叉技术点

一.前言 php代码审计如字面意思,对php源代码进行审查,理解代码的逻辑,发现其中的安全漏洞.如审计代码中是否存在sql注入,则检查代码中sql语句到数据库的传输 和调用过程. 入门php代码审计实际并无什么门槛要求,只需要理解基础的php语法规则,以及理解各种类型漏洞的出现原因则可以开始尝试审计php源代码.通常的漏洞演示中sql语句会直接传入php自带的函数传入数据库执行,但在实际的软件项目中,通常以面向对象的思想进行编程,则会涉及各种形式的封装,调用,以及不同风格的框架,在这个条件下,只

xss跨站脚本攻击与防御读书笔记(原创)

XSS在客户端执行 可以任意执行js代码 0x01  xss 的利用方式 1. 钓鱼      案例:http://www.wooyun.org/bugs/wooyun-2014-076685  我是如何通过一个 XSS 探测搜狐内网扫描内网并且蠕动到前台的 2.钓鱼,伪造操作界面钓鱼  直接跳转 <script>document.location.href="http://test.com/xxx.htm" iframe钓鱼 <iframe src="ht