PHP弱类型的学习

    科技2022-07-11  84

    PHP弱类型的学习

    主线 下面为学习过程中搜查的内容:1.$_GET 变量2.ctype_alpha3.md5()函数4.json_decode函数5.intval()函数6.array_search函数7.strcmp()漏洞 总结:补充:MD5碰撞

    主线

    https://www.cnblogs.com/Mrsm1th/p/6745532.html https://www.freebuf.com/articles/web/129607.html 这两个博客很详细,下面为学习过程中第一个博客搜查的内容 建议看完第一个保留疑问然后再看第二个再做复习

    下面为学习过程中搜查的内容:

    1.$_GET 变量 2.ctype_alpha 3.md5()函数 4.json_decode函数 5.intval()函数 6.array_search函数 7.strcmp()漏洞

    1.$_GET 变量

    https://www.runoob.com/php/php-get.html 同时也证明了get参数是通过URL传递并且不太安全 我们可以通过在URL后添加:?内容来提交get参数

    2.ctype_alpha

    https://www.php.net/manual/zh/function.ctype-alpha.php 如果在字符串中,每个字符都是一个字母,那么就返回TRUE,反之则返回FALSE

    3.md5()函数

    https://www.w3school.com.cn/php/func_string_md5.asp 根据true跟flase调整加密方式(针对字符串) 可利用弱类型的特点进行绕过

    4.json_decode函数

    附加上key,value,=>和->的解释: Array(0=>1,1=>2,2=>3,3=>4) 那么等号左边的就是数组的下标也叫索引也叫键(key),箭头指向的便是数组的值(value)。 ->:https://blog.csdn.net/qq_38275944/article/details/75576963 ->是成员访问符 =>是数组的赋值符号 (面向对象的引用) json绕后需要学习js跟面向对象(超纲了!) 先抽象学习,不纠牛角尖

    5.intval()函数

    https://www.php.net/intval 用于base解码

    6.array_search函数

    https://www.w3school.com.cn/php/func_array_search.asp

    7.strcmp()漏洞

    https://blog.csdn.net/cherrie007/article/details/77473817 针对低版本的php

    总结:

    1.(1)= = = 在进行比较的时候,会先判断两种字符串的类型是否相等,再比较

    (2)== 在进行比较的时候,会先将字符串类型转化成相同,再比较

    所以弱类型的利用需= =而不是===

    2.字符串的开始部分决定了它的值,如果该字符串以合法的数值开始,则使用该数值,否则其值为0。

    (1)字符串开头会被转化为0 eg:“admin”==0

    (2)合法数值开头 eg:“1admin”==1

    (3)可做运算 eg: $ test=1+“2admin”;//$test=3(int)

    补充:MD5碰撞

    1.md5弱比较:(= =) md5弱比较,为0e开头的会被识别为科学记数法, 结果均为0 0e开头的md5和原值:

    s878926199a 0e545993274517709034328855841020 s155964671a 0e342768416822451524974117254469 s214587387a 0e848240448830537924465865611904 s214587387a 0e848240448830537924465865611904 s878926199a 0e545993274517709034328855841020 s1091221200a 0e940624217856561557816327384675 s1885207154a 0e509367213418206700842008763514 s1502113478a 0e861580163291561247404381396064 240610708 0e462097431906509019562988736854 2120624 0e85776838554cc1775842c212686416

    payload:

    param1=s878926199a&param2=s155964671a

    2.md5强比较:(= = =) md5强比较,此时如果传入的两个参数不是字符串,而是数组,md5()函数无法解出其数值,而且不会报错,就会得到===强比较的值相等

    payload

    param1[]=1&param2[]=2

    3.真实md5碰撞 待补充

    Processed: 0.020, SQL: 8