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

pikachu靶场总结(三)

五、RCE

1.RCE(remote command/code execute)概述

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

    远程系统命令执行

    一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口
    比如我们常见的路由器、防火墙、入侵检测等设备的web管理界面上
    一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。 而,如果,设计者在完成该功能时,没有做严格的安全控制,则可能会导致攻击者通过该接口提交“意想不到”的命令,从而让后台进行执行,从而控制整个后台服务器

    现在很多的甲方企业都开始实施自动化运维,大量的系统操作会通过"自动化运维平台"进行操作。 在这种平台上往往会出现远程系统命令执行的漏洞,不信的话现在就可以找你们运维部的系统测试一下,会有意想不到的"收获"-_- 

    远程代码执行

    同样的道理,因为需求设计,后台有时候也会把用户的输入作为代码的一部分进行执行,也就造成了远程代码执行漏洞。 不管是使用了代码执行的函数,还是使用了不安全的反序列化等等。 
    因此,如果需要给前端用户提供操作类的API接口,一定需要对接口输入的内容进行严格的判断,比如实施严格的白名单策略会是一个比较好的方法。 

2.理解

由于程序中预留了执行代码或者命令的接口,并且提供了给用户使用的界面,导致被黑客利用, 控制服务器。

如果在一些场景中需要有一些让用户执行系统命令的功能,但是后台的代码中又没有对用户的输入做安全措施,就像我们的sql注入一样,我们可以利用代码的纰漏拼接更多的语句到后台并被执行,就会造成远程系统命令执行漏洞,导致我们的操作系统沦陷!

同样的如果后台代码使用了危险的函数,又没有对用户的输入做严格的过滤,导致用户输入的代码被带入到后端并且执行了,这个时候就会造成远程代码执行漏洞!

3.危险函数

  代码执行漏洞函数:

  eval()   将字符串当作php代码执行
  assert()   将字符串当作php代码执行
  preg_replace()   将字符串正则匹配后替换
  call_user_func()   回调函数
  array_map()    回调函数

  命令执行漏洞函数:

  system()   将字符串当作os命令执行
  exec()       将字符串当作os命令执行,但只输出命令执行的最后一行,约等于没有回显
  shell_exec()   将字符串当作os命令执行
  passthru()      将字符串当作os命令执行
  popen()           能过执行os命令,相当于把命令执行结果输出到一个文件内
  ``单引号

4.防护措施

  1.尽量不要使用eval等危险函数的使用,如果要是使用则要进行严格的过滤
  2.preg_replace()函数放弃使用/e修饰符
  3.尽量减少危险函数的使用,并在php.ini配置文件中disable_functions中禁用disable_functions=system,assert
  4.参数值尽量用引号包裹,并在拼接前调用addslashes() 进行转义

六、文件包含漏洞

1.File Inclusion(文件包含漏洞)概述

    文件包含,是一个功能。在各种开发语言中都提供了内置的文件包含函数,其可以使开发人员在一个代码文件中直接包含(引入)另外一个代码文件。 比如 在PHP中,提供了:
    include(),include_once()
    require(),require_once()
    这些文件包含函数,这些函数在代码设计中被经常使用到。
    大多数情况下,文件包含函数中包含的代码文件是固定的,因此也不会出现安全问题。 但是,有些时候,文件包含的代码文件被写成了一个变量,且这个变量可以由前端用户传进来,这种情况下,如果没有做足够的安全考虑,则可能会引发文件包含漏洞。 攻击着会指定一个“意想不到”的文件让包含函数去执行,从而造成恶意操作。 根据不同的配置环境,文件包含漏洞分为如下两种情况:
    1.本地文件包含漏洞:仅能够对服务器本地的文件进行包含,由于服务器上的文件并不是攻击者所能够控制的,因此该情况下,攻击者更多的会包含一些固定的系统配置文件,从而读取系统敏感信息。很多时候本地文件包含漏洞会结合一些特殊的文件上传漏洞,从而形成更大的威力。
    2.远程文件包含漏洞:能够通过url地址对远程的文件进行包含,这意味着攻击者可以传入任意的代码,这种情况没啥好说的,准备挂彩。 
    因此,在web应用系统的功能设计上尽量不要让前端用户直接传变量给包含函数,如果非要这么做,也一定要做严格的白名单策略进行过滤。 

2.防护措施

1.在设计上尽量不要将文件包含函数对应的文件交给前端进行选择和操作

2.过滤掉各种 ../../ http:// https:// 字段

3.配置php.ini配置文件时注意这几个参数:

    allow_url_fopen = off
        allow_url_fopen 是 PHP 中的一个配置选项,它决定了 PHP 是否能够通过 URL(而非本地文件路        径) 来打开文件。这个配置选项的值会影响到一些 PHP 中与文件操作相关的函数的行为,例如         fopen() 和 file_get_contents() 。具体来说,当 allow_url_fopen 被设置为 On(开启)时,这        些函数可以用来 读取 或 写入 远程文件。而当该配置项被设置为 Off(关闭)时,这些函数只能        用于操作本地文件!目前,allow_url_fopen选项在每一个PHP版本中都是默认开启的!
    Allow_url_include = off
        allow_url_include 是 PHP 的一个配置指令,与 allow_url_fopen 类似,但 allow_url_include         配置专门针对 PHP 的 include、include_once、 require 及 require_once 语句。当             allow_url_include 被设置为 On 时,PHP 允许通过 URL 的形式,从远程服务器 包含和执行 PHP         文件
    magic_quotes_gpc = on
        当magic_quotes_gpc = On时,输入数据中含单引号(’)、双引号(”)、反斜线(\)与         NULL(NULL 字符)等字符,都会被加上反斜线。这些转义是必须的

4.通过白名单策略,仅允许包含运行指定的文件,其他都禁止!

七、不安全的文件下载

1.概述


    文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后 会开始执行下载代码,将该文件名对应的文件response给浏览器,从而完成下载。 如果后台在收到请求的文件名后,将其直接拼进下载文件的路径中而不对其进行安全判断的话,则可能会引发不安全的文件下载漏洞。
    此时如果 攻击者提交的不是一个程序预期的的文件名,而是一个精心构造的路径(比如../../../etc/passwd),则很有可能会直接将该指定的文件下载下来。 从而导致后台敏感信息(密码文件、源代码等)被下载。 
    所以,在设计文件下载功能时,如果下载的目标文件是由前端传进来的,则一定要对传进来的文件进行安全考虑。 切记:所有与前端交互的数据都是不安全的,不能掉以轻心! 


2.原理


    跟文件包含漏洞相似,只不过这次我们是下载的地方出现问题了,还是因为没有对传入的文件名称进行过滤和限制,导致我们可以随意下载对方服务器上的敏感文件,造成信息泄露!

3.防护措施

    3.1对传入的文件名进行严格的过滤和筛查!
    3.2对文件下载的目录进行严格的控制!

八、不安全的文件上传

1.概述

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

2.client check

这里是一个上传图片的上传点,我们先尝试上传一个一句话木马,然后发现上传不了,他给我们通过js弹了一个框出来,那这个时候我们就猜测,这里可能是通过前端进行限制的,我们查看前端代码之后发现果然是这样!我们前面就讲过前端的限制是没用的,它只能起到辅助作用,我们这里直接通过开发者工具简单的修改前端代码就实现了绕过!

3.MIME type

$_FILES()

如果后端采用这个方法来对传入的文件扩展名进行获取的话,那前端会将文件类型包含在http请求中,content-type,我们直接采用抓包修改的方法即可对其进行绕过,所以在文件上传时这样做是及其不安全的!

4.Getimagessize

Getimagessize()这个函数是通过将文件读取为十六进制的数据,然后通过前几位来对这个文件进行判断是否为图片,那我们是不是就可以伪造一个文件,让他的十六进制数前几位符合要求,但后面是我们的一些恶意代码,这样就达成了我们的攻击目的!

这个时候该怎么构造一个这样的文件呢,最简单的就是通过Windows来实现,在命令行中输入 copy /b a.png(一个正常的png图片) + b.php(一段包含恶意代码文件) c.png    这样我们就可以得到一个带有恶意代码的图片文件,比如木马图片!

然后这个时候我们去访问这个图片其实是不能够执行里面的恶意代码的,这个时候就需要和文件包含漏洞进行相结合来使用了,我们上传了图片木马之后,从又文件包含漏洞的地方去包含一下这个文件,include()函数就会从上到下去执行这个文件,并且它的特性是从头到尾进行读取,中间报错也不会停止,这样就能达到我们执行恶意代码的目的了!!!

5.防护措施

    1.不要再前端使用JS实施上传限制策略

    2.通过服务端对文件进行限制:比如文件的大小,扩展名,路径,文件类型,文件完整性;
        
        2.1进行多条件组合检查:比如文件
        2.2对上传的文件在服务器上存储时进行重命名(合理的重命名)
        2.3对服务器端上传的文件目录路径进行限制,比如设置为只读,限制执行文件所带来的危害

    要多做几层有效措施,增加容错率!

相关文章:

pikachu靶场总结(三)

五、RCE 1.RCE(remote command/code execute)概述 RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。 远程系统命令执行 一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的…...

onvif相关的http api有哪些功能点

ONVIF 提供了一系列 HTTP API,用于访问和控制支持 ONVIF 的设备。这些 API 基于 SOAP 协议,通过 HTTP 协议传输。主要的 API 分为几个关键的服务类别,每个类别都有特定的操作。以下是 ONVIF 相关的 HTTP API 概述: 1. 设备管理服…...

AI大模型是如何改变我们的日常生活的?

随着AI大模型的不断发展和优化,它已经在各个领域展现出了巨大的潜力和广泛的应用。无论是在科技创新、医疗健康、金融服务、教育培训还是日常生活中,AI大模型都有着重要的作用。它不仅可以帮助人们提高工作效率、提供个性化的服务,还能够改善…...

kubernetes部署Nexus(Helm3)

参考文献: https://help.sonatype.com/en/single-data-center-on-premises-deployment-example-using-kubernetes.htmlhttps://github.com/sonatype/helm3-chartshttps://support.sonatype.com/hc/en-us/articles/7706583820691-How-to-install-Nexus-Pro-instance…...

PDF无法导出中文

font/SIMSUN.TTC with Identity-H is not recognized. 查看BaseFont源码发现".ttc," 改为"SIMSUN.TTC,a"提示数字转换异常 改为"SIMSUN.TTC,11"提示数字索引必须介于0和1之间 改为0或1结果正常 BaseFont baseFont BaseFont.createFont("/U…...

【docker】mysql8.0 的 docker 安装

安装 指定mysql 的安装版本8.0.18 拉取镜像 docker pull mysql:8.0。18创建目录 mkdir -p /opt/docker_volumn/mysql/conf mkdir -p /opt/docker_volumn/mysql/log mkdir -p /opt/docker_volumn/mysql/data mkdir -p /opt/docker_volumn/mysql/mysql-files此步骤是为了将容…...

vue3中父组件与子组件关系的理解 ------类比java中的启动类,类,对象等概念来解释一下

编程时的一点感受: 感觉子组件本身像是java的一个类,父组件像是启动类,父组件里引用子组件像是创建子组件的对象 查找资料后,发现确实如此,在很多方面,Vue 组件确实可以与面向对象编程中的类进行类比。…...

Java设计模式——装饰模式

目录 模式动机 模式定义 模式结构 类图 代码分析 示例:动态添加功能的流 组件接口 具体组件 装饰抽象类 具体装饰类 客户端 模式分析 核心思想 动态扩展功能 组合优于继承 优点 动态扩展功能 组合优于继承 代码复用性高 符合开闭原则 缺点 增加…...

【TouchSocket 和 client.GetStream 区别】

TouchSocket 和 client.GetStream() 是用于网络通信的不同工具和方法,但它们的功能层面和适用范围也有明显区别。下面我来详细解释 TouchSocket 和 client.GetStream() 的差异。 1. TouchSocket TouchSocket 是一个完整的 网络通信框架,专注于为开发者…...

怎么利用商品详情API接口实现数据获取与应用?

在当今数字化的商业时代,高效获取和利用商品数据对于企业和开发者来说至关重要。商品详情 API 接口为我们提供了一种便捷的方式来获取丰富的商品信息,从而实现各种有价值的应用。本文将深入探讨如何利用商品详情 API 接口实现数据获取与应用。 一、商品…...

【AGC005D】~K Perm Counting(计数抽象成图)

容斥原理。 求出f(m) ,f(m)指代至少有m个位置不合法的方案数。 怎么求? 注意到位置为id,权值为v ,不合法的情况,当且仅当 v idk或 v id-k 因此,我们把每一个位置和权值抽象成点 ,不合法的情况之间连一…...

【React】setState (useState) 是怎么记住上一个状态值的?

在 React 中,setState 通过 React 内部的状态管理机制来记住上一个状态值。即使每次组件重新渲染时,函数组件会被重新执行,React 仍能通过其内部的状态管理系统保持和追踪组件的状态变化。下面详细解释其工作原理: 1. setState 的…...

Vue3 使用CryptoJS加密

为什么要加密? 现在的互联网世界充满了各种各样的信息,有些信息非常重要,比如密码、个人信息等。如果我们把这些信息直接发送到服务器,别人可能会截取到,然后偷走我们的信息。为了避免这种情况发生,我们需…...

Feign的使用

一、Feign 介绍 Feign 是一个声明式的 HTTP 客户端,它使得编写 HTTP 客户端变得更加简单。在微服务架构中,使用 Feign 可以轻松地调用其他服务。Feign 内置了 Ribbon 实现负载均衡。 二、Feign 的使用步骤 引入依赖: 在项目的 pom.xml 文件…...

前端反接保护:实用方案解析与探讨

前端反接保护通常采用肖特基二极管方案或PMOS/NMOS方案,本文另外介绍一种理想二极管方案。 1、肖特基二极管方案 由于肖特基二极管具有正向导通电压,只能用于小电流场合,甚至于直接使用普通的整流二极管。比如1A电流,设D1的正向…...

【C++】第五节:内存管理

1、C/C内存分布 看下面一段代码 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const char* pChar3 "abcd";int* ptr1 (int*)malloc(s…...

【Java SE】方法 和 递归 的应用

🔥博客主页🔥:【 坊钰_CSDN博客 】 欢迎各位点赞👍评论✍收藏⭐ 目录 1. 方法的含义 1.1 例子 1.2 方法的概念 2. 方法的定义 3. 实参和形参 3.1 实参和形参的关系 4. 方法的重载 5. 递归 5.1 递归练习 6. 小结 1. 方法的…...

JVS低代码轻应用是什么?是如何拼装的?这篇文章讲的非常详细

1.1JVS轻应用是什么? 轻应用与传统应用的开发过程区别 传统开发(原生开发)采用的方式:①需求了解 ②产品原型③UI设计④建库建表⑤前端还原⑥后端开发⑦前后端联调⑧功能测试⑨部署上线轻应用开发方式(配置化拼装&…...

K210(openMV)与STM32 通信教程

目录 前言: 一、K210 串口部分教程 二、STM32部分 前言: 很多打比赛的同学,通常只是用K210 或者openMV来进行视觉部分的信息采集,传输数据给STM32(或者其他主控那边)进行对分析,对小车或者舵…...

【HarmonyOS】HMRouter使用详解(三)生命周期

生命周期(Lifecycle) 使用HMRouter的页面跳转时,想实现和Navigation一样的生命周期时,需要通过新建生命周期类来实现对页面对某一个生命周期的监控。 新建Lifecycle类 通过继承IHMLifecycle接口实现生命周期接口的方法重写。 通过…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

快刀集(1): 一刀斩断视频片头广告

一刀流&#xff1a;用一个简单脚本&#xff0c;秒杀视频片头广告&#xff0c;还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农&#xff0c;平时写代码之余看看电影、补补片&#xff0c;是再正常不过的事。 电影嘛&#xff0c;要沉浸&#xff0c;…...

关于easyexcel动态下拉选问题处理

前些日子突然碰到一个问题&#xff0c;说是客户的导入文件模版想支持部分导入内容的下拉选&#xff0c;于是我就找了easyexcel官网寻找解决方案&#xff0c;并没有找到合适的方案&#xff0c;没办法只能自己动手并分享出来&#xff0c;针对Java生成Excel下拉菜单时因选项过多导…...

SpringAI实战:ChatModel智能对话全解

一、引言&#xff1a;Spring AI 与 Chat Model 的核心价值 &#x1f680; 在 Java 生态中集成大模型能力&#xff0c;Spring AI 提供了高效的解决方案 &#x1f916;。其中 Chat Model 作为核心交互组件&#xff0c;通过标准化接口简化了与大语言模型&#xff08;LLM&#xff0…...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL

ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...

盲盒一番赏小程序:引领盲盒新潮流

在盲盒市场日益火爆的今天&#xff0c;如何才能在众多盲盒产品中脱颖而出&#xff1f;盲盒一番赏小程序给出了答案&#xff0c;它以创新的玩法和优质的服务&#xff0c;引领着盲盒新潮流。 一番赏小程序的最大特色在于其独特的赏品分级制度。赏品分为多个等级&#xff0c;从普…...

c++算法学习3——深度优先搜索

一、深度优先搜索的核心概念 DFS算法是一种通过递归或栈实现的"一条路走到底"的搜索策略&#xff0c;其核心思想是&#xff1a; 深度优先&#xff1a;从起点出发&#xff0c;选择一个方向探索到底&#xff0c;直到无路可走 回溯机制&#xff1a;遇到死路时返回最近…...