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()漏洞
https://www.runoob.com/php/php-get.html 同时也证明了get参数是通过URL传递并且不太安全 我们可以通过在URL后添加:?内容来提交get参数
https://www.php.net/manual/zh/function.ctype-alpha.php 如果在字符串中,每个字符都是一个字母,那么就返回TRUE,反之则返回FALSE
https://www.w3school.com.cn/php/func_string_md5.asp 根据true跟flase调整加密方式(针对字符串) 可利用弱类型的特点进行绕过
附加上key,value,=>和->的解释: Array(0=>1,1=>2,2=>3,3=>4) 那么等号左边的就是数组的下标也叫索引也叫键(key),箭头指向的便是数组的值(value)。 ->:https://blog.csdn.net/qq_38275944/article/details/75576963 ->是成员访问符 =>是数组的赋值符号 (面向对象的引用) json绕后需要学习js跟面向对象(超纲了!) 先抽象学习,不纠牛角尖
https://www.php.net/intval 用于base解码
https://www.w3school.com.cn/php/func_array_search.asp
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)
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 0e85776838554cc1775842c212686416payload:
param1=s878926199a¶m2=s155964671a2.md5强比较:(= = =) md5强比较,此时如果传入的两个参数不是字符串,而是数组,md5()函数无法解出其数值,而且不会报错,就会得到===强比较的值相等
payload
param1[]=1¶m2[]=23.真实md5碰撞 待补充