pikachu靶场&RCE&文件包含&上传下载&越权(四)

2023-11-19

RCE

概述

RCE(remote command/code execute)漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。

远程系统命令执行一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口,比如我们常见的路由器、防火墙、入侵检测等设备的web管理界面上一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。

如果,设计者在完成该功能时,没有做严格的安全控制,则可能会导致攻击者通过该接口提交“意想不到”的命令,从而让后台进行执行,从而控制整个后台服务器,同样的道理,因为需求设计,后台有时候也会把用户的输入作为代码的一部分进行执行,也就造成了远程代码执行漏洞。 不管是使用了代码执行的函数,还是使用了不安全的反序列化等等。

因此,如果需要给前端用户提供操作类的API接口,一定需要对接口输入的内容进行严格的判断,比如实施严格的白名单策略会是一个比较好的方法。

RCE-PING

在这里插入图片描述

  • 测试下
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 看下源代码,并没有对输入做限制
    在这里插入图片描述

RCE-EVEL

在这里插入图片描述

可以直接执行我们输入的代码
在这里插入图片描述
在这里插入图片描述

  • 关于eval()
    在这里插入图片描述

File Inclusion(文件包含漏洞)

概述

文件包含,是一个功能。在各种开发语言中都提供了内置的文件包含函数,其可以使开发人员在一个代码文件中直接包含(引入)另外一个代码文件。 比如 在PHP中,提供了:

  • include(),include_once()
  • require(),require_once()

这些文件包含函数,这些函数在代码设计中被经常使用到。

大多数情况下,文件包含函数中包含的代码文件是固定的,因此也不会出现安全问题。 但是,有些时候,文件包含的代码文件被写成了一个变量,且这个变量可以由前端用户传进来,这种情况下,如果没有做足够的安全考虑,则可能会引发文件包含漏洞。 攻击者会指定一个“意想不到”的文件让包含函数去执行,从而造成恶意操作。

根据不同的配置环境,文件包含漏洞分为如下两种情况:
1.本地文件包含漏洞:仅能够对服务器本地的文件进行包含,由于服务器上的文件并不是攻击者所能够控制的,因此该情况下,攻击者更多的会包含一些固定的系统配置文件,从而读取系统敏感信息。很多时候本地文件包含漏洞会结合一些特殊的文件上传漏洞,从而形成更大的威力。
2.远程文件包含漏洞:能够通过url地址对远程的文件进行包含,这意味着攻击者可以传入任意的代码,这种情况没啥好说的,准备挂彩。 因此,在web应用系统的功能设计上尽量不要让前端用户直接传变量给包含函数,如果非要这么做,也一定要做严格的白名单策略进行过滤。

include&require语法

  • 本地文件包含
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 远程文件包含
    参考

远程文件包含情况与本地文件包含是相似的,远程文件包含攻击者可以通过访问外部地址来加载远程的代码。 能够通过url地址对远程的文件进行包含,这意味着攻击者可以传入任意的代码。因此,在web应用系统的功能设计上尽量不要让前端用户直接传变量给包含函数,如果非要这么做,也一定要做严格的白名单策略进行过滤。

  • 这个漏洞还要搭建一个测试网站用来模拟远程链接
    在这里插入图片描述
  • 下面在搭建的网站根目录创建一个文档,供pikachu网站来连接
  • 下面通过pikachu来访问下吧
    在这里插入图片描述
    在这里插入图片描述
  • 代码执行成功,既然可以执行我们服务器上的文件,那我们写一个生成后门的文件来被他访问的话,就可以直接拿下网站了,危害还是很大的。
    在这里插入图片描述

文件下载漏洞

概念

文件下载漏洞( unsafe filedownload),文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后会开始执行下载代码,将该文件名对应的文件response给浏览器,从而完成下载。 如果后台在收到请求的文件名后,将其直接拼进下载文件的路径中而不对其进行安全判断的话,则可能会引发不安全的文件下载漏洞

此时如果 攻击者提交的不是一个程序预期的的文件名,而是一个精心构造的路径(比如…/…/…/etc/passwd),则很有可能会直接将该指定的文件下载下来。 从而导致后台敏感信息(密码文件、源代码等)被下载。

所以,在设计文件下载功能时,如果下载的目标文件是由前端传进来的,则一定要对传进来的文件进行安全考虑。 切记:所有与前端交互的数据都是不安全的,不能掉以轻心!

抓包看下载链接

GET /vul/unsafedownload/execdownload.php?filename=kb.png HTTP/1.1
GET /vul/unsafedownload/execdownload.php?filename=ai.png HTTP/1.1
GET /vul/unsafedownload/execdownload.php?filename=bigben.png HTTP/1.1
  • 网站目录文件,下载个1.txt试试,构造payload: ../../../1.txt
    在这里插入图片描述
  • 下载成功,如果我们知道整个目录信息(这就看信息收集的了),再配合这个漏洞…就很舒服
    在这里插入图片描述

文件上传漏洞

概述

文件上传漏洞(unsafe upfileupload) ,文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后,后台会对上传的文件进行判断 比如是否是指定的类型、后缀名、大小等等,然后将其按照设计的格式进行重命名后存储在指定的目录。 如果说后台对上传的文件没有进行任何的安全判断或者判断条件不够严谨,则攻击着可能会上传一些恶意的文件,比如一句话木马,从而导致后台服务器被webshell。

所以,在设计文件上传功能时,一定要对传进来的文件进行严格的安全考虑。比如:
–验证文件类型、后缀名、大小;
–验证文件的上传方式;
–对文件进行一定复杂的重命名;
–不要暴露文件上传后的路径;
–等等…

前端页面检查(client check)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 我们把info.php改成info.png绕过前端检查,然后抓包再给它改成info.php文件
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

MIME TYPE漏洞

什么是MIME?
参考

MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。

上传绕过原理:部分Web应用系统判定文件类型是通过content-type字段,黑客可以通过抓包,将content-type字段改为常见的图片类型,如image/gif,从而绕过校验。

常见的MIME类型

  • text/plain(纯文本)
  • text/html(HTML文档)
  • text/javascript(js代码)
  • application/xhtml+xml(XHTML文档)
  • image/gif(GIF图像)
  • image/jpeg(JPEG图像)
  • image/png(PNG图像)
  • video/mpeg(MPEG动画)
  • application/octet-stream(二进制数据)
  • application/pdf(PDF文档)

在这里插入图片描述

getimagesize

参考
在这里插入图片描述

  • 这函数会根据上传文档的文件头来判断上传是否是图片
  • 我们可以把测试语句写入到图片,以此来绕过getimagesize函数
  • 我们要准备一张图片,一个有测试脚本的文档
    在这里插入图片描述
  • 在此路径下打开cmd窗口,用copy把脚本写入到图片内
    在这里插入图片描述
    在这里插入图片描述
  • 文件可以上传,但没有执行,此时需要文件执行漏洞配合,以php的形式执行
    在这里插入图片描述
  • 配合文件包含的本地包含漏洞,../../unsafeupload/uploads/2021/08/04/931743610a8ddfbf58d141830784.png
  • http://pikachu-master:8890/vul/fileinclude/fi_local.php?filename=../../unsafeupload/uploads/2021/08/04/931743610a8ddfbf58d141830784.png&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2
    在这里插入图片描述

over permission 概述

如果使用A用户的权限去操作B用户的数据,A的权限小于B的权限,如果能够成功操作,则称之为越权操作。 越权漏洞形成的原因是后台使用了不合理的权限校验规则导致的。

一般越权漏洞容易出现在权限页面(需要登录的页面)增、删、改、查的的地方,当用户对权限页面内的信息进行这些操作时,后台需要对 对当前用户的权限进行校验,看其是否具备操作的权限,从而给出响应,而如果校验的规则过于简单则容易出现越权漏洞。

因此,在在权限管理中应该遵守:
1.使用最小权限原则对用户进行赋权;
2.使用合理(严格)的权限校验规则;
3.使用后台登录态作为条件进行权限判断,别动不动就瞎用前端传进来的条件;

水平越权

  • 水平越权就是指,相同权限或相同层级的一个用户可以非法使用或得到另一个客户的权限。
  • 登陆三个账户,查看网站个链接发现只有username不同,直接修改username可以得到其他用户的信息
http://pikachu-master:8890/vul/overpermission/op1/op1_mem.php?username=lucy&submit=
http://pikachu-master:8890/vul/overpermission/op1/op1_mem.php?username=lili&submit=
http://pikachu-master:8890/vul/overpermission/op1/op1_mem.php?username=kobe&submit=

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

垂直越权

转载

垂直越权:低权限用户操作非法执行高权限行为,账户什么的无所谓,只要能执行高权限行为就是垂直越权

  • 高权限用户admin/123456,可以创建删除账户
    在这里插入图片描述
  • 低权限用户pikachu/000000,只有查看权限
    在这里插入图片描述
  • admin添加数据时抓包,可以看到PHPSESSID
    在这里插入图片描述
  • 复制admin链接的时候要保证cookie:PHPSESSID不会过期(身份凭证),这样提权才能成功
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • op2_login.php中通过判断账户密码来判断要进入哪个页面
if(isset($_POST['submit'])){
    if($_POST['username']!=null && $_POST['password']!=null){
        $username=escape($link, $_POST['username']);
        $password=escape($link, $_POST['password']);//转义,防注入
        $query="select * from users where username='$username' and password=md5('$password')";
        $result=execute($link, $query);
        if(mysqli_num_rows($result)==1){
            $data=mysqli_fetch_assoc($result);
            if($data['level']==1){//如果级别是1,进入admin.php
                $_SESSION['op2']['username']=$username;
                $_SESSION['op2']['password']=sha1(md5($password));
                $_SESSION['op2']['level']=1;
                header("location:op2_admin.php");
            }
            if($data['level']==2){//如果级别是2,进入user.php
                $_SESSION['op2']['username']=$username;
                $_SESSION['op2']['password']=sha1(md5($password));
                $_SESSION['op2']['level']=2;
                header("location:op2_user.php");
            }

        }else{
            //查询不到,登录失败
            $html.="<p>登录失败,请重新登录</p>";

        }

    }

}
  • op2_user.php只简单判断了是否登陆
// 判断是否登录,没有登录不能访问
if(!check_op2_login($link)){
    header("location:op2_login.php");
}

if(isset($_GET['logout']) && $_GET['logout'] == 1){
    session_unset();
    session_destroy();
    setcookie(session_name(),'',time()-3600,'/');
    header("location:op2_login.php");

}
  • op2_admin_edit.php(创建用户界面),只判断了是否登陆没有判断账户,所以存在越权
$link=connect();
// 判断是否登录,没有登录不能访问
//这里只是验证了登录状态,并没有验证级别,所以存在越权问题。
if(!check_op2_login($link)){
    header("location:op2_login.php");
    exit();
}
if(isset($_POST['submit'])){
    if($_POST['username']!=null && $_POST['password']!=null){//用户名密码必填
        $getdata=escape($link, $_POST);//转义
        $query="insert into member(username,pw,sex,phonenum,email,address) values('{$getdata['username']}',md5('{$getdata['password']}'),'{$getdata['sex']}','{$getdata['phonenum']}','{$getdata['email']}','{$getdata['address']}')";
        $result=execute($link, $query);
        if(mysqli_affected_rows($link)==1){//判断是否插入
            header("location:op2_admin.php");
        }else {
            $html.="<p>修改失败,请检查下数据库是不是还是活着的</p>";

        }
    }
}
  • op2_admin.php(admin登陆后的页面),这里会判断账户是否登录和用户级别,因为用户创建成功会进行回显,pikachu用户并不具备admin全新,再加上op2_admin.php会判断当前用户,所以会返回登陆界面。
$link=connect();
// 判断是否登录,没有登录不能访问
//如果没登录,或者level不等于1,都就干掉
if(!check_op2_login($link) || $_SESSION['op2']['level']!=1){
    header("location:op2_login.php");
    exit();
}

//删除
if(isset($_GET['id'])){
    $id=escape($link, $_GET['id']);//转义
    $query="delete from member where id={$id}";
    execute($link, $query);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pikachu靶场&RCE&文件包含&上传下载&越权(四) 的相关文章

  • 模拟器提示关闭 hyper-V,但 hyper-V实际上并没有开启

    这个问题是windows系统问题导致无法使用BlueStacks 按下win R键打开执行窗口 输入regedit命令 打开注册表找到位置 HKEY LOCAL MACHINE SYSTEM CurrentControlSet Contro
  • 语义分割该如何走下去?

    作者 立夏之光 链接 https www zhihu com question 390783647 answer 1223902660 来源 知乎 著作权归作者所有 商业转载请联系作者获得授权 非商业转载请注明出处 做过一年多语义分割 来回
  • Java实现MySQL图片存取

    Reference Java实现对Mysql的图片存取操作 java 字节流读取图片 字符流读取 二进制读取 mysql BLOB字段类型用法介绍 Notes Java对图片的读写就跟其它文件一样的 但要用字节流而不用字符流 MySQL中各
  • 《Ansible语法篇:剧本对象关键字之when》

    一 前言 在ansible playbook中 也可以像其他编程语言一样进行条件判断 循环等流程控制 除此之外 还可以控制task的执行结果 在ansible中 可以通过when语句来执行条件判断 只有符合条件 才会执行对应的task wh
  • 【计算机视觉】华为天才少年谢凌曦:关于视觉识别领域发展的个人观点!

    文章目录 一 前言 二 CV的三大基本困难和对应研究方向 三 以下简要分析各个研究方向 3 1 方向1a 神经网络架构设计 3 2 方向1b 视觉预训练 3 3 方向2 模型微调和终身学习 3 4 方向3 无限细粒度视觉识别任务 四 在上述
  • EasyCode代码模板-适用于mybatis-plus 的项目中

    下面的模板适用于mybatis plus 的项目中 pojo类 面的模板适用于mybatis plus 的项目中 导入宏定义 define vm 保存文件 宏定义 save pojo java 包路径 宏定义 setPackageSuffi
  • Android10.0 os定制化系列讲解导读

    一 前言 本专栏主要是作者本人在10 0 frameworks定制化实战功能系列的解读 在从事几年的frameworks定制化功能的经验的积累 开发过平板 广告机 会议机 车机等一系列系统上层定制的功能性开发 写博客的目的 一方面是整理自己

随机推荐

  • Centos 8 替换镜像源

    1 替换 1 1 备份 mkdir etc yum repos d bak mv etc yum repos d etc yum repos d bak 1 2 下载 curl o etc yum repos d CentOS Base r
  • 【100%通过率 】【华为OD机试真题c++ /python】寻找符合要求的最长子串【 2022 Q4 A卷

    华为OD机试 真题 点这里 华为OD机试 真题考点分类 点这里 知识点双指针 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 给定一个字符串 s 找出这样一个子串 1 该子串中的任意一个字符最多出现2次 2 该子串不包含指定
  • SQL入门书籍内容汇总

    转头一晃 SQL入门书籍看完了 并且在画思维导图和整理笔记的过程中又一次加深了印象 不过也仅仅停留在课本层面上 不进行实际操作终将不知道你有没有学会如何运用 当然肯定不会自己创建一些数据库了 这个事不用质疑的 不过却可以读懂里面的一些用法
  • 【RK3399】I3399烧写Android系统详解

    00 目录 文章目录 00 目录 01 驱动安装 02 Android镜像文件烧写 03 问题讨论 04 附录 01 驱动安装 1 1 没有安装驱动的时候 显示感叹号 1 2 解压DriverAssitant v5 1 1 zip 1 3
  • 展锐8541芯片CPU推理MNN模型加速的若干问题

    一 在只有CPU的嵌入式设备上部署AI模型时 可以采取以下方法来提高模型的运行速度 1 量化模型 将浮点数模型转换为定点数模型 可以减少模型的计算和存储需求 从而提高模型的运行速度 2 剪枝模型 通过删除模型中不必要的连接和神经元 可以减少
  • 如何安装虚拟机?安装虚拟机的详细步骤

    1 下载虚拟机软件 首先 在官方网站上下载需要的虚拟机软件 如VMware VirtualBox等 注意软件版本的兼容性 最好选择最新版本 2 安装虚拟机软件 下载完成后 双击安装文件 按照提示完成安装 期间需要设置虚拟机软件的安装路径等信
  • C语言实现推箱子小游戏

    一 设计目的 用简单的C语言知识制作的推箱子游戏 通过上下左右键将所有箱子移动到目标位置 2 让我们更好地了解和巩固C语言知识 并实际运用 同时运用一些不太常见的知识点 二 功能描述 1 模块功能 本程序可分为初始界面 进行游戏 判定通关三
  • C++ list——push_back()与insert()

    push back 是把插入元素直接放入链表结尾 不多表述 insert 是把元素插入指定位置 摘自MSDN IDE VS2012 Parameters Parameter D
  • 使用UncaughtExceptionHandler进行未知异常得捕获

    UncaughtExceptionHandler UncaughtExceptionHandler使用场景 Thread类源代码 UncaughtExceptionHandler使用代码 UncaughtExceptionHandler使用
  • 场景法

    场景法 通过运用场景来对系统的功能点或业务流程的描述 从而提高测试效果 场景法一般包含基本流和备用流 从一个流程开始 通过描述经过的路径来确定的过程 经过遍历所有的基本流和备用流来完成整个场景 基本流 通过一个正确的事件流实现正确流程 备选
  • chatgpt赋能python:如何用Python实现抢购?

    如何用Python实现抢购 Python是一种灵活多样的编程语言 可以用它来完成各种任务 其中之一就是抢购 在电商大促销的节日 抢购商品通常需要竞争非常激烈 但是使用Python编写抢购脚本可以让您获得更高的成功率 以下是一些建议 通过Py
  • ①GD32Keil编译环境搭建及编译Demo

    进入 兆易官网 下载对应芯片的演示套件 下载解压后文件内容如下 安装keil5 我的keil5 下的pack包 打开demo包下的一个例程 提示如下
  • vue-router 2.0 常用基础知识点之router.push()

    router push location 除了使用
  • 红帽rhce认证考试科目有哪些?

    红帽RHCE认证考试主要考察的科目包括 RH124 主要考察Linux基础 文件和目录管理 用户和组管理 文件和目录权限管理 进程管理 系统服务 网络配置 日志分析等内容 RH134 主要考察自动化安装 文件编辑 任务计划 系统进程优先级管
  • 在Linux中安装Cmake过程中,遇到有关于openSSL的问题

    在Linux中安装Cmake过程中 遇到有关于openSSL的问题 以下是个人在安装cmake的过程中遇到的一些问题 如有什么错误之处欢迎各位大佬留言 共同进步 提示 Could Not Find OpenSSL try to set th
  • 【CV中的Attention机制】模块梳理合集

    文章目录 0 总述 1 SENet CVPR18 2 SKNet CVPR19 3 CBAM ECCV18 BAM BMVC18 scSE MICCAI18 4 Non Local Network CVPR19 5 GCNet ICCVW1
  • 手把手教你爬取并下载英雄联盟所有英雄皮肤高清大图

    利用requests和urlretrieve爬取并下载英雄联盟所有英雄皮肤高清大图 不知道屏幕前的你是不是也是一名loler 最近学习爬虫 印象中以前看过爬取英雄联盟的帖子 所以也就自己试了试 结果很是满意 先上效果图 亲女儿拉克丝 下面开
  • IO多路复用--[select

    因为在简历上写了netty的项目 因此还是将网络底层的那点东西搞清楚 首先希望明确的是 BIO NIO IO多路复用这是不同的东西 我会在本文中详细讲出来 本文参考资料 JAVA IO模型 IO多路复用 select poll epoll介
  • SpringBoot2.2.X整合ElasricSearch7.8

    这里默认大家已经掌握es基础语法 es版本为7 8 pom
  • pikachu靶场&RCE&文件包含&上传下载&越权(四)

    文章目录 RCE 概述 RCE PING RCE EVEL File Inclusion 文件包含漏洞 概述 文件下载漏洞 概念 文件上传漏洞 概述 前端页面检查 client check MIME TYPE漏洞 getimagesize