南邮ctf--Wp

10.15

1.pass check

[email protected]$_POST['pass'];
$pass1=***********;//被隐藏起来的密码
if(isset($pass))
{
if(@!strcmp($pass,$pass1)){
echo "flag:nctf{*}";
}else{
echo "the pass is wrong!";
}
}else{
echo "please input pass!";
}
?>

由源码可知,只要(!strcmp($pass,$pass1))条件成立就可得到flag。

strcmp()是用于比较字符串的函数

定义:

int strcmp ( string $str1 , string $str2 )
参数 str1第一个字符串。str2第二个字符串。
如果 str1 小于 str2 返回 < 0;
如果 str1 大于 str2 返回 > 0;
如果两者相等,返回 0。

因此尝试数组绕过,只要我们$_POST[‘pass’]是一个数组或者一个object即可,使用火狐插件hackbar 

南邮ctf--Wp

得到flag

2.起名字真难

<?php
function noother_says_correct($number)
{
       $one = ord('1');
       $nine = ord('9');
       for ($i = 0; $i < strlen($number); $i++)
       {   
               $digit = ord($number{$i});
               if ( ($digit >= $one) && ($digit <= $nine) )
               {
                       return false;
               }
       }
          return $number == '54975581388';
}
$flag='*******';
if(noother_says_correct($_GET['key']))
   echo $flag;
else 
   echo 'access denied';
?>

分析代码,要让number == '54975581388’,并且number每个字符与’54975581388’都不同。只有换进制了 

if ( ($digit >= $one) && ($digit <= $nine) )//因为这段代码,所以只能为16进制

54975581388==0xccccccccc得到flag 

10.16

1.密码重置

这里题目要求的是重置admin,user1无法更改,在hackbar里使用了base64编码,故而这里将admin进行base编码再更改请求主体。得到flag。

南邮ctf--Wp

2.伪装者

使用google插件Modify Headers伪造X-Forwarded-For:127.0.0.1访问即可。

10.17

1.bypass again

if (isset($_GET['a']) and isset($_GET['b'])) {
if ($_GET['a'] != $_GET['b'])
if (md5($_GET['a']) == md5($_GET['b']))
die('Flag: '.$flag);
else
print 'Wrong.';
}

$_GET可以接受数组但MD5
md5()不能处理数组结构的数据
利用此漏洞构造index.php?a[]=1&b[]=2

得到flag

2.headers

直接查看header头,flag在头里。。。。