南邮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
得到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。
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在头里。。。。