-
cURL 函数
支持http、https、ftp、gopher、telnet、dict、file和ldap协议 -
strrev()
反转字符串
如:strrev("Hello world!"); // 输出 "!dlrow olleH"
-
substr()
返回字符串的子串
格式:substr ( string, start , length )- string输入字符串。必须至少有一个字符。
- start
如果 start 是非负数,返回的字符串将从字符串 的 start 位置开始,从 0 开始计算。例如,在字符串 “abcdef” 中,在位置 0 的字符是 “a”。
如果 start 是负数,返回的字符串将从 字符串 结尾处向前数第 start 个字符开始。 - length
正数的 length,返回的字符串将从 start 处开始最多包括 length 个字符。
如果提供了负数的 length,那么 字符串 末尾处的绝对值 length 个字符将会被省略
如果提供了值为 0,FALSE 或 NULL 的 length,那么将返回一个空字符串。
如果没有提供 length,返回的子字符串将从 start 位置开始直到字符串结尾。 - 例子:echo substr('abcdef', 0, 4); // abcd
echo substr('abcdef', 0, 8); // abcdef
echo substr('abcdef', -1, 1); // f
-
htmlspecialchars()
把预定义的字符转换为 HTML 实体 -
isset()
用于检测变量是否已设置,且非 NULL -
serialize()
将一个对象转换成一个字符串 -
unserialize()
将字符串还原为一个对象- 在PHP应用中,序列化和反序列化一般用做缓存,比如session缓存,cookie等。
-
preg_match()
用于执行一个正则表达式匹配 -
file_get_contents()
支持PHP伪协议
把整个文件
读入一个字符串中。
和 file() 一样,不同的是 file_get_contents() 把文件读入一个字符串。 -
is_numeric()
用于检测变量是否为数字或数字字符串- 语法:bool is_numeric ( mixed
$var
)
$var
:要检测的变量。 - 返回值:如果指定的变量是数字和数字字符串则返回 TRUE,否则返回 FALSE。
- 特性:
- 当碰到16进制数的时候,会判断成数字
- is_numeric函数对于空字符%00,无论是%00放在前后都可以判断为非数值,而%20空格字符只能放在数值后。
- 语法:bool is_numeric ( mixed
-
strcmp函数()
比较两个字符串。 -
注释:strcmp() 函数是二进制安全的,且区分大小写。
- 语法:strcmp(string1,string2)
string1 必需。规定要比较的第一个字符串。
string2 必需。规定要比较的第二个字符串。 - 返回值:
0 - 如果两个字符串相等
<0 - 如果 string1 小于 string2
>0 - 如果 string1 大于 string2 - 特性:在PHP5.3之前,传入数据的类型是字符串类型,当传入的类型不是字符串类型 函数就会发生错误,显示报错信息后会return 0 所以漏洞就出现在了这里
- 例子:(
要求get传进来的值要与$password变量里面的值相等因为用了strcmp函数所以他们俩的值相等才会返回0,0==0才能正常输出我们的flag!所以我们可以利用这个函数特性绕过它
)
<?php
$password="***************";
if(isset($_GET['password'])){
if(strcmp($_GET['password'],$password)==0){
echo "flag{xxxxx-xxx-xxxx}";
}else{
echo "NO password ";
}
}
?>
利用:这里我们构造password为一个数组数组传值为1,即password[]=1。而strcmp要求我们传入字符串 strcmp函数判断不是字符串会报错,但是会return 0 所以我们的目的达到了得到flag
- 例子:(
- 语法:strcmp(string1,string2)