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对服务器端上传的文件目录路径进行限制,比如设置为只读,限制执行文件所带来的危害

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/881383.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot和Vue的餐饮管理系统

基于springbootvue实现的餐饮管理系统 (源码L文ppt)4-078 第4章 系统设计 4.1 总体功能设计 一般个人用户和管理者都需要登录才能进入餐饮管理系统,使用者登录时会在后台判断使用的权限类型,包括一般使用者和管理者,一…

星融元P4交换机:在全球芯片短缺中,为您的网络可编程之路保驾护航

当数字化转型成为新常态,云计算、物联网、5G和人工智能等技术正以惊人的速度进步,重塑了我们对网络设备性能和适应性的预期。在这场技术革新的浪潮中,网络的灵活性、开放性和编程能力成为了推动行业发展的关键。P4可编程交换机,以…

飞驰云联入围2024西门子Xcelerator公开赛50强

近日,备受瞩目的西门子 Xcelerator公开赛公布结果,经过激烈的筛选,Ftrans飞驰云联《Ftrans制造业数据交换安全管控解决方案》凭借优异的表现,成功入围 Xcelerator公开赛50强! Xcelerator 公开赛以工信部智能制造典型场…

胤娲科技:00后揭秘——AI大模型的可靠性迷局

当智能不再“靠谱”,我们该何去何从? 想象一下,你向最新的GPT模型提问:“9.9和9.11哪个大?”这本应是个小菜一碟的问题,却足以让不少高科技的“大脑”陷入沉思, 甚至给出令人啼笑皆非的答案。近…

实战逆向RUST语言程序

实战为主,近日2024年羊城杯出了一道Rust编写的题目,这里将会以此题目为例,演示Rust逆向该如何去做。 题目名称:sedRust_happyVm 题目内容:unhappy rust, happy vm 关于Rust逆向,其实就是看汇编&#xff…

太阳诱电电感选型方法及产品介绍

功率电感在电子电路中被广泛应用,太阳诱电的功率电感从原材料开始进行研发,生产和销售。 本次研讨会将带领大家更加了解功率电感的选型方法,以及各种功率电感的种类和特征。 此外,也将介绍太阳诱电的最新产品阵容。本次研讨会预计…

边学边用docker-为什么要进到容器里面修改权限

在 Docker 容器中修改文件夹权限,通常需要进入容器内部来执行命令,这是因为 Docker 容器提供了一个隔离的环境,其内部的文件系统与宿主机是隔离的。 1. 隔离性:Docker 容器设计为轻量级的隔离环境,每个容器都有自己的…

如何在表中设置主键约束?

主键约束是数据库表设计中的一种完整性约束,用于唯一标识表中的每一行。 每个表只能有一个主键,且主键值必须是唯一的,并且不能为NULL。主键可以由一个字段或多个字段组成。 主键的存在有助于提高数据检索的速度和确保数据的完整性和一致性…

vue2和vue3中的组件间通信知识点总结

vue2中组件间通信 在Vue2中,组件间的通信是构建复杂应用的关键。以下是一些常见的Vue2组件间通信方式,并附有详细说明和示例: 1. Props(父子组件通信) Props是Vue中用于父子组件通信的一种机制。父组件通过属性&…

社工字典生成工具 —— CeWL 使用手册

GitHub - digininja/CeWL: CeWL is a Custom Word List GeneratorCeWL is a Custom Word List Generator. Contribute to digininja/CeWL development by creating an account on GitHub.https://github.com/digininja/CeWL/ 0x01:CeWL 简介 CeWL(Cust…

openmmlab实现图像超分辨率重构

文章目录 前言一、图像超分辨率重构简介二、mmmagic实现图像超分 前言 超分辨率重构技术,作为计算机视觉领域的一项重要研究课题,近年来受到了广泛关注。随着科技的飞速发展,人们对图像质量的要求越来越高,尤其是在智能手机、监控…

【算法】链表:24.两两交换链表中的节点

目录 1、题目链接 2、题目介绍 3、解法 4、代码 1、题目链接 24. 两两交换链表中的节点 - 力扣(LeetCode) 2、题目介绍 3、解法 引入伪头节点: 为了处理头节点可能被交换的情况,我们引入一个伪头节点(dummy no…

AI助力农作物自动采摘,基于嵌入式端超轻量级模型LeYOLO全系列【n/s/m/l】参数模型开发构建作物生产场景下番茄采摘检测计数分析系统

去年十一那会无意间刷到一个视频展示的就是德国机械收割机非常高效自动化地24小时不间断地在超广阔的土地上采摘各种作物,专家设计出来了很多用于采摘不同农作物的大型机械,看着非常震撼,但是我们国内农业的发展还是相对比较滞后的&#xff0…

快速生成单元测试

1. Squaretest插件 2. 依赖 <dependency><groupId>junit</groupId>

Mysql和Oracle使用差异和主观感受

这两种常用的关系型数据库有何差异&#xff1f; 支持和社区 MySQL&#xff1a;有一个活跃的开源社区&#xff0c;用户可以获取大量的文档和支持。 Oracle&#xff1a;提供了专业的技术支持&#xff0c;但通常需要额外的费用。 易用性 MySQL&#xff1a;通常被认为是更易于学…

新赚米渠道,天工AI之天工宝典!

新赚米渠道&#xff0c;天工AI之天工宝典&#xff01; 引言 随着人工智能和数字创作工具的发展&#xff0c;内容创作的门槛不断降低&#xff0c;为普通用户提供了更多的赚钱机会。在这样的背景下&#xff0c;天工AI应运而生&#xff0c;凭借其强大的创作能力和最新更新的“天…

JZ2440开发板——异常与中断

以下内容源于韦东山课程的学习与整理&#xff0c;如有侵权请告知删除。 一、中断概念的引入与处理流程 1.1 中断概念的引入 这里有一个很形象的场景比喻&#xff1a;假设一位母亲在大厅里看书&#xff0c;婴儿在房间里睡觉&#xff0c;这位母亲怎样才能知道这个孩子睡醒了&a…

ESP32-C3实现GPIO输出高低电平

1. 定义 GPIO 管脚 首先&#xff0c;定义你将要使用的 GPIO 管脚号。 #define GPIO_OUTPUT_PIN 2 // 定义一个 GPIO 管脚作为输出2. 初始化 GPIO 在 setup() 函数中&#xff0c;配置该 GPIO 管脚为输出模式。 void setup() {pinMode(GPIO_OUTPUT_PIN, OUTPUT); // 设置 GPIO …

【MODIS处理工具】MRT(MODIS Reprojection Tool) 下载及安装

【MODIS处理工具】MRT下载及安装教程 MRT软件下载MRT软件使用参考1999年12月,中分辨率成像光谱仪MODIS搭载美国宇航局NASA对地观测系统EOS平台的Terra卫星发射到太空。2002年5月,第二个MODIS传感器搭载Aqua卫星发射。MODIS的主要任务是对地球陆地、海洋和大气进行连续的全面观…

《Linux从小白到高手》理论篇:Linux的系统环境管理

List item 值此国庆佳节&#xff0c;深宅家中&#xff0c;闲来无事&#xff0c;就多写几篇博文。本篇详细深入介绍Linux的系统环境管理。 环境变量 linux系统下&#xff0c;如果你下载并安装了应用程序&#xff0c;很有可能在键入它的名称时出现“command not found”的提示…