PHP篇

1.
哈希值为0e的:(md5比较hash值)

QNKCDZO

240610708

s878926199a

s155964671a

s214587387a

s214587387a

sha1加密后也是0e开头的字符串:

sha1(str)

sha1('aaroZmOk') = 0e66507019969427134894567494305185566735

sha1('aaK1STfY') 

sha1('aaO8zKZF')

sha1('aa3OFF9m')

同时sha1和MD5不能处理数组,http://127.0.0.1/1.php?a[]=1&b[]=2

2.

php中的魔术方法,即Magic方法,php类可能会包含一些特殊的函数叫magic函数,magic函数命名是以符号__开头的。

比如 __construct, __destruct,__toString,__sleep,__wakeup等等。这些函数都会在某些特殊时候被自动调用。

3.

strcmp函数(字符串比较)

这个函数存在一个漏洞就是当传入的参数不为字符串类型时,这个函数将发生错误,在php5.3之前,函数在显示错误信息后,将会返回0。

如何传入非字符串?答案是传入数组。可以输入payload:?a[]=任意字符

4.

extract($_GET),URL 通过 get 的方式传参,数据以数组的形式被封装在 $_GET 中,在payload里面输入变量可以覆盖原来存在的数据。存在变量覆盖漏洞。

如要求原给定变量设为temp和变量flag要相同才可以输出flag

可以直接构造payload:?temp=&&flag=

把他们的值都赋为空,覆盖掉原来给定的值,就可以达成目标输出flag

 

5.

弱等于绕过

== (弱等于) 和 === (强等于)

如果类型转换后$a等于$b,那么&a == &b

如果$a和$b类型相同并且两者相等,那么&a === &b

例子:

54975581388 == 0xCCCCCCCCC(十六进制) //true

1==“1admin” //true

1==“admin”  //false

1==“admin1” //false

假如php里面我们要绕过这样的例子:

if($a==0 and $a)  //我们就可以输入a为"admin"/"admin123"...都可以

 

6.

is_numeric函数绕过

is_numeric函数的绕过和弱等于相似,拿一个ctf的例子来说:

     if(is_numeric($b)){
    exit();
     }
     if($b>1234){
       echo $flag2;
     }

不难看出我们想要获取flag,我们需要输入参数b,b既要绕开is_number()还要大于1234。这个时候我们可以这样绕过:

给b赋值 : 1235admin、10000admin、3423v....

原理和弱等于的类型转换一样。


函数及语法:

1.die() 函数输出一条消息,并退出当前脚本,无返回值。该函数是 exit() 函数的别名。

语法:die(message)

2.extract()函数从数组中将变量导入到当前的符号表(当前所有变量和值所对应组成的表)。

语法:extract(array,extract_rules,prefix)

没给extract_rules默认是overwriter(覆盖)

3.intval()函数用于获取变量的整数值。

4.ereg()函数用指定的模式搜索一个字符串中指定的字符串。
如果匹配成功返回true 否则 返回false。

5.strpos()函数查找字符串在另一字符串中第一次出现的位置。

6.is_numeric()函数用于检测变量是否为数字或数字字符串。

7.isset()检测变量是否已设置并且NULL。

8.@是为了抑制错误显示,让用户看不到,提升用户体验。注意:只是抑制错误,但是错误还是存在的。

9.null和false比较,null == false是true,null === false是false。

10.strcasecmp() 函数比较两个字符串。 

该函数返回: 

0 - 如果两个字符串相等

<0 - 如果 string1 小于 string2

>0 - 如果 string1 大于 string2

11.addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。

预定义字符是:

单引号(')

双引号(")

反斜杠(\)

NULL

12.stripslashes() 函数删除反斜杠。(可以是由 addslashes() 函数添加的反斜杠)

13.eval() 函数把字符串按照 PHP 代码来计算。语法:eval(phpcode);

该字符串必须是合法的 PHP 代码,且必须以分号结尾。

如果没有在代码字符串中调用 return 语句,则返回 NULL。如果代码中存在解析错误,则 eval() 函数返回 false。

14.in_array() 函数搜索数组中是否存在指定的值。

注释:如果 search 参数是字符串且 type 参数被设置为 TRUE,则搜索区分大小写。

语法:in_array(search,array,type)

 15.mb_strpos():返回要查找的字符串在别一个字符串中首次出现的位置(第一个字符为0)

语法:mb_strpos (要被检查的字符串,要搜索的字符串)

<?php
$str = 'http://www.feiniaomy.com';
echo mb_strpos($str,'niao');
?>

输出结果:14

注意:mb_strpos()函数返回被查找的字符串在别一字符串中首次出现的位置

string
        输入字符串。必须至少有一个字符。
start
        如果 start 是非负数,返回的字符串将从 string 的 start 位置开始,从 0 开始计算。例如,在字符串 "abcdef" 中,在位置 0 的字符是 "a",位置 2 的字符串是 "c" 等等。
        如果 start 是负数,返回的字符串将从 string 结尾处向前数第 start 个字符开始。
        如果 string 的长度小于 start,将返回 FALSE。
length
       正:返回的字符串将从 start 处开始最多包括 length 个字符(取决于 string 的长度)。
       负:string 末尾处的 length 个字符将会被省略(若 start 是负数则从字符串尾部算起)。如果 start 不在这段文本中,那么将返回 FALSE。
       如果提供了值为 0,FALSE 或 NULL 的 length,那么将返回一个空字符串。
       如果没有提供 length,返回的子字符串将从 start 位置开始直到字符串结尾。
posted @ 2020-10-03 17:13  Altriaaaa  阅读(199)  评论(0编辑  收藏  举报