返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >浅谈基础RCE
  • 796
分享到

浅谈基础RCE

安全服务器web安全 2023-09-03 08:09:32 796人浏览 独家记忆
摘要

一、什么是rce 二、能简单利用达到rce目的那些函数 1.eval() 2.assert()断言函数 3.call_user_func()&call_user_func_array()回调函数 4.create_function() 三

一、什么是rce

二、能简单利用达到rce目的那些函数

1.eval()

2.assert()断言函数

3.call_user_func()&call_user_func_array()回调函数

4.create_function()

三、命令执行中所需要的函数

①system()

②passthru()

③exec()

1.直接执行指令

2.间接使用其它函数达到指令的执行目的

④shell_exec()&反撇(``)

四、命令执行绕过

1.空格过滤

2.过滤了cat、ls、flag等一些关键字

①cat过滤后的替代函数:

②'\'和单双引号以及反撇绕过过滤

③变量绕过

④命令拆分绕过

⑤进制编码绕过

⑥通配符正则绕过

⑦system()函数过滤

⑧使用∗和@,x(x表示任意数字),{数字}


一、什么是rce

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

rce简单来说就是远程命令执行漏洞。

二、能简单利用达到rce目的那些函数

1.eval()

属于rce中最常见的一个函数

官方的定义:

eval() 函数把字符串按照 PHP 代码来计算。

该字符串必须是合法的 php 代码,且必须以分号结尾。

如果没有在代码字符串中调用 return 语句,则返回 NULL。如果代码中存在解析错误,则 eval() 函数返回 false。

也就是说当出现eval函数执行时,会将你所需要执行某些东西转化为php代码执行,最后利用某些未被禁止的危险函数执行命令达到目的

2.assert()断言函数

官方的解释:

PHP 5

assert(mixed $assertion, string $description = ?): bool

PHP 7

assert(mixed $assertionThrowable $exception = ?): bool

assert() 会检查指定的 assertion 并在结果为 false 时采取适当的行动。

另外,如果assertion是字符串,它将会被assert()当做PHP代码来执行

单从效果来看,assert与eval非常相似。但assert实际上更为复杂,因为只讨论rce所以这里不细说

3.call_user_func()&call_user_func_array()回调函数

call_user_func(callable $callbackmixed $parameter = ?, mixed $... = ?): mixed

第一个参数 callback 是被调用的回调函数,其余参数是回调函数的参数。

call_user_func_array(callable $callback, array $param_arr): mixed

把第一个参数作为回调函数(callback)调用,把参数数组作(param_arr)为回调函数的的参数传入。

这两个函数作用相同,区别在于传参的不同

4.create_function()

create_function(string $args,string $code)

string $args 声明的函数变量部分

string $code 执行的方法代码部分

根据传递的参数创建匿名函数,并为其返回唯一名称。

这里举个栗子:

三、命令执行中所需要的函数

①system()

对某些指令进行执行的函数,比如:ls、cat、whoami、ifconfig等指令

②passthru()

与system用法基本一致,在system函数被过滤后考虑使用

exec()

使用姿势:

1.直接执行指令

";     print_r($file); ?>​

2.间接使用其它函数达到指令的执行目的

";  ?>​

shell_exec()&反撇(``)

shell_exec与``作用相同,但无回显,需要echo或其他的输出函数使得其回显

四、命令执行绕过

1.空格过滤

当出现空格的过滤可以使用下面的替代空格

%09(url传递)(tab)

%20(space)

${IFS}

$IFS$9

<>(cat<>/flag)

<(cat

$IFS

{cat,flag}//花括号

2.过滤了cat、ls、flag等一些关键字

①cat过滤后的替代函数:

more:一页一页的显示档案内容
less:与 more 类似
head:查看头几行
tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
tail:查看尾几行
nl:显示的时候,顺便输出行号
od:以二进制的方式读取档案内容
vi:一种编辑器,可以查看
vim:一种编辑器,可以查看
sort:可以查看
uniq:可以查看
file -f:报错出具体内容
sh /flag 2>%261  //报错出文件内容

②'\'和单双引号以及反撇绕过过滤

如:

ca\t flag

ca''t flag

ca""t flag 

ca``t flag

 ③变量绕过

a=c;b=a;c=t;$a$b$c flag

④命令拆分绕过

和变量绕过是一个道理

a=fl;b=ag.php;echo $a$b;

⑤进制编码绕过

        0x01 16进制绕过

        63617420666c61672e706870为cat flag.php的十六进制

        

        0x02 base64&base32编码绕过

        cat flag的base64编码为Y2F0IGZsYWcucGhw

        

         cat flag的base32编码为MNQXIIDGNRQWOLTQNBYA====

        

         base16也是一个道理

⑥通配符正则绕过

如果正则匹配过滤了一些关键字,如:flag、php、txt等等可以使用问号(?)代替某个字符

适当的可以用星号(*)

注意:这里的?和*都只能用于文件名,如果是命令(类似ls cat等)就不适用

cat flag.php === cat ??ag.php ===cat ?la* 

⑦system()函数过滤

        0x01 十六进制绕过

        “\x73\x79\x73\x74\x65\x6d”(); === system();

        0x02 括号绕过

        (sy.(st).em)(); === system();

        0x03 内敛替代

echo `ls`;

echo $(ls);

?>

?>

 等效于

        0x04 取反(~)绕过

        (~%8C%86%8C%8B%9A%92)();===system();

        

⑧使用∗和@,x(x表示任意数字),{数字}

在没有传参的情况下,这三个特殊变量值都是为空的,所以可以利用其绕过一些过滤

ca$*t    flag.php

ca$@t   flag.php

ca$4t    flag.php

cat${10}   flag.php 

最后:如果绕过了所有的障碍到达最后一步的时候,可能会有些人出现一个问题-->flag在哪?

确实,有些题目恶心人,flag不放在根目录下,这时候可以利用find指令

system("find / -name flag*"):查找所有文件名匹配flag*的文件system("cat $(find / -name flag*)"):打印所有文件名匹配flag*的文件

参考:RCE函数利用_Ciyaso的博客-CSDN博客

RCE漏洞之绕过_h0ld1rs的博客-CSDN博客_rce绕过

来源地址:https://blog.csdn.net/qq_51295677/article/details/122629200

--结束END--

本文标题: 浅谈基础RCE

本文链接: https://lsjlt.com/news/391868.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 浅谈基础RCE
    一、什么是rce 二、能简单利用达到rce目的那些函数 1.eval() 2.assert()断言函数 3.call_user_func()&call_user_func_array()回调函数 4.create_function() 三...
    99+
    2023-09-03
    安全 服务器 web安全
  • 浅谈Java基础知识之BigDecimal
    目录一、基本使用二、舍入模式三、注意事项四、异常处理 ArithmeticException异常一、基本使用 使用示例: // 初始化 BigDecimal bd1=new Bi...
    99+
    2024-04-02
  • Java基础之浅谈hashCode()和equals()
    写在前面 其实很早我就注意到阿里巴巴Java开发规范有一句话:只要重写 equals,就必须重写 hashCode。 我想很多人都会问为什么,所谓知其然知其所以然,对待知识不单止知...
    99+
    2024-04-02
  • 浅谈VUE uni-app 基础组件
    1 .scroll-view 使用竖向滚动时,需要给 一个固定高度,通过 css 设置 height;使用横向滚动时,需要给添加white-space: nowrap;样式。 s...
    99+
    2024-04-02
  • 浅谈Python基础之I/O模型
    一、I/O模型 IO在计算机中指Input/Output,也就是输入和输出。由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘、网络等,就需要IO接口。 ...
    99+
    2022-06-04
    浅谈 模型 基础
  • 浅谈java Properties类的使用基础
    Properties类继承自HashTable,通常和io流结合使用。它最突出的特点是将key/value作为配置属性写入到配置文件中以实现配置持久化,或从配置文件中读取这些属性。它的这些配置文件的规范后缀名为".properties"。表...
    99+
    2023-05-30
  • 浅谈java网络编程基础知识
    这篇文章主要浅谈java网络编程基础知识,内容简而易懂,希望大家可以学习一下,学习完之后肯定会有收获的,下面让小编带大家一起来看看吧。网络基础知识1、OSI分层模型和TCP/IP分层模型的对应关系这里对于7层模型不展开来讲,只选择跟这次系列...
    99+
    2023-05-30
    java ava
  • 学习日志-python基础01,浅谈p
    ==比较操作符:用来比较两个对象是否相等,value做为判断因素is同一性运算符:比较判断两个对象是否相同,id做为判断因素 >>> [] is [] False >>> [] == [] Tru...
    99+
    2023-01-31
    浅谈 基础 日志
  • 浅谈C++内存管理基础知识
    目录概述c++可用内存c语言的可用内存c++新增内存区域new和malloc智能指针引入智能指针的实现java延伸java语言整体框架java的垃圾回收机制总结 概述 内存管理的原理...
    99+
    2024-04-02
  • 浅谈Python基础之列表那些事儿
    一、列表的格式 二、列表的相关操作("增"、"删"、"改",“查”) <1> 添加元素 append()通过append可以向列表添加元素。 例: 运行结果: <2> 修改元素("改")...
    99+
    2022-06-02
    Python列表操作 python list列表
  • 浅谈SpringSecurity基本原理
    目录一、SpringSecurity 本质二、典型过滤器2.1 FilterSecurityInterceptor2.2 ExceptionTranslationFilter2.3 ...
    99+
    2024-04-02
  • 浅谈Spring Bean的基本配置
    目录一、Spring中set方法的注入1.1 set的两种注入方法1.2 type属性1.3 Date()类型的注入二、Spring_scop三、自动注入(autowire)四、构造...
    99+
    2024-04-02
  • 浅谈C++流库的基本结构
    目录一、流库的基本结构二、流库常用API流库是C++标准库的一部分,它提供了一组与输入和输出流相关的类和函数,使得数据的读写变得非常方便和灵活。下面我们将介绍C++流库的基本结构及其...
    99+
    2023-05-16
    C++流库 C++流库基本结构
  • 浅谈Python Pygame图像的基本使用
    笛卡尔坐标系 游戏离不开坐标,我们来康康pygame中坐标是如何设立的吧~ 窗口左上角坐标(0,0),横轴正向向右,纵轴正向向下 实际效果 碰到边框就返回(其实是小球碰撞实验,我不爱用正经的小球,所以…) 代码 ...
    99+
    2022-06-02
    Pygame图像的基本使用 python pygame
  • 浅谈MySQL中分区表基本类型
    小编这次要给大家分享的是浅谈MySQL中分区表基本类型,文章内容丰富,感兴趣的小伙伴可以来了解一下,希望大家阅读完这篇文章之后能够有所收获。MySQL分区表概述随着MySQL越来越流行,Mysql里面的保存...
    99+
    2024-04-02
  • 浅谈Java基准性能测试之JMH
    目录一、JMH vs JMeter二、JMH基本用法2.1、创建JMH项目2.2、编写基准测试代码2.3、JMH打包、运行2.4、JMH与Springboot三、JMH注解3.1、J...
    99+
    2024-04-02
  • 浅析Python基础-流程控制
    Python编程语言的作用非常强大,而且其应用方便的特点也对开发人员起到了非常大的作用。在这里我们就可以先从Python流程控制关键字的相关概念开始了解,从而初步掌握这一语言的特点。 Python是一种解释...
    99+
    2022-06-04
    流程 基础 Python
  • Android UIAutomator浅谈
      Android UIAutomator浅谈   简介   Uiautomator是谷歌推出的,用于UI自动化测试的工具,也是普通的手工测试,点击每个控件元素看看输出...
    99+
    2022-06-06
    uiautomator Android
  • 浅谈Vue DIFF
    目录不带 key 的操作带 key 的操作简单 DIFFVue是如何找到需要进行移动的元素Vue是如何移动元素的Vue是如何进行新增元素的Vue 是如何删除多余的旧元素的双指针 DI...
    99+
    2023-05-19
    Vue DIFF
  • 浅谈 TLS 1.3
    本文主要从TLS 1.3的优势、部署和时间发展线介绍了这种用于为计算机网络通信提供安全性的密码协议TLS。 TLS简介按照维基百科的定义,TLS 是一种用于为计算机网络通信提供安全性的密码协议,其前身安全套接层(SSL)想必很多人...
    99+
    2023-06-03
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作