进来之后一张图片看不出来啥,抓个包也没发现什么
有个robots.txt,进来有个文件
打开发现不是flag,继续抓个包看看
可以看到有个f14g.php
继续访问,发现关键代码,但是有乱码,在网上学了一招,用火孤修复
按Alt有个查看,这里修复点一下就行
通关代码拿到
2021){
echo "我不经意间看了看我的劳力士, 不是想看时间, 只是想不经意间, 让你知道我过得比你好.";
}else{
die("金钱解决不了穷人的本质问题");
}
}else{
die("去非洲吧");
}
//level 2
if (isset($_GET['md5'])){
$md5=$_GET['md5'];
if ($md5==md5($md5))
echo "想到这个CTFer拿到flag后, 感激涕零, 跑去东澜岸, 找一家餐厅, 把厨师轰出去, 自己炒两个拿手小菜, 倒一杯散装白酒, 致富有道, 别学小暴.";
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 "想到这里, 我充实而欣慰, 有钱人的快乐往往就是这么的朴实无华, 且枯燥.";
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 "我不经意间看了看我的劳力士, 不是想看时间, 只是想不经意间, 让你知道我过得比你好.";
}else{
die("金钱解决不了穷人的本质问题");
}
}else{
die("去非洲吧");
}
这里需要掌握intval函数的绕过方式,intval函数,此函数在处理数据时会在接触到字符串时停止,也就是说如果传入1e4(10000),经函数解析后会变为1,但是你在+1之后会变为10001,就能成功绕过
第二个绕过
//level 2
if (isset($_GET['md5'])){
$md5=$_GET['md5'];
if ($md5==md5($md5))
echo "想到这个CTFer拿到flag后, 感激涕零, 跑去东澜岸, 找一家餐厅, 把厨师轰出去, 自己炒两个拿手小菜, 倒一杯散装白酒, 致富有道, 别学小暴.";
else
die("我赶紧喊来我的酒肉朋友, 他打了个电话, 把他一家安排到了非洲");
}else{
die("去非洲吧");
}
php弱类型比较,要求本身和其MD5值相等,弱比较中会截取一个字符串的数字,知道遇到字符截止,比如'11e33',就会被读取为11再比较,如果是'aa111',就会被读取为0,php在以0x开头的字符串进行==弱比较时,会认为是相同的。所以这里就只需找到一个以0x开头的字符串,并且md5加密后也以0x开头的字符串。这里就在wp中找一个吧
0e215962017
成功绕过,接下来第三个
//get flag
if (isset($_GET['get_flag'])){
$get_flag = $_GET['get_flag'];
if(!strstr($get_flag," ")){//用于判断字符串空格是否是$ get_flag的子串(过滤空格)
$get_flag = str_ireplace("cat", "wctf2020", $get_flag);
echo "想到这里, 我充实而欣慰, 有钱人的快乐往往就是这么的朴实无华, 且枯燥.";
system($get_flag);
}else{
die("快到非洲了");
}
}else{
die("去非洲吧");
}
这里cat命令也被过滤了
查看一下目录
接下来就是打开了,cat被过滤可以用more,空格被过滤,这里就用<
一些空格绕过方法
最终payload: