无字母数字的绕过方法

php代码

 <?phpif(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__);}

题目的限制:

  1. webshell长度不超过35位

  2. 除了不包含字母数字,还不能包含$_

PHP7.0版本巧妙解法

在PHP7.0版本之后进行了改动如下

7版本相对于5版本的更新内容.png

PHP7前是不允许用($a)();这样的方法来执行动态函数的,但PHP7中增加了对此的支持。所以,我们可以通过('phpinfo')();来执行函数,第一个括号中可以是任意PHP表达式。但是这样依然有字符,所以需要构造一个可以生成phpinfo这个字符串的PHP表达式即可。payload如下(不可见字符用url编码表示):

 (~%8F%97%8F%96%91%99%90)();取反 --- 反码 --- ~

PHP5版本的绕过

此时,我们尝试用PHP7的payload,将会得到一个错误。因为PHP5版本不支持这种方法。所以我们无法通过这种方法来继续下去。

此时我换种方法,我们是不是可以通过文件来执行。然后通过执行该文件的方式来绕过字母数字的限制?

在PHP代码中,如果存在文件上传,无论PHP代码是否接收该文件,都会生成临时文件。然后等待PHP代码执行完成之后立马删除文件。我们是不是可以通过上传文件,然后再通过代码中的GET传参执行该文件呢?

所以接下来问题很明显了

  • 代码中最后是通过eval函数执行的,但是他不能执行Linux命令

  • Linux下如何执行没有执行权限的文件?

  • 如何抢在删除文件前执行该文件?

  • 如何精准找到临时文件的位置?

解决问题

第一个问题:代码中最后是通过eval函数执行的,但是他不能执行Linux命令。

在Linux系统中可以通过反引号执行命令,因为反引号不属于“字母”、“数字”,所以我们可以执行系统命令。

第二个问题:Linux下如何执行没有执行权限的文件?

shell下可以利用.来执行任意脚本,.或者叫period,它的作用和source一样,就是用当前的shell执行一个文件中的命令。比如,当前运行的shell是bash,则. file的意思就是用bash执行file文件中的命令。用. file执行文件,是不需要file有x权限的。那么,如果目标服务器上有一个我们可控的文件,那不就可以利用.来执行它了。

第三个问题:如何抢在删除文件前执行该文件?

在PHP中如果在代码运行过程中接收到的临时文件,是不会立刻删除的。等到整个PHP代码全部执行完毕之后才会立刻删除临时文件。所以我们先加上sleep,增加代码执行时间。

并且也不用担心POST的提交是提交到这个php代码中的,此时的get和pos请求是同步触发的。也就意味着PHP的代码不执行结束,临时文件是不会被删除的。

第四个问题:如何精准找到临时文件的位置?

就算能执行文件了,但是如果想精确匹配到文件。我们依然需要文件目录和文件名称。但是PHP生成的临时文件名称是随机的,不固定。并且在写匹配路径的时候也需要写字母或者数字,仍然过不去正则。

在PHP的配置文件中,可以找到临时文件生成目录。

 vim /etc/php/7.3/fpm/php.ini.....sys_temp_dir="/tmp" # 临时文件目录.....update_tmp_dir = "/tmp" # 上传文件临时目录.....

现在就剩下文件名称了。此时就可能想到学的Linux下模糊匹配。对于通配符,可能大部分知道的都只有*?

  • *可以代替0个及以上任意字符

  • ?可以代表1个任意字

所以我们可以试一下使用/*/????????? 或者/???/?????????来匹配文件。此时会发现有大量的文件,根本找不到想要的文件。

所以只使用以上两个通配符就解决不了问题了。所以需要去官方文档查看更多的glob通配符。阅读Linux的文档( glob(7) - Linux manual page ),可以学到更多有趣的知识点。

其中我们发现可以发现,glob支持用[^x]的方法来构造“这个位置不是字符x”。那么,我们用这个姿势干掉一部分不是连续字母的。因为PHP生成的临时文件名称全是随机的大小写字母加数字。所以临时文件名称不可能存在特殊字符。通过[^.][^-][^_]可以排除一些内容,但是这样发现依然很多内容。

所以我们需要找到临时文件的通性,我们通过不断的生成文件,我们发现PHP生成的临时文件是有规律的,文件名字中大小写各有百分之五十的概率。并且Linux的文件名称基本上没有大写字母。所以我们可以匹配文件名称的最后一个字母。

但是要如何实现匹配大写字母呢?

glob的文档,我们可以发现一个和正则表达式类似,glob支持利用[0-9]来表示一个范围。

并且通过查看ascii编码发现大写字母都是字@ 和 [ 之间。那么,我们可以利用[@-[]来表示大写字母。

经过查看资料修改,此时的匹配语句如下。此时可以匹配到文件了。

 /???/????????[@-[]

构造语句,执行命令

通过BurpSuite软件进行抓包、改包。来上传文件。由于文件上传的时候需要一个特殊的格式。我们可以编写一个HTML的网页用来上传文件。

 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body><form action="web.php" method="post" enctype="multipart/form-data"><input type="file" name="file" id=""><input type="submit" value="提交"></form></body></html>

通过GET传递的参数,需要到eval里写代码匹配到文件然后执行。在PHP的官方文档中,明确说明传递的参数如果写代码是需要先加上?>,之后在写PHP代码。

所以构建的code参数如下

 ?code=?><?=`. /???/????????[@-[]`;?>

修改POST的包来进行文件上传。并且同时通过GET传递参数访问临时文件。

注意如果是在URL之中填写的话注意空格会被编码。所以需要使用加号代替。并且对符合要进行编码,避免错误。加号不需要再次编码,否则无法显示内容。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

书籍分享:【矩阵力量】豆瓣评分高达9.6,看完感叹《矩阵论》又白学了

书籍分享&#xff1a;【矩阵力量】豆瓣评分高达9.6&#xff0c;看完感叹《矩阵论》又白学了 《矩阵力量》简要介绍书籍下载链接 《矩阵力量》简要介绍 《矩阵力量》是姜伟生精心编写的线性代数的深度理解之作&#xff0c;作者将抽象的线性代数概念用通俗易懂的语言和大量生动形…

Windows下,C# 通过FastDDS高效通信

目录 1、安装FastDDS 库2、使用IDL定义自己的数据格式3、生成DLL3.1 托管 &#xff08;Managed&#xff09;模式3.2 非托管 &#xff08;Unmanaged&#xff09;模式 -- 可用于Unity 代码示例 eprosima Fast DDS is a C implementation of the DDS (Data Distribution Service) …

vscode用快捷键一键生成vue模板

项目中有些代码模块是固定的&#xff0c;如下面的代码所示&#xff0c;为了不重复写这些相同的代码&#xff0c;我们可以使用快键键一键生成模板。 流程&#xff1a; 中文&#xff1a;首选项-> 用户代码片段 -> 输入框中输入vue,找到vue.json文件&#xff08;没有vue.j…

Vue-07.生命周期

生命周期&#xff1a; 生命周期&#xff1a;指一个对象从创建到销毁的全过程 生命周期的八个阶段&#xff1a;每触发一个阶段&#xff0c;就会自动执行一个生命周期方法&#xff08;钩子方法&#xff09; 状态 阶段周期 beforeCreated 创…

内部排序(插入、交换、选择)

一、排序的部分基本概念 1. 算法的稳定性 若待排序表中有两个元素 Ri 和 Rj &#xff0c;其对应的关键字相同即 keyi keyj&#xff0c;且在排序前 Ri 在 Rj 的前面&#xff0c;若使用某一排序算法排序后&#xff0c;Ri 仍然在 Rj 的前面&#xff0c;则称这个排序算法是稳定的…

【MySQL】详解数据库约束、聚合查询和联合查询

数据库约束 约束类型 数据库的约束类型主要包括以下几种&#xff1a; 主键约束&#xff08;Primary Key Constraint&#xff09;&#xff1a;确保表中的每一行都有唯一的标识&#xff0c;且不能为NULL。 外键约束&#xff08;Foreign Key Constraint&#xff09;&#xff1a…

5.ADC(模拟信号转数字信号)

理论 3个ADC控制器 转换&#xff1a;单次转换模式、 连续转换模式 转换时间 采样时间 12.5周期 当ADCCLK(时钟) 14MHz&#xff0c;采样时间为1.5周期&#xff0c;TcoNv(转换时间) 1.5 12.5 14 周期 1us 采样精度&#xff1a;12位/16位(212 4096) 实际电压值 (通道采…

Java面试题--JVM大厂篇之破解 JVM 性能瓶颈:实战优化策略大全

目录 引言: 正文: 1. 常见的JVM性能问题 频繁的GC导致应用暂停 内存泄漏导致的内存不足 线程争用导致的CPU利用率过高 类加载问题导致的启动时间过长 2. 优化策略大全 2.1 代码层面的优化 2.1.1 避免不必要的对象创建 2.1.2 优化数据结构的选择 2.1.3 使用并发工具…

Python爬虫:下载4K壁纸

&#x1f381;&#x1f381;创作不易&#xff0c;关注作者不迷路&#x1f380;&#x1f380; 目录 &#x1f338;完整代码 &#x1f338;分析 &#x1f381;基本思路 &#x1f381;需要的库 &#x1f381;提取图片的链接和标题 &#x1f453;寻找Cookie和User-Agent &…

突破•指针六

听说这是目录哦 数组和指针笔试题解析&#x1fae7;一维数组1&#x1f355;&#x1f355;&#x1f355;&#x1f355;&#x1f355;&#x1f355;&#x1f355; 字符数组1&#x1f354;&#x1f354;&#x1f354;&#x1f354;&#x1f354;&#x1f354;&#x1f354;2&#…

PCL 采样一致性模型介绍

采样一致性可以简单高效的检测出一些具有数学表达式的目标模型。PCL中的sample consensus模块中不仅包含各种的采样一致性估计方法,也包含一些已经编写好的数学模型,下面主要介绍一下PCL中的采样一致性模型。 1. 二维圆模型 pcl::SampleConsensusModelCircle2D< PointT …

AI学习记录 - 自注意力机制的计算流程图

画图不易&#xff0c;如果你从这个图当中得到灵感&#xff0c;大佬赏个赞 过段时间解释一下&#xff0c;为啥这样子计算&#xff0c;研究这个自注意力花了不少时间&#xff0c;网上很多讲概念&#xff0c;但是没有具体的流程图和计算方式总结…

Win11表情符号输入详细教程,一学就会!

在Win11电脑操作中&#xff0c;用户可以根据自己的需求&#xff0c;点击输入想要的表情符合。但许多新手用户不知道怎么操作才能输入&#xff1f;这时候用户按下快捷键&#xff0c;快速打开表情符号选择界面&#xff0c;然后选择需要的表情符号点击输入即可。以下系统之家小编给…

Can GPT-3 Perform Statutory Reasoning?

文章目录 题目摘要相关工作SARAGPT-3 对美国法典的了解GPT-3 在对合成法规进行简单推理时遇到困难结论 题目 GPT-3 可以进行法定推理吗&#xff1f; 论文地址&#xff1a;https://arxiv.org/abs/2302.06100 摘要 法定推理是用事实和法规进行推理的任务&#xff0c;法规是立法机…

Linux嵌入式学习——C++学习(2)

一、标识符的作用域和可见性 &#xff08;一&#xff09;作用域 1、全局作用域 在函数外部声明的变量和函数具有全局作用域。这些变量和函数在程序的任何地方都可以被访问。 2.局部作用域 在函数内部、循环体内部或条件语句内部声明的变量具有局部作用域。这些变量只能在其…

X射线物质质量衰减系数的查询计算方法

最近进行硕士毕业课题&#xff0c;需要各种各样物质的质量衰减系数&#xff08;线性衰减系数&#xff09;&#xff0c;包括高原子序数的金属物质还有一些复杂的化合物或者混合物&#xff0c;之前知道美国的XCOM &#xff1a;XCOM: Photon Cross Sections Database这个数据库可以…

仓颉语言运行时轻量化实践

杨勇勇 华为语言虚拟机实验室架构师&#xff0c;目前负责仓颉语言静态后端的开发工作 仓颉语言运行时轻量化实践 仓颉Native后端&#xff08;CJNative&#xff09;是仓颉语言的高性能、轻量化实现。这里的“轻量化”意指仓颉程序运行过程中占用系统资源&#xff08;内存、CPU等…

dll修复工具有没有免费的?排行榜Top8更新,一键修复所有dll缺失

DLL 错误是常见的系统问题&#xff0c;可能导致系统崩溃或 Windows 故障&#xff0c;这让每天使用电脑的人倍感烦恼。为了有效解决这些反复出现的问题&#xff0c;使用 DLL 修复工具显得尤为重要。对于喜欢尝试免费软件的用户&#xff0c;市面上有许多优秀的免费dll 修复工具可…

打开 Mac 触控板的三指拖移功能

对于支持力度触控的触控板&#xff0c;可以选择使用三指手势来拖移项目。 相应的设置名称会因你使用的 macOS 版本而有所不同&#xff1a; 选取苹果菜单  >“系统设置”&#xff08;或“系统偏好设置”&#xff09;。 点按“辅助功能”。 点按“指针控制”&#xff08;…

【vue3】【elementPlus】【国际化】

1.如需从0-1开始&#xff0c;请参考 https://blog.csdn.net/Timeguys/article/details/140995569 2.使用 vue-i18n 模块&#xff1a; npm i vue-i18n3.在 src 目录下创建 locales 目录&#xff0c;里面创建文件&#xff1a;en.js、zh-cn.js、index.js 语言js文件&#xff1a;…