记录一下不会的题目。
网页刚开始的样子
查看源码,发现了calc.php
打开文件,看见代码,一个黑名单过滤。输入数字就回数字,不知道要输入什么才能知道flag
输入数字就回显数字
输入命令就没什么反应
去看别人的wp才明白,这题考察的php知识
知识点:
PHP的字符串解析特性:PHP需要将所有参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事:1.删除空白符 2.将某些字符转换为下划线(包括空格)【当waf不让你过的时候,php却可以让你过】。假如waf不允许num变量传递字母,可以在num前加个空格,这样waf就找不到num这个变量了,因为现在的变量叫“ num”,而不是“num”。但php在解析的时候,会先把空格给去掉,这样我们的代码还能正常运行,还上传了非法字符。
所以,我们只要加一个空格就可以绕过
知识点:
- scandir() 函数:返回指定目录中的文件和目录的数组。
- var_dump() 函数会输出变量的详细信息,包括类型和值。它通常用于调试目的。
例 $var = "Hello, World!"; var_dump($var);
通过这个,我们就可以查看目录var_dump(scandir(/)),斜杠被过滤了 ,ascii码是47
最终命令:/calc.php?%20num=1;var_dump(scandir(chr(47)))
这是一个目录结构
知识点:
URL 参数中将 PHP 代码字符串与查询字符串连接起来,您可以使用字符串连接运算符(.)将它们组合在一起
看来要全部改变
把f1agg变成chr(102).chr(49).chr(97).chr(103).chr(103)
不对
知识点:
- file_get_contents() 函数:把整个文件读入一个字符串中。该函数是用于把文件的内容读入到一个字符串中的首选方法。如果服务器操作系统支持,还会使用内存映射技术来增强性能。
要读取文件,需要改变方法(忘记了还是看出目录的方法)
最终payload:
/calc.php?%20num=1;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))
总结:
这道题考察的是php的知识
1.PHP的字符串解析特性:PHP需要将所有参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事:1.删除空白符 2.将某些字符转换为下划线(包括空格)【当waf不让你过的时候,php却可以让你过】。
2. URL 参数中将 PHP 代码字符串与查询字符串连接起来,您可以使用字符串连接运算符(.)将它们组合在一起
3.
- scandir() 函数:返回指定目录中的文件和目录的数组。
- var_dump() 函数会输出变量的详细信息,包括类型和值。它通常用于调试目的。
例 $var = "Hello, World!"; var_dump($var);
- file_get_contents() 函数:把整个文件读入一个字符串中。