CTF中可能遇到的php函数
ctf中常见的PHP函数及特性
preg_match()
主要作用是检查一个字符串是否与给定的正则表达式模式匹配。
如果匹配成功,返回 1。
如果没有匹配,返回 0。
如果发生错误,返回 false。
当检测的变量是数组的时候会报错并返回0。
intval($var,$base)
其中var必填,base可选,base表示转换的基数。可以是从 2 到 36 之间的任何整数。默认值是 10,表示将字符串视为十进制数。若为0,则根据var开始的数字决定使用的进制。如果$var是一个非数字的字符串,intval() 会从字符串的开头开始解析数字,直到遇到非数字字符
该函数当传入的变量也是数组的时候,会返回1
该函数遇到不可
strpos(string $haystack, mixed $needle,)
用于查找一个字符串在另一个字符串中第一次出现的位置。
如果找到 $needle,返回第一次出现的位置(以 0 开始的索引)。
如果未找到 $needle,返回 false。
注意:如果 $needle 出现在 $haystack 的起始位置(位置 0),则返回 0(false 和 0 在 PHP 中有不同的含义)。
payload:?c=eval(next(reset(get_defined_vars())));&pay=;system("tac%20flag.php");
get_defined_vars():
该函数返回当前作用域中所有已定义的变量(包括全局变量和局部变量),以关联数组的形式返回。
例如,它可能返回类似这样的数组:['var1' => 1, 'var2' => 'string']。
reset():
reset() 是一个 PHP 函数,用于将数组的内部指针重置到数组的第一个元素。简单来说,它让指针指向数组的第一个元素。
如果给定一个数组,它会返回第一个元素;如果没有数组,默认情况下是返回 false。
next():
next() 函数用来将数组的内部指针移动到下一个元素,并返回该元素的值。如果没有下一个元素,则返回 false。
在这里,它是与 reset() 一起使用的,意图可能是移动到数组的下一个位置。
file_put_contents($a, $b)
将 $a
的内容写入到文件 $b
指定的路径中。如果文件不存在,则会创建该文件;如果文件已存在,则会覆盖原有内容。
call_user_func($a,$b)
函数调用函数 $a
,并将字符串 $b
作为参数传递给它。$a
应该是一个有效的函数名,且这个函数应该接受一个参数,并返回一个值
hex2bin()
将十六进制字符串转换为二进制字符串。
$hex = "48656c6c6f"; // "Hello" 的十六进制表示
$binary = hex2bin($hex);
echo $binary; // 输出: Hello
bin2hex()
将二进制字符串转换成十六进制字符串
$binary = "Hello"; // 原始字符串
$hex = bin2hex($binary);
echo $hex; // 输出: 48656c6c6f
scandir()
扫描路径下有哪些文件,并以数组的形式传递值
var_dump()
可以输出数组
print_r()
可以输出数组
var_export()
可以输出数组
exit(0)
可以让后面的代码不执行
ob_flush()、ob_end_flush()
将当前输出缓冲区的内容发送到浏览器
ereg($a,$b)
$a是要匹配的正则表达式模式。
$b是要搜索的字符串。匹配成功返回true,失败返回fales。
该函数存在NULL 截断漏洞,导致了正则过滤被绕过,所以可以使用%00截断正则匹配
FilesystemIterator
内置类,可以用来遍历目录,需要一个路径参数
getcwd
可以返回当前工作路径且不需要参数
GLOBALS
主要用于存储和访问所有全局变量,可以通过输出该变量查看所有变量的值
trim()
是 PHP 中用于去除字符串两端空白字符的内置函数。它可以帮助清理字符串,特别是在处理用户输入时,去掉多余的空格或其他指定字符。
trim()函数会去掉变量里的%0a %0b %0d %20 %09 这里只有%0c可用(换页符)
GET、POST
在php中变量名只有数字字母下划线,被get或者post传入的变量名,如果含有空格、+、[则会被转化为_, 但php中有个特性就是如果传入[,它被转化为_之后,后面的字符就会被保留下来不会被替换 。
get_defined_vars()
这个函数返回当前作用域内定义的所有变量的关联数组。数组的键是变量名,值是变量的值.
var_export()
这个函数用于导出一个变量的可读表示。与 print_r()
类似,var_export()
输出的是一个有效的 PHP 代码片段,可以直接在 PHP 代码中使用。var_export(get_defined_vars())会输出当前作用域内所有变量的名称和它们的值
call_user_func($a,$b)
其中$a需要是一个有效的函数名或可调用对象方法
将$b的值作为参数传递给$a,执行$a函数,并返回结果。
也可以没有$b,直接调用$a函数并返回结果
_()
即 gettext() 函数,可以将参数翻译成指定语言,一般就是原封不动的输出参数