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

无字母绕过webshell

目录

代码

payload构造

php7

php5

构造payload


代码

不可以使用大小写字母、数字和$然后实现eval的注入执行

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

payload构造

php7

在PHP7中我们可以使用('phpinfo')(),这样的代码执行,如下图

但是我们如果直接使用('phpinfo')()因为有英文,所以我们可以尝试使用取反绕过,如下

先取反

再进行注入,将刚刚取反的字符串在地址栏中再次取反,当然不止可以执行phpinfo可以执行任意php代码

http://192.168.244.152:8080/web.php?code=(~%8F%97%8F%96%91%99%90)();

php5

在php5中是不支持('phpinfo')()

所以在php5中我们就要换一种绕过方式。抓取php的临时文件,然后要用code参数匹配到临时文件,然后放到eval上,然让eval执行系统命令(这里临时文件是不会删除的因为php程序没有走完走完才会删除临时文件)。在PHP中,当通过POST方法提交大型数据时,PHP会将提交的数据暂存到临时文件中,而不是保存在内存中。这时我们可以通过抓取临时文件执行临时文件的内容。但是抓取临时文件很难因为你上传上去后,没有接收文件,系统就会很快的删除掉你的文件,然后想要接收文件还需要知道文件名字,但是文件名是一个随机字符没有用办法接到。所以我们可以使用一些过滤方法来获取文件名字。

下面我们来看一下临时文件长什么样子,并尝试执行临时文件

首先修改php配置文件

尝试进行post传参:

get.html文件

test.php文件

尝试上传

 然后我们在要上传的文件写我们的系统执行命令。如果可以访问并执行临时文件,就可以进行命令执行了,我们在要上传的文件上写入你要执行的命令,如下图所示

下载来看一下在tml下的临时文件

使用. 临时文件名绕过加权限的步骤,如下图执行成功。

上面我们既然执行了临时文件,那么我们现在剩下的问题就是找到我们的临时文件,这样才可以在网站中进行命令执行。对于这道题目来说,我们要匹配临时文件是不可以使用英文和数字进行匹配的所以不可以/tmp/php*这样找。那应该如何进行临时文件名的查找呢,我们来看一下下面这个技巧。

首先说一下php的临时文件最后一个字母可能是大写字母(这个大写小写只有50%的概率),而在linux中文件后缀几乎就没有大写的字母。所以我们可以匹配最后一个大写字母,正好Linux中有一个叫做glob的通配符可以单独匹配大写字符

下面代码可以匹配在/有3位的文件夹下的/有9位并且最后一位还是的文件在ascii码中@-[之间就是大写字母

ls -al /???/????????[@-[]

构造payload

抓一个文件上传的包,抓这个包是为了改造web.php的包

抓取的web.php的数据包

改造web.php的包

先将web.php改成post传参方式

修改Content-Type字段,和复制传输内容,保持一致

添加get参数

这里?>的意思是eval有一个标签需要闭合,如下官方文档解释

代码不能包含打开/关闭 PHP tags。比如, 'echo "Hi!";' 不能这样传入: '<?php echo "Hi!"; ?>'。但仍然可以用合适的 PHP tag 来离开、重新进入 PHP 模式。比如 'echo "In PHP mode!"; ?>In HTML mode!<?php echo "Back in PHP mode!";'

然后=的意思就相当于=,这是<?= 是 PHP 的短标签,用于输出一个表达式的值。它是 <?php echo 的简写

··反引号可以在eval中命令执行在这里的代码就是上面说的匹配上文件,再进行命令执行,然后由于这个是get传参所以需要需要进行url编码,不过这是再bp下所以转不转码都可以,然后就执行成功了

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

在这个里面首先进行post提交产生临时文件,然后再传入get,只要程序不执行完临时文件就不会删除

结果忘记截图了

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 手机云测试平台推荐
  • grom接入Prometheus,grafana
  • 我从“天坑”专业转行到AI工程师,年薪一跃30W!
  • 初识python人脸识别(简单小项目)
  • Android 启动动画太生硬
  • Google Earth Engine(GEE)——在选定的时间内,按照时间循环筛选影像中的第一幅影像并导出到Google 硬盘
  • Leetcode - 周赛410
  • 企业如何组建安全稳定的跨国通信网络
  • Android SystemServer启动流程
  • 有什么蓝牙耳机值得推荐一下吗?百元开放式耳机选购指南
  • 240810-Gradio通过HTML组件打开本地文件+防止网页跳转到about:blank
  • linux下ETCD安装、配置、命令
  • 如何让键盘F2功能键设置成重命名键(Fn+Esc)
  • SAM2部署过程中pip install -e . 报错:‘gbk‘ codec can‘t decode byte 0xa4
  • 【自动驾驶】ROS中的重名问题:工作空间、节点、参数
  • 【Leetcode】104. 二叉树的最大深度
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • C++类的相互关联
  • Create React App 使用
  • extjs4学习之配置
  • IDEA 插件开发入门教程
  • input的行数自动增减
  • JS题目及答案整理
  • python 学习笔记 - Queue Pipes,进程间通讯
  • scrapy学习之路4(itemloder的使用)
  • socket.io+express实现聊天室的思考(三)
  • SpingCloudBus整合RabbitMQ
  • Vim 折腾记
  • Wamp集成环境 添加PHP的新版本
  • 闭包--闭包之tab栏切换(四)
  • 对象引论
  • 分布式熔断降级平台aegis
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 山寨一个 Promise
  • 少走弯路,给Java 1~5 年程序员的建议
  • 数组的操作
  • #{}和${}的区别?
  • $ git push -u origin master 推送到远程库出错
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (¥1011)-(一千零一拾一元整)输出
  • (1)(1.13) SiK无线电高级配置(六)
  • (2024)docker-compose实战 (9)部署多项目环境(LAMP+react+vue+redis+mysql+nginx)
  • (24)(24.1) FPV和仿真的机载OSD(三)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第6节 (嵌套的Finally代码块)
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (二)延时任务篇——通过redis的key监听,实现延迟任务实战
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (九)One-Wire总线-DS18B20
  • (四)activit5.23.0修复跟踪高亮显示BUG
  • (四)Linux Shell编程——输入输出重定向
  • (四)React组件、useState、组件样式