1、PHP弱类型比较
题目simple_php
<?php show_source(__FILE__); include("config.php"); $a=@$_GET['a']; $b=@$_GET['b']; if($a==0 and $a){ echo $flag1; } if(is_numeric($b)){ exit(); } if($b>1234){ echo $flag2; } ?>php 弱类型总结
php中其中两种比较符号: ==:先将字符串类型转化成相同,再比较 ===:先判断两种字符串的类型是否相等,再比较 字符串和数字比较使用==时,字符串会先转换为数字类型再比较 var_dump('a' == 0);//true,此时a字符串类型转化成数字,因为a字符串开头中没有找到数字,所以转换为0 var_dump('123a' == 123);//true,这里'123a'会被转换为123 var_dump('a123' == 123);//false,因为php中有这样一个规定:字符串的开始部分决定了它的值,如果该字符串以合法的数字开始,则使用该数字至和它连续的最后一个数字结束,否则其比较时整体值为0。 举例: var_dump('123a1' == 123);//true var_dump('1233a' == 123);//false2、序列化和反序列化
题目Web_php_unserialize
深度剖析PHP序列化和反序列化
String : s:size:value; Integer : i:value; Boolean : b:value;(保存1或0) Null : N; Array : a:size:{key definition;value definition;(repeated per element)} Object : O:strlen(object name):object name:object size:{s:strlen(property name):property name:property definition;(repeated per property)}php反序列化漏洞绕过魔术方法 __wakeup
unserialize() 会检查是否存在一个 __wakeup() 方法。如果存在,则会先调用 __wakeup 方法,预先准备对象需要的资源。 当成员属性数目大于实际数目时可绕过wakeup方法(CVE-2016-7124)正则绕过
/[oc]:\d+:/i [oc]O或者C \d表示数字 +:匹配前面的子表达式一次或多次(大于等于1次) /i不区分大小写 [oc]:\d可以用 O:+4绕过 因为0+4还是43、题目Web_php_include
题解
深入剖析PHP输入流 php://input
php data:// 协议
4、phps的利用(phps文件就是php的源代码文件)
题目:PHP2
tips:hackbar execution的时候会自动进行一次url编码,所以如果用hackbar而不是在浏览器框输入,只用编码一次即可