CTF中常⽤到的PHP函数(更新中)
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伪协议
php 数组字符串转数组把整个⽂件读⼊⼀个字符串中。
和 file() ⼀样,不同的是 file_get_contents() 把⽂件读⼊⼀个字符串。
is_numeric()
⽤于检测变量是否为数字或数字字符串
语法:bool is_numeric ( mixed $var )
$var:要检测的变量。
返回值:如果指定的变量是数字和数字字符串则返回 TRUE,否则返回 FALSE。
特性:
当碰到16进制数的时候,会判断成数字
is_numeric函数对于空字符%00,⽆论是%00放在前后都可以判断为⾮数值,⽽%20空格字符只能放在数值后。
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
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论